[nexuiz-commits] r7191 - in branches/nexuiz-2.0: . Docs data data/gfx data/gfx/hud data/maps data/models/player data/models/sprites data/models/teamfx data/models/weapons data/qcsrc/client data/qcsrc/common data/qcsrc/menu/nexuiz data/qcsrc/server data/qcsrc/server/monsters data/qcsrc/server/pathlib data/qcsrc/server/tturrets/include data/qcsrc/server/tturrets/system data/qcsrc/server/tturrets/units data/qcsrc/server/vehicles data/scripts data/sound data/textures data/textures/egyptsoc_trim data/textures/egyptsoc_wall misc/mediasource/hud misc/netradiant-NexuizPack/nexuiz.game/data misc/tools server

DONOTREPLY at icculus.org DONOTREPLY at icculus.org
Sat Jul 11 10:59:30 EDT 2009


Author: div0
Date: 2009-07-11 10:59:28 -0400 (Sat, 11 Jul 2009)
New Revision: 7191

Added:
   branches/nexuiz-2.0/data/gfx/hud/num_0_stroke.tga
   branches/nexuiz-2.0/data/gfx/hud/num_1_stroke.tga
   branches/nexuiz-2.0/data/gfx/hud/num_2_stroke.tga
   branches/nexuiz-2.0/data/gfx/hud/num_3_stroke.tga
   branches/nexuiz-2.0/data/gfx/hud/num_4_stroke.tga
   branches/nexuiz-2.0/data/gfx/hud/num_5_stroke.tga
   branches/nexuiz-2.0/data/gfx/hud/num_6_stroke.tga
   branches/nexuiz-2.0/data/gfx/hud/num_7_stroke.tga
   branches/nexuiz-2.0/data/gfx/hud/num_8_stroke.tga
   branches/nexuiz-2.0/data/gfx/hud/num_9_stroke.tga
   branches/nexuiz-2.0/data/gfx/hud/num_colon_stroke.tga
   branches/nexuiz-2.0/data/gfx/hud/num_minus_stroke.tga
   branches/nexuiz-2.0/data/gfx/hud/num_plus_stroke.tga
   branches/nexuiz-2.0/data/gfx/hud/rifle_ring_1.tga
   branches/nexuiz-2.0/data/gfx/hud/rifle_ring_2.tga
   branches/nexuiz-2.0/data/gfx/hud/rifle_ring_3.tga
   branches/nexuiz-2.0/data/gfx/hud/rifle_ring_4.tga
   branches/nexuiz-2.0/data/gfx/hud/rifle_ring_5.tga
   branches/nexuiz-2.0/data/gfx/hud/rifle_ring_6.tga
   branches/nexuiz-2.0/data/gfx/hud/rifle_ring_7.tga
   branches/nexuiz-2.0/data/gfx/hud/rifle_ring_8.tga
   branches/nexuiz-2.0/data/gfx/hud/sb_scoreboard_bg.tga
   branches/nexuiz-2.0/data/gfx/hud/sb_scoreboard_tableheader.tga
   branches/nexuiz-2.0/data/models/player/carni_lod1.zym
   branches/nexuiz-2.0/data/models/player/carni_lod1.zym_0.skin
   branches/nexuiz-2.0/data/models/player/carni_lod1.zym_1.skin
   branches/nexuiz-2.0/data/models/player/carni_lod2.zym
   branches/nexuiz-2.0/data/models/player/carni_lod2.zym_0.skin
   branches/nexuiz-2.0/data/models/player/carni_lod2.zym_1.skin
   branches/nexuiz-2.0/data/models/player/crash_lod1.zym
   branches/nexuiz-2.0/data/models/player/crash_lod1.zym_0.skin
   branches/nexuiz-2.0/data/models/player/crash_lod2.zym
   branches/nexuiz-2.0/data/models/player/crash_lod2.zym_0.skin
   branches/nexuiz-2.0/data/models/player/grunt_lod1.zym
   branches/nexuiz-2.0/data/models/player/grunt_lod1.zym_0.skin
   branches/nexuiz-2.0/data/models/player/grunt_lod2.zym
   branches/nexuiz-2.0/data/models/player/grunt_lod2.zym_0.skin
   branches/nexuiz-2.0/data/models/player/headhunter_lod1.zym
   branches/nexuiz-2.0/data/models/player/headhunter_lod1.zym_0.skin
   branches/nexuiz-2.0/data/models/player/headhunter_lod2.zym
   branches/nexuiz-2.0/data/models/player/headhunter_lod2.zym_0.skin
   branches/nexuiz-2.0/data/models/player/insurrectionist_lod1.zym
   branches/nexuiz-2.0/data/models/player/insurrectionist_lod1.zym_0.skin
   branches/nexuiz-2.0/data/models/player/insurrectionist_lod2.zym
   branches/nexuiz-2.0/data/models/player/insurrectionist_lod2.zym_0.skin
   branches/nexuiz-2.0/data/models/player/jeandarc_lod1.zym
   branches/nexuiz-2.0/data/models/player/jeandarc_lod1.zym_0.skin
   branches/nexuiz-2.0/data/models/player/jeandarc_lod2.zym
   branches/nexuiz-2.0/data/models/player/jeandarc_lod2.zym_0.skin
   branches/nexuiz-2.0/data/models/player/lurk_lod1.zym
   branches/nexuiz-2.0/data/models/player/lurk_lod1.zym_0.skin
   branches/nexuiz-2.0/data/models/player/lurk_lod1.zym_1.skin
   branches/nexuiz-2.0/data/models/player/lurk_lod2.zym
   branches/nexuiz-2.0/data/models/player/lurk_lod2.zym_0.skin
   branches/nexuiz-2.0/data/models/player/lurk_lod2.zym_1.skin
   branches/nexuiz-2.0/data/models/player/lycanthrope_lod1.zym
   branches/nexuiz-2.0/data/models/player/lycanthrope_lod1.zym_0.skin
   branches/nexuiz-2.0/data/models/player/lycanthrope_lod2.zym
   branches/nexuiz-2.0/data/models/player/lycanthrope_lod2.zym_0.skin
   branches/nexuiz-2.0/data/models/player/marine_lod1.zym
   branches/nexuiz-2.0/data/models/player/marine_lod1.zym_0.skin
   branches/nexuiz-2.0/data/models/player/marine_lod2.zym
   branches/nexuiz-2.0/data/models/player/marine_lod2.zym_0.skin
   branches/nexuiz-2.0/data/models/player/nexus_lod1.zym
   branches/nexuiz-2.0/data/models/player/nexus_lod1.zym_0.skin
   branches/nexuiz-2.0/data/models/player/nexus_lod1.zym_1.skin
   branches/nexuiz-2.0/data/models/player/nexus_lod1.zym_2.skin
   branches/nexuiz-2.0/data/models/player/nexus_lod1.zym_3.skin
   branches/nexuiz-2.0/data/models/player/nexus_lod1.zym_4.skin
   branches/nexuiz-2.0/data/models/player/nexus_lod1.zym_5.skin
   branches/nexuiz-2.0/data/models/player/nexus_lod1.zym_6.skin
   branches/nexuiz-2.0/data/models/player/nexus_lod2.zym
   branches/nexuiz-2.0/data/models/player/nexus_lod2.zym_0.skin
   branches/nexuiz-2.0/data/models/player/nexus_lod2.zym_1.skin
   branches/nexuiz-2.0/data/models/player/nexus_lod2.zym_2.skin
   branches/nexuiz-2.0/data/models/player/nexus_lod2.zym_3.skin
   branches/nexuiz-2.0/data/models/player/nexus_lod2.zym_4.skin
   branches/nexuiz-2.0/data/models/player/nexus_lod2.zym_5.skin
   branches/nexuiz-2.0/data/models/player/nexus_lod2.zym_6.skin
   branches/nexuiz-2.0/data/models/player/pyria_lod1.zym
   branches/nexuiz-2.0/data/models/player/pyria_lod1.zym_0.skin
   branches/nexuiz-2.0/data/models/player/pyria_lod2.zym
   branches/nexuiz-2.0/data/models/player/pyria_lod2.zym_0.skin
   branches/nexuiz-2.0/data/models/player/shock_lod1.zym
   branches/nexuiz-2.0/data/models/player/shock_lod1.zym_0.skin
   branches/nexuiz-2.0/data/models/player/shock_lod2.zym
   branches/nexuiz-2.0/data/models/player/shock_lod2.zym_0.skin
   branches/nexuiz-2.0/data/models/player/skadi_lod1.zym
   branches/nexuiz-2.0/data/models/player/skadi_lod1.zym_0.skin
   branches/nexuiz-2.0/data/models/player/skadi_lod2.zym
   branches/nexuiz-2.0/data/models/player/skadi_lod2.zym_0.skin
   branches/nexuiz-2.0/data/models/player/specop_lod1.zym
   branches/nexuiz-2.0/data/models/player/specop_lod1.zym_0.skin
   branches/nexuiz-2.0/data/models/player/specop_lod2.zym
   branches/nexuiz-2.0/data/models/player/specop_lod2.zym_0.skin
   branches/nexuiz-2.0/data/models/player/visitant_lod1.zym
   branches/nexuiz-2.0/data/models/player/visitant_lod1.zym_0.skin
   branches/nexuiz-2.0/data/models/player/visitant_lod2.zym
   branches/nexuiz-2.0/data/models/player/visitant_lod2.zym_0.skin
   branches/nexuiz-2.0/data/models/sprites/bluebase_frame0.tga
   branches/nexuiz-2.0/data/models/sprites/danger_frame0.tga
   branches/nexuiz-2.0/data/models/sprites/flagcarrier_frame0.tga
   branches/nexuiz-2.0/data/models/sprites/helpme_frame0.tga
   branches/nexuiz-2.0/data/models/sprites/here_frame0.tga
   branches/nexuiz-2.0/data/models/sprites/key-dropped_frame0.tga
   branches/nexuiz-2.0/data/models/sprites/keycarrier-blue_frame0.tga
   branches/nexuiz-2.0/data/models/sprites/keycarrier-finish_frame0.tga
   branches/nexuiz-2.0/data/models/sprites/keycarrier-friend_frame0.tga
   branches/nexuiz-2.0/data/models/sprites/keycarrier-pink_frame0.tga
   branches/nexuiz-2.0/data/models/sprites/keycarrier-red_frame0.tga
   branches/nexuiz-2.0/data/models/sprites/keycarrier-yellow_frame0.tga
   branches/nexuiz-2.0/data/models/sprites/nb-ball_frame0.tga
   branches/nexuiz-2.0/data/models/sprites/ons-cp-blue_frame0.tga
   branches/nexuiz-2.0/data/models/sprites/ons-cp-neut_frame0.tga
   branches/nexuiz-2.0/data/models/sprites/ons-cp-red_frame0.tga
   branches/nexuiz-2.0/data/models/sprites/ons-gen-blue_frame0.tga
   branches/nexuiz-2.0/data/models/sprites/ons-gen-red_frame0.tga
   branches/nexuiz-2.0/data/models/sprites/ons-gen-shielded_frame0.tga
   branches/nexuiz-2.0/data/models/sprites/race-checkpoint_frame0.tga
   branches/nexuiz-2.0/data/models/sprites/race-finish_frame0.tga
   branches/nexuiz-2.0/data/models/sprites/race-start_frame0.tga
   branches/nexuiz-2.0/data/models/sprites/redbase_frame0.tga
   branches/nexuiz-2.0/data/models/sprites/waypoint_frame0.tga
   branches/nexuiz-2.0/data/models/teamfx/electricityarcs.md3
   branches/nexuiz-2.0/data/models/teamfx/electricityarcs_player.md3
   branches/nexuiz-2.0/data/models/teamfx/flare.md3
   branches/nexuiz-2.0/data/models/teamfx/flare.tga
   branches/nexuiz-2.0/data/models/teamfx/ray.md3
   branches/nexuiz-2.0/data/models/teamfx/ray.md3_0.skin
   branches/nexuiz-2.0/data/models/teamfx/ray.md3_1.skin
   branches/nexuiz-2.0/data/models/teamfx/ray.md3_2.skin
   branches/nexuiz-2.0/data/models/teamfx/ray.md3_3.skin
   branches/nexuiz-2.0/data/models/teamfx/rayblue.tga
   branches/nexuiz-2.0/data/models/teamfx/raypink.tga
   branches/nexuiz-2.0/data/models/teamfx/rayred.tga
   branches/nexuiz-2.0/data/models/teamfx/rayyellow.tga
   branches/nexuiz-2.0/data/models/teamfx/shockwave.md3
   branches/nexuiz-2.0/data/models/teamfx/shockwave.md3_0.skin
   branches/nexuiz-2.0/data/models/teamfx/shockwave.md3_1.skin
   branches/nexuiz-2.0/data/models/teamfx/shockwave.md3_2.skin
   branches/nexuiz-2.0/data/models/teamfx/shockwave.md3_3.skin
   branches/nexuiz-2.0/data/physicsNexrun.cfg
   branches/nexuiz-2.0/data/scripts/cyberparcour01.shader
   branches/nexuiz-2.0/data/sound/cyberparcour01/
   branches/nexuiz-2.0/data/textures/carni_gloss.tga
   branches/nexuiz-2.0/data/textures/carni_norm.tga
   branches/nexuiz-2.0/data/textures/cyberparcour01_shaders/
   branches/nexuiz-2.0/data/textures/cyberparcour01_textures/
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/032-01c_r.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/032-01c_r_norm.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/032-02c_r.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/032-02c_r_norm.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/032-03c_r.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/032-03c_r_norm.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/032-04c_r.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/032-04c_r_norm.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/032-04d_r.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/032-04d_r_norm.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/032-04e_r.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/032-04f_r.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/032-05c_r.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/032-05c_r_norm.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/032-05d_r.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/032-05d_r_norm.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/032-06c_r.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/032-06c_r_norm.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/048-01a_r.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/048-01a_r_norm.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/048-01c_r.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/048-01c_r_norm.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/048-02c_r.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/048-02c_r_norm.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/048-02d_r.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/048-02d_r_norm.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/048-02g_r.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/048-02g_r_norm.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/048-02h_r.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/048-02h_r_norm.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/064-01c_r.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/064-01c_r_norm.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/064-02c_r.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/064-02c_r_norm.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/064-03a_r.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/064-03a_r_norm.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/064-03b_r.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/064-03b_r_norm.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/064-03c_r.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/064-03c_r_norm.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/064-04a_r.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/064-04a_r_norm.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/064-04c_r.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/064-04c_r_norm.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/064-05b_r.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/064-05b_r_norm.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/064-05c_r.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/064-05c_r_norm.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/064-06c_r.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/064-06c_r_norm.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/064-07c_r.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/064-07c_r_norm.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/064-07d_r.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/064-07d_r_norm.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/096-01c_r.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/096-01c_r_norm.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/128-03a_r.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/128-03a_r_norm.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/128-04c_r.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/128-04c_r_norm.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/128-04d_r.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/128-04d_r_norm.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/128-comb1_r.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/128-comb1_r_norm.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/s064-01c_r.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/s064-01c_r_norm.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/s064-01d_r.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/s064-01d_r_norm.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/s064-01e_r.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/s064-01e_r_norm.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/s064-01f_r.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/s064-01f_r_norm.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/s064-02c_r.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/s064-02c_r_norm.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/s064-02d_r.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/s064-02d_r_norm.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/s064-03c_r.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/s064-03c_r_norm.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/s064-03d_r.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/s064-03d_r_norm.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/s064-04c_r.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/s064-04c_r_norm.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/s064-04d_r.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/s064-04d_r_norm.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/s128-01c_r.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/s128-01c_r_glow.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/s128-01c_r_norm.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/s128-01d_r.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/s128-01d_r_glow.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/s128-01d_r_norm.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/s128-02c_r.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/s128-02c_r_norm.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/s128-02d_r.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/s128-02d_r_norm.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/s128-04c_r.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/s128-04c_r_norm.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/s128-04d_r.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/s128-04d_r_norm.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/t064-02c_r.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/t064-02c_r_norm.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/t064-02d_r.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/t064-02d_r_norm.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/v064-01c_r.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/v064-01c_r_norm.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/v064-01d_r.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/v064-01d_r_norm.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/v064-02c_r.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/v064-02c_r_norm.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/v064-02d_r.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/v064-02d_r_norm.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/v064-03c_r.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/v064-03c_r_norm.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/v064-03d_r.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/v064-03d_r_norm.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/v096-01b_r.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/v096-01b_r_norm.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/v096-01c_r.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/v096-01c_r_norm.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/v128-01c_r.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/v128-01c_r_norm.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/v128-01d_r.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/v128-01d_r_norm.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/v128-02c_r.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/v128-02c_r_norm.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/v128-02d_r.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/v128-02d_r_norm.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/v128-03c_r.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/v128-03c_r_norm.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/v128-03d_r.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/v128-03d_r_norm.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/v128-03g_r.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/v128-03g_r_norm.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/v128-04c_r.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/v128-04c_r_norm.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/v128-04d_r.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/v128-04d_r_norm.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/v128-04g_r.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_trim/v128-04g_r_norm.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_wall/stone05a_r.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_wall/stone05a_r_norm.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_wall/stone05b_r.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_wall/stone05b_r_norm.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_wall/stone06a_r.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_wall/stone06a_r_norm.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_wall/stone06b_r.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_wall/stone06b_r_norm.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_wall/stone07a_r.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_wall/stone07a_r_norm.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_wall/stone07b_r.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_wall/stone07b_r_norm.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_wall/stone07c_r.tga
   branches/nexuiz-2.0/data/textures/egyptsoc_wall/stone07c_r_norm.tga
   branches/nexuiz-2.0/data/textures/headhunter_gloss.tga
   branches/nexuiz-2.0/data/textures/headhunter_norm.tga
   branches/nexuiz-2.0/data/textures/lycanthrope_norm.tga
   branches/nexuiz-2.0/data/textures/shock_gloss.tga
   branches/nexuiz-2.0/misc/mediasource/hud/numbers.png
   branches/nexuiz-2.0/misc/mediasource/hud/numbers_outline.png
   branches/nexuiz-2.0/misc/mediasource/hud/sb_scoreboard_bg.xcf
   branches/nexuiz-2.0/misc/mediasource/hud/sprite-to-num.sh
Removed:
   branches/nexuiz-2.0/data/gfx/dismal_radar.tga
   branches/nexuiz-2.0/data/maps/dismal.bsp
   branches/nexuiz-2.0/data/maps/dismal.jpg
   branches/nexuiz-2.0/data/maps/dismal.map
   branches/nexuiz-2.0/data/maps/dismal.mapinfo
   branches/nexuiz-2.0/data/maps/dismal.rtlights
   branches/nexuiz-2.0/data/maps/dismal.waypoints
   branches/nexuiz-2.0/data/maps/dismal.waypoints.cache
   branches/nexuiz-2.0/data/maps/dismal/
   branches/nexuiz-2.0/data/models/sprites/nb-ball.tga
   branches/nexuiz-2.0/data/textures/lycanthrope_bump.tga
Modified:
   branches/nexuiz-2.0/.patchsets
   branches/nexuiz-2.0/Docs/mapping.txt
   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/gfx/crosshaircampingrifle.tga
   branches/nexuiz-2.0/data/gfx/crosshaircrylink.tga
   branches/nexuiz-2.0/data/gfx/crosshairelectro.tga
   branches/nexuiz-2.0/data/gfx/crosshairgrenadelauncher.tga
   branches/nexuiz-2.0/data/gfx/crosshairhagar.tga
   branches/nexuiz-2.0/data/gfx/crosshairhlac.tga
   branches/nexuiz-2.0/data/gfx/crosshairhook.tga
   branches/nexuiz-2.0/data/gfx/crosshairlaser.tga
   branches/nexuiz-2.0/data/gfx/crosshairminstanex.tga
   branches/nexuiz-2.0/data/gfx/crosshairporto.tga
   branches/nexuiz-2.0/data/gfx/crosshairseeker.tga
   branches/nexuiz-2.0/data/gfx/crosshairuzi.tga
   branches/nexuiz-2.0/data/gfx/hud/num_0.tga
   branches/nexuiz-2.0/data/gfx/hud/num_1.tga
   branches/nexuiz-2.0/data/gfx/hud/num_2.tga
   branches/nexuiz-2.0/data/gfx/hud/num_3.tga
   branches/nexuiz-2.0/data/gfx/hud/num_4.tga
   branches/nexuiz-2.0/data/gfx/hud/num_5.tga
   branches/nexuiz-2.0/data/gfx/hud/num_6.tga
   branches/nexuiz-2.0/data/gfx/hud/num_7.tga
   branches/nexuiz-2.0/data/gfx/hud/num_8.tga
   branches/nexuiz-2.0/data/gfx/hud/num_9.tga
   branches/nexuiz-2.0/data/gfx/hud/num_colon.tga
   branches/nexuiz-2.0/data/gfx/hud/num_minus.tga
   branches/nexuiz-2.0/data/gfx/hud/num_plus.tga
   branches/nexuiz-2.0/data/gfx/hud/sb_timerbg.tga
   branches/nexuiz-2.0/data/models/player/carni.zym
   branches/nexuiz-2.0/data/models/player/grunt.zym
   branches/nexuiz-2.0/data/models/player/headhunter.zym
   branches/nexuiz-2.0/data/models/player/insurrectionist.zym
   branches/nexuiz-2.0/data/models/player/jeandarc.zym
   branches/nexuiz-2.0/data/models/player/lurk.zym
   branches/nexuiz-2.0/data/models/player/lycanthrope.zym
   branches/nexuiz-2.0/data/models/player/marine.zym
   branches/nexuiz-2.0/data/models/player/nexus.zym
   branches/nexuiz-2.0/data/models/player/pyria.zym
   branches/nexuiz-2.0/data/models/player/shock.zym
   branches/nexuiz-2.0/data/models/player/skadi.zym
   branches/nexuiz-2.0/data/models/player/specop.zym
   branches/nexuiz-2.0/data/models/player/visitant.zym
   branches/nexuiz-2.0/data/models/sprites/as-defend_frame0.tga
   branches/nexuiz-2.0/data/models/sprites/as-destroy_frame0.tga
   branches/nexuiz-2.0/data/models/sprites/as-push_frame0.tga
   branches/nexuiz-2.0/data/models/sprites/dom-blue_frame0.tga
   branches/nexuiz-2.0/data/models/sprites/dom-neut_frame0.tga
   branches/nexuiz-2.0/data/models/sprites/dom-pink_frame0.tga
   branches/nexuiz-2.0/data/models/sprites/dom-red_frame0.tga
   branches/nexuiz-2.0/data/models/sprites/dom-yellow_frame0.tga
   branches/nexuiz-2.0/data/models/sprites/item-extralife_frame0.tga
   branches/nexuiz-2.0/data/models/sprites/item-extralife_frame1.tga
   branches/nexuiz-2.0/data/models/sprites/item-fuelregen_frame0.tga
   branches/nexuiz-2.0/data/models/sprites/item-fuelregen_frame1.tga
   branches/nexuiz-2.0/data/models/sprites/item-invis_frame0.tga
   branches/nexuiz-2.0/data/models/sprites/item-invis_frame1.tga
   branches/nexuiz-2.0/data/models/sprites/item-jetpack_frame0.tga
   branches/nexuiz-2.0/data/models/sprites/item-jetpack_frame1.tga
   branches/nexuiz-2.0/data/models/sprites/item-shield_frame0.tga
   branches/nexuiz-2.0/data/models/sprites/item-shield_frame1.tga
   branches/nexuiz-2.0/data/models/sprites/item-speed_frame0.tga
   branches/nexuiz-2.0/data/models/sprites/item-speed_frame1.tga
   branches/nexuiz-2.0/data/models/sprites/item-strength_frame0.tga
   branches/nexuiz-2.0/data/models/sprites/item-strength_frame1.tga
   branches/nexuiz-2.0/data/models/sprites/make-sprites.sh
   branches/nexuiz-2.0/data/models/sprites/ons-cp-atck-blue_frame0.tga
   branches/nexuiz-2.0/data/models/sprites/ons-cp-atck-blue_frame1.tga
   branches/nexuiz-2.0/data/models/sprites/ons-cp-atck-neut_frame0.tga
   branches/nexuiz-2.0/data/models/sprites/ons-cp-atck-neut_frame1.tga
   branches/nexuiz-2.0/data/models/sprites/ons-cp-atck-red_frame0.tga
   branches/nexuiz-2.0/data/models/sprites/ons-cp-atck-red_frame1.tga
   branches/nexuiz-2.0/data/models/sprites/ons-cp-dfnd-blue_frame0.tga
   branches/nexuiz-2.0/data/models/sprites/ons-cp-dfnd-blue_frame1.tga
   branches/nexuiz-2.0/data/models/sprites/ons-cp-dfnd-red_frame0.tga
   branches/nexuiz-2.0/data/models/sprites/ons-cp-dfnd-red_frame1.tga
   branches/nexuiz-2.0/data/models/sprites/wpn-campingrifle_frame0.tga
   branches/nexuiz-2.0/data/models/sprites/wpn-crylink_frame0.tga
   branches/nexuiz-2.0/data/models/sprites/wpn-electro_frame0.tga
   branches/nexuiz-2.0/data/models/sprites/wpn-gl_frame0.tga
   branches/nexuiz-2.0/data/models/sprites/wpn-hagar_frame0.tga
   branches/nexuiz-2.0/data/models/sprites/wpn-hlac_frame0.tga
   branches/nexuiz-2.0/data/models/sprites/wpn-hookgun_frame0.tga
   branches/nexuiz-2.0/data/models/sprites/wpn-laser_frame0.tga
   branches/nexuiz-2.0/data/models/sprites/wpn-minstanex_frame0.tga
   branches/nexuiz-2.0/data/models/sprites/wpn-nex_frame0.tga
   branches/nexuiz-2.0/data/models/sprites/wpn-porto_frame0.tga
   branches/nexuiz-2.0/data/models/sprites/wpn-rl_frame0.tga
   branches/nexuiz-2.0/data/models/sprites/wpn-seeker_frame0.tga
   branches/nexuiz-2.0/data/models/sprites/wpn-shotgun_frame0.tga
   branches/nexuiz-2.0/data/models/sprites/wpn-uzi_frame0.tga
   branches/nexuiz-2.0/data/models/weapons/h_campingrifle.dpm.framegroups
   branches/nexuiz-2.0/data/qcsrc/client/Defs.qc
   branches/nexuiz-2.0/data/qcsrc/client/Main.qc
   branches/nexuiz-2.0/data/qcsrc/client/View.qc
   branches/nexuiz-2.0/data/qcsrc/client/bgmscript.qc
   branches/nexuiz-2.0/data/qcsrc/client/bgmscript.qh
   branches/nexuiz-2.0/data/qcsrc/client/casings.qc
   branches/nexuiz-2.0/data/qcsrc/client/csqc_builtins.qc
   branches/nexuiz-2.0/data/qcsrc/client/csqc_constants.qc
   branches/nexuiz-2.0/data/qcsrc/client/ctf.qc
   branches/nexuiz-2.0/data/qcsrc/client/damage.qc
   branches/nexuiz-2.0/data/qcsrc/client/effects.qc
   branches/nexuiz-2.0/data/qcsrc/client/gibs.qc
   branches/nexuiz-2.0/data/qcsrc/client/hook.qc
   branches/nexuiz-2.0/data/qcsrc/client/interpolate.qc
   branches/nexuiz-2.0/data/qcsrc/client/interpolate.qh
   branches/nexuiz-2.0/data/qcsrc/client/laser.qc
   branches/nexuiz-2.0/data/qcsrc/client/main.qh
   branches/nexuiz-2.0/data/qcsrc/client/mapvoting.qc
   branches/nexuiz-2.0/data/qcsrc/client/miscfunctions.qc
   branches/nexuiz-2.0/data/qcsrc/client/movetypes.qc
   branches/nexuiz-2.0/data/qcsrc/client/movetypes.qh
   branches/nexuiz-2.0/data/qcsrc/client/particles.qc
   branches/nexuiz-2.0/data/qcsrc/client/prandom.qc
   branches/nexuiz-2.0/data/qcsrc/client/prandom.qh
   branches/nexuiz-2.0/data/qcsrc/client/pre.qh
   branches/nexuiz-2.0/data/qcsrc/client/projectile.qc
   branches/nexuiz-2.0/data/qcsrc/client/rubble.qc
   branches/nexuiz-2.0/data/qcsrc/client/sbar.qc
   branches/nexuiz-2.0/data/qcsrc/client/sortlist.qc
   branches/nexuiz-2.0/data/qcsrc/client/teamplay.qc
   branches/nexuiz-2.0/data/qcsrc/client/teamradar.qc
   branches/nexuiz-2.0/data/qcsrc/client/teamradar.qh
   branches/nexuiz-2.0/data/qcsrc/client/wall.qc
   branches/nexuiz-2.0/data/qcsrc/client/waypointsprites.qc
   branches/nexuiz-2.0/data/qcsrc/client/waypointsprites.qh
   branches/nexuiz-2.0/data/qcsrc/common/constants.qh
   branches/nexuiz-2.0/data/qcsrc/common/gamecommand.qc
   branches/nexuiz-2.0/data/qcsrc/common/items.qc
   branches/nexuiz-2.0/data/qcsrc/common/items.qh
   branches/nexuiz-2.0/data/qcsrc/common/mapinfo.qc
   branches/nexuiz-2.0/data/qcsrc/common/mapinfo.qh
   branches/nexuiz-2.0/data/qcsrc/common/util-pre.qh
   branches/nexuiz-2.0/data/qcsrc/common/util.qc
   branches/nexuiz-2.0/data/qcsrc/common/util.qh
   branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/bigbutton.c
   branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/bigcommandbutton.c
   branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/colorpicker.c
   branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/cvarlist.c
   branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/demolist.c
   branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/dialog_multiplayer_create.c
   branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/dialog_multiplayer_create_advanced.c
   branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/dialog_multiplayer_demo.c
   branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/dialog_multiplayer_join_serverinfo.c
   branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/dialog_multiplayer_playersetup.c
   branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/dialog_multiplayer_playersetup_radar.c
   branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/dialog_multiplayer_playersetup_weapons.c
   branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/dialog_settings_audio.c
   branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/dialog_settings_misc_cvars.c
   branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/dialog_settings_network.c
   branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/maplist.c
   branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/modbutton.c
   branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/playerlist.c
   branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/skinlist.c
   branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/util.qc
   branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/util.qh
   branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/weaponslist.c
   branches/nexuiz-2.0/data/qcsrc/server/bots_scripting.qc
   branches/nexuiz-2.0/data/qcsrc/server/cl_client.qc
   branches/nexuiz-2.0/data/qcsrc/server/cl_physics.qc
   branches/nexuiz-2.0/data/qcsrc/server/cl_player.qc
   branches/nexuiz-2.0/data/qcsrc/server/cl_weaponsystem.qc
   branches/nexuiz-2.0/data/qcsrc/server/clientcommands.qc
   branches/nexuiz-2.0/data/qcsrc/server/constants.qh
   branches/nexuiz-2.0/data/qcsrc/server/csqceffects.qc
   branches/nexuiz-2.0/data/qcsrc/server/csqcprojectile.qc
   branches/nexuiz-2.0/data/qcsrc/server/csqcprojectile.qh
   branches/nexuiz-2.0/data/qcsrc/server/ctf.qc
   branches/nexuiz-2.0/data/qcsrc/server/defs.qh
   branches/nexuiz-2.0/data/qcsrc/server/ent_cs.qc
   branches/nexuiz-2.0/data/qcsrc/server/func_breakable.qc
   branches/nexuiz-2.0/data/qcsrc/server/g_hook.qh
   branches/nexuiz-2.0/data/qcsrc/server/g_models.qc
   branches/nexuiz-2.0/data/qcsrc/server/g_triggers.qc
   branches/nexuiz-2.0/data/qcsrc/server/g_world.qc
   branches/nexuiz-2.0/data/qcsrc/server/gamecommand.qc
   branches/nexuiz-2.0/data/qcsrc/server/havocbot_ctf.qc
   branches/nexuiz-2.0/data/qcsrc/server/havocbot_ons.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/monsters/ai.qc
   branches/nexuiz-2.0/data/qcsrc/server/monsters/defs.qc
   branches/nexuiz-2.0/data/qcsrc/server/monsters/fight.qc
   branches/nexuiz-2.0/data/qcsrc/server/monsters/m_monsters.qc
   branches/nexuiz-2.0/data/qcsrc/server/monsters/mode_management.qc
   branches/nexuiz-2.0/data/qcsrc/server/movelib.qc
   branches/nexuiz-2.0/data/qcsrc/server/nexball.qc
   branches/nexuiz-2.0/data/qcsrc/server/pathlib.qc
   branches/nexuiz-2.0/data/qcsrc/server/pathlib/costs.qc
   branches/nexuiz-2.0/data/qcsrc/server/pathlib/debug.qc
   branches/nexuiz-2.0/data/qcsrc/server/pathlib/expandnode.qc
   branches/nexuiz-2.0/data/qcsrc/server/pathlib/main.qc
   branches/nexuiz-2.0/data/qcsrc/server/pathlib/movenode.qc
   branches/nexuiz-2.0/data/qcsrc/server/pathlib/pathlib.qh
   branches/nexuiz-2.0/data/qcsrc/server/pathlib/utility.qc
   branches/nexuiz-2.0/data/qcsrc/server/portals.qc
   branches/nexuiz-2.0/data/qcsrc/server/portals.qh
   branches/nexuiz-2.0/data/qcsrc/server/post-builtins.qh
   branches/nexuiz-2.0/data/qcsrc/server/pre-builtins.qh
   branches/nexuiz-2.0/data/qcsrc/server/race.qc
   branches/nexuiz-2.0/data/qcsrc/server/race.qh
   branches/nexuiz-2.0/data/qcsrc/server/scores.qc
   branches/nexuiz-2.0/data/qcsrc/server/scores.qh
   branches/nexuiz-2.0/data/qcsrc/server/scores_rules.qc
   branches/nexuiz-2.0/data/qcsrc/server/steerlib.qc
   branches/nexuiz-2.0/data/qcsrc/server/sv_main.qc
   branches/nexuiz-2.0/data/qcsrc/server/t_items.qc
   branches/nexuiz-2.0/data/qcsrc/server/t_teleporters.qc
   branches/nexuiz-2.0/data/qcsrc/server/target_spawn.qc
   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_ewheel.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/vehicles/racer.qc
   branches/nexuiz-2.0/data/qcsrc/server/vehicles/spiderbot.qc
   branches/nexuiz-2.0/data/qcsrc/server/vehicles/vehicles.qc
   branches/nexuiz-2.0/data/qcsrc/server/vehicles/vehicles.qh
   branches/nexuiz-2.0/data/qcsrc/server/verbstack.qc
   branches/nexuiz-2.0/data/qcsrc/server/vote.qc
   branches/nexuiz-2.0/data/qcsrc/server/vote.qh
   branches/nexuiz-2.0/data/qcsrc/server/w_campingrifle.qc
   branches/nexuiz-2.0/data/qcsrc/server/w_hlac.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_porto.qc
   branches/nexuiz-2.0/data/qcsrc/server/w_seeker.qc
   branches/nexuiz-2.0/data/qcsrc/server/w_tuba.qc
   branches/nexuiz-2.0/data/qcsrc/server/waypointsprites.qc
   branches/nexuiz-2.0/data/scripts/eX.shader
   branches/nexuiz-2.0/data/scripts/entities.def
   branches/nexuiz-2.0/data/scripts/shaderlist.txt
   branches/nexuiz-2.0/data/scripts/strength.shader
   branches/nexuiz-2.0/data/scripts/teamfx.shader
   branches/nexuiz-2.0/data/textures/insurrectionist.tga
   branches/nexuiz-2.0/data/textures/insurrectionist_glow.tga
   branches/nexuiz-2.0/data/textures/lycanthrope.tga
   branches/nexuiz-2.0/data/textures/lycanthrope_gloss.tga
   branches/nexuiz-2.0/data/textures/pyria.tga
   branches/nexuiz-2.0/data/textures/pyria_glow.tga
   branches/nexuiz-2.0/data/textures/pyria_pants.tga
   branches/nexuiz-2.0/data/textures/pyria_shirt.tga
   branches/nexuiz-2.0/data/textures/shock.tga
   branches/nexuiz-2.0/data/tooltips.db
   branches/nexuiz-2.0/data/weapons.cfg
   branches/nexuiz-2.0/misc/netradiant-NexuizPack/nexuiz.game/data/entities.def
   branches/nexuiz-2.0/misc/tools/midi2cfg-ng.conf
   branches/nexuiz-2.0/server/server.cfg
Log:
r7091 | m0rfar | 2009-06-23 17:16:09 -0400 (Tue, 23 Jun 2009) | 3 lines
* New race map! CyberParcour01 by Sev
* Removed duplicate shader "textures/eX/eX_floor_grate_03"
* Added missing shaders to shaderlist.txt
r7092 | div0 | 2009-06-24 01:32:52 -0400 (Wed, 24 Jun 2009) | 3 lines
- healthbars for players with attached sprite (flag carrier, key carrier, ball kicker)
- build bar (smoothly increasing) for powerup respawn
r7093 | div0 | 2009-06-24 01:38:41 -0400 (Wed, 24 Jun 2009) | 2 lines
damn, add back sys_ticrate var
r7094 | div0 | 2009-06-24 01:44:01 -0400 (Wed, 24 Jun 2009) | 2 lines
change blue sprite color to the new team color
r7095 | div0 | 2009-06-24 03:55:58 -0400 (Wed, 24 Jun 2009) | 2 lines
half health bar be start health
r7096 | div0 | 2009-06-24 06:22:57 -0400 (Wed, 24 Jun 2009) | 3 lines
build bar: center it
health bar: left align it
r7097 | morphed | 2009-06-24 17:08:16 -0400 (Wed, 24 Jun 2009) | 1 line
shockwave for flagcapture fx
r7098 | morphed | 2009-06-24 18:07:11 -0400 (Wed, 24 Jun 2009) | 1 line
more assets for flag capture fx
r7099 | morphed | 2009-06-24 19:55:08 -0400 (Wed, 24 Jun 2009) | 1 line
flag carrier fx assets
r7100 | tzork | 2009-06-24 20:16:01 -0400 (Wed, 24 Jun 2009) | 2 lines
#367 - Timer team background bugfix
patch by FruitieX.
r7101 | tzork | 2009-06-24 23:38:40 -0400 (Wed, 24 Jun 2009) | 3 lines
Patch by Dib, Improved by tZork.
g_shootfromclient & cl_gunalign support. 
Lets clients decide then gun alignment (right, center or left) with cl_gunalign if server is running with g_shootfromclient 
r7102 | div0 | 2009-06-25 01:36:34 -0400 (Thu, 25 Jun 2009) | 2 lines
crosshair_hittest: new feature: enlarge when aiming at enemy (optional)
r7103 | div0 | 2009-06-25 02:01:08 -0400 (Thu, 25 Jun 2009) | 2 lines
work around fteqcc bug with buildbar alignment
r7104 | div0 | 2009-06-25 02:04:19 -0400 (Thu, 25 Jun 2009) | 2 lines
make strength also a little brighter
r7105 | div0 | 2009-06-25 02:12:51 -0400 (Thu, 25 Jun 2009) | 2 lines
use the proper blue color everywhere(?)
r7106 | morphed | 2009-06-25 09:34:02 -0400 (Thu, 25 Jun 2009) | 1 line
missing shaders
r7107 | morphed | 2009-06-25 09:46:37 -0400 (Thu, 25 Jun 2009) | 1 line
model tweaks for flag carrier fx
r7108 | m0rfar | 2009-06-25 13:29:17 -0400 (Thu, 25 Jun 2009) | 1 line
hud fixes by FruitieX
r7109 | div0 | 2009-06-25 15:42:46 -0400 (Thu, 25 Jun 2009) | 3 lines
cl_gunalign: default to center handedness so you know if you are on such a server.
also: mirror the ORIGINAL shot origin instead of using hardcoded values for left handed mode. Hardcoded makes many weapons look bad.
r7110 | m0rfar | 2009-06-25 15:46:24 -0400 (Thu, 25 Jun 2009) | 1 line
waypoint sprite update by fruitiex, I hope I didn't fail
r7111 | m0rfar | 2009-06-25 17:41:20 -0400 (Thu, 25 Jun 2009) | 1 line
oops I forgot these
r7112 | morphed | 2009-06-25 20:51:21 -0400 (Thu, 25 Jun 2009) | 1 line
Shock eat lots of boring tuna and went to gym
r7113 | morphed | 2009-06-26 03:25:17 -0400 (Fri, 26 Jun 2009) | 1 line
headhunter went to gym too, unarmored carni now have normal maps
r7114 | mrbougo | 2009-06-27 10:26:20 -0400 (Sat, 27 Jun 2009) | 1 line
that file was supposed to be replaced, but the name changed inbetween... :P
r7115 | mrbougo | 2009-06-27 11:19:31 -0400 (Sat, 27 Jun 2009) | 1 line
nexball: go back to the old scoring system (add points to opposite team on fault) for two-teamed maps; fix the waypoint approach that was not supposed to be committed, fix health bars (please see if there is no better way to disable health bars for nexball)
r7116 | div0 | 2009-06-27 15:58:49 -0400 (Sat, 27 Jun 2009) | 2 lines
make-sprites run again, and committed, sorry
r7117 | div0 | 2009-06-27 16:18:43 -0400 (Sat, 27 Jun 2009) | 2 lines
shrink the crosshair when aiming at a team mate and the hittest is on
r7118 | morphed | 2009-06-27 17:47:06 -0400 (Sat, 27 Jun 2009) | 1 line
I changed Pyria.female to 1
r7119 | m0rfar | 2009-06-28 07:45:17 -0400 (Sun, 28 Jun 2009) | 1 line
hudfixes_v5
r7120 | m0rfar | 2009-06-28 07:51:56 -0400 (Sun, 28 Jun 2009) | 1 line
...
r7121 | m0rfar | 2009-06-28 11:38:07 -0400 (Sun, 28 Jun 2009) | 1 line
hudfixes v6 + new numbers + timerbg
r7122 | m0rfar | 2009-06-28 11:49:29 -0400 (Sun, 28 Jun 2009) | 1 line
source and script for hud numbers
r7123 | div0 | 2009-06-29 02:06:00 -0400 (Mon, 29 Jun 2009) | 3 lines
rot/regen system cleanup; hopefully no actual change
for fuel, rot now goes to 100 as before, but regen only goes to 50
r7124 | morphed | 2009-06-30 08:17:53 -0400 (Tue, 30 Jun 2009) | 1 line
improved textures for Inssurectionist and Lycanthrope
r7125 | div0 | 2009-06-30 08:51:57 -0400 (Tue, 30 Jun 2009) | 2 lines
fix two bugs in health/armor/fuel rot rewrite
r7126 | m0rfar | 2009-06-30 08:56:35 -0400 (Tue, 30 Jun 2009) | 1 line
cyberparcour01 update by sev. It should be easier for "normal" players to finish a lap now. :)
r7127 | morphed | 2009-06-30 08:58:39 -0400 (Tue, 30 Jun 2009) | 1 line
Level of detail version for all player models, and various changes to original models
r7128 | morphed | 2009-06-30 09:01:32 -0400 (Tue, 30 Jun 2009) | 1 line
.skin files for LoD models
r7129 | div0 | 2009-06-30 09:20:00 -0400 (Tue, 30 Jun 2009) | 8 lines
change LOD code to support the models the way morphed named them. Next time, morphed, follow the existing code!
To use LOD, compile your progs with:
  fteqcc -DALLOW_VARIABLE_LOD
(note: it takes a lot of extra CPU time on servers with many players)
r7130 | div0 | 2009-06-30 09:36:51 -0400 (Tue, 30 Jun 2009) | 2 lines
some player CEFC fixes
r7131 | div0 | 2009-06-30 10:36:36 -0400 (Tue, 30 Jun 2009) | 2 lines
eol-style only
r7132 | div0 | 2009-06-30 10:41:34 -0400 (Tue, 30 Jun 2009) | 2 lines
eof fixes for all qc, qh, c filesd
r7133 | div0 | 2009-06-30 13:33:35 -0400 (Tue, 30 Jun 2009) | 2 lines
some LOD stuff fixes
r7134 | div0 | 2009-06-30 14:28:33 -0400 (Tue, 30 Jun 2009) | 2 lines
LOD (cl_playerdetailreduction) enabled now, master switch sv_loddistance1 (also turns off model forcing, though)
r7135 | mrbougo | 2009-06-30 15:10:54 -0400 (Tue, 30 Jun 2009) | 1 line
adding the stroke characters to the compat pack
r7136 | m0rfar | 2009-06-30 16:53:56 -0400 (Tue, 30 Jun 2009) | 1 line
New scoreboard style by terencehill
r7137 | div0 | 2009-07-01 14:30:59 -0400 (Wed, 01 Jul 2009) | 2 lines
fix uncustomizing player entities
r7138 | mrbougo | 2009-07-02 03:34:49 -0400 (Thu, 02 Jul 2009) | 1 line
add nexball in server.cfg
r7139 | div0 | 2009-07-03 04:31:51 -0400 (Fri, 03 Jul 2009) | 2 lines
CPMA strafe acceleration nerfing: force full QW acceleration while using nerfed strafe acceleration
r7140 | div0 | 2009-07-03 05:10:24 -0400 (Fri, 03 Jul 2009) | 2 lines
add a second trigger for the CPMA+airaccel_qw incompatibility workaround
r7141 | mrbougo | 2009-07-03 05:58:48 -0400 (Fri, 03 Jul 2009) | 1 line
nixnex: add support for g_use_ammunition 0, g_nixnex_with_powerups, g_nixnex_with_healtharmor
r7142 | div0 | 2009-07-04 11:19:55 -0400 (Sat, 04 Jul 2009) | 2 lines
slight csqc physics speedup, should not help much with gibs though
r7143 | div0 | 2009-07-04 11:36:37 -0400 (Sat, 04 Jul 2009) | 2 lines
disable automatic DM entries for mapinfo in Nexball maps
r7144 | div0 | 2009-07-04 14:12:13 -0400 (Sat, 04 Jul 2009) | 2 lines
nexrun physics file
r7145 | m0rfar | 2009-07-05 12:57:24 -0400 (Sun, 05 Jul 2009) | 1 line
scoreboard update 1.2.1
r7146 | div0 | 2009-07-06 01:46:38 -0400 (Mon, 06 Jul 2009) | 2 lines
first test of waypointsprites with healthbars for onslaught
r7147 | div0 | 2009-07-06 02:08:57 -0400 (Mon, 06 Jul 2009) | 2 lines
make ONS less spammy: only show healthbars on not shielded control points
r7148 | mrbougo | 2009-07-06 03:26:46 -0400 (Mon, 06 Jul 2009) | 1 line
cut one frame off the rifle reload anim, which ended with a weird warp
r7149 | div0 | 2009-07-07 01:05:57 -0400 (Tue, 07 Jul 2009) | 2 lines
fix minor WPS bug preventing build bars from getting removed properly
r7150 | div0 | 2009-07-07 01:15:32 -0400 (Tue, 07 Jul 2009) | 6 lines
onslaught: new toys, new toys
cvars for:
CP build time
CP start health when building
CP regeneration
r7151 | div0 | 2009-07-07 06:54:35 -0400 (Tue, 07 Jul 2009) | 2 lines
fix reload-switch away-reload bug
r7152 | div0 | 2009-07-07 09:30:12 -0400 (Tue, 07 Jul 2009) | 2 lines
more stuff into compat pack
r7153 | mrbougo | 2009-07-07 10:37:24 -0400 (Tue, 07 Jul 2009) | 1 line
nexball compat pack files
r7154 | div0 | 2009-07-08 01:48:04 -0400 (Wed, 08 Jul 2009) | 2 lines
sync docs
r7155 | div0 | 2009-07-08 03:03:26 -0400 (Wed, 08 Jul 2009) | 3 lines
- add a "frustrating" flag to race maps in mapinfo so they are not playable by default
- set the flag on cyberparcour01
r7156 | div0 | 2009-07-08 05:02:58 -0400 (Wed, 08 Jul 2009) | 2 lines
sync entities
r7157 | div0 | 2009-07-08 09:25:07 -0400 (Wed, 08 Jul 2009) | 2 lines
misc_teleport_dest: allow setting a max speed for players who get teleported
r7158 | div0 | 2009-07-08 11:09:02 -0400 (Wed, 08 Jul 2009) | 3 lines
race: checkpoints with spawnflag FINISH are now a separate finish CP
teleport: fix typo
r7159 | div0 | 2009-07-08 11:11:29 -0400 (Wed, 08 Jul 2009) | 2 lines
sync entities.def
r7160 | div0 | 2009-07-08 11:21:33 -0400 (Wed, 08 Jul 2009) | 2 lines
remove recoil from minstanex
r7161 | div0 | 2009-07-08 11:23:58 -0400 (Wed, 08 Jul 2009) | 2 lines
remove "origin" lines
r7162 | div0 | 2009-07-08 11:25:12 -0400 (Wed, 08 Jul 2009) | 2 lines
close 408
r7163 | div0 | 2009-07-08 11:32:57 -0400 (Wed, 08 Jul 2009) | 2 lines
new voting layout
r7164 | div0 | 2009-07-08 11:38:27 -0400 (Wed, 08 Jul 2009) | 2 lines
egyptsoc_r
r7165 | div0 | 2009-07-08 11:46:36 -0400 (Wed, 08 Jul 2009) | 2 lines
fix warnings
r7166 | div0 | 2009-07-08 11:50:15 -0400 (Wed, 08 Jul 2009) | 2 lines
add a debug command sv_cmd onslaught_updatelinks
r7167 | div0 | 2009-07-08 13:00:58 -0400 (Wed, 08 Jul 2009) | 2 lines
try to bugfix onslaught, PLEASE TEST...
r7168 | div0 | 2009-07-08 14:41:21 -0400 (Wed, 08 Jul 2009) | 2 lines
warning-only fixes
r7169 | div0 | 2009-07-08 14:48:06 -0400 (Wed, 08 Jul 2009) | 2 lines
minor ons sprite fix
r7170 | div0 | 2009-07-08 14:59:04 -0400 (Wed, 08 Jul 2009) | 2 lines
more ons fixes
r7171 | div0 | 2009-07-09 12:32:49 -0400 (Thu, 09 Jul 2009) | 2 lines
g_mapinfo_* settings
r7172 | div0 | 2009-07-09 13:28:13 -0400 (Thu, 09 Jul 2009) | 2 lines
ACLs
r7173 | morphed | 2009-07-09 16:35:42 -0400 (Thu, 09 Jul 2009) | 1 line
new cl_gentle fx
r7174 | div0 | 2009-07-10 02:10:56 -0400 (Fri, 10 Jul 2009) | 2 lines
fix crash in CTF when bots are leaving at end of match
r7175 | div0 | 2009-07-10 07:54:17 -0400 (Fri, 10 Jul 2009) | 2 lines
fix cvar check values
r7176 | div0 | 2009-07-10 14:12:43 -0400 (Fri, 10 Jul 2009) | 2 lines
rifle: invert the meaning of the bulletcounter field
r7177 | div0 | 2009-07-10 14:30:22 -0400 (Fri, 10 Jul 2009) | 3 lines
rifle bullet counter indicator
no longer needs to reload after switch!
r7178 | div0 | 2009-07-10 14:43:37 -0400 (Fri, 10 Jul 2009) | 2 lines
fixed some CHs ;)
r7179 | div0 | 2009-07-10 14:45:36 -0400 (Fri, 10 Jul 2009) | 2 lines
rifle ring -> compat pack
r7180 | div0 | 2009-07-10 15:23:56 -0400 (Fri, 10 Jul 2009) | 2 lines
make headshot damage 100 again, as it won't get stronger than the nex by this anyway
r7181 | div0 | 2009-07-10 15:36:12 -0400 (Fri, 10 Jul 2009) | 2 lines
make sure bullet counter is never > amount nails
r7182 | div0 | 2009-07-10 15:37:42 -0400 (Fri, 10 Jul 2009) | 2 lines
reload fixes
r7183 | div0 | 2009-07-10 16:04:05 -0400 (Fri, 10 Jul 2009) | 2 lines
fix odd warning
r7184 | div0 | 2009-07-10 16:29:38 -0400 (Fri, 10 Jul 2009) | 13 lines
As long as it is broken (no proper race spawnpoints, not playable in actual race), let's remove cyberparcour01.
When the map has had the necessary changes:
- race spawns with race_place set, at least six of them for a map of this size
- playable in actual race => being thrown off the track by a single shot or a small mistake should not typically kill you, but allow you to get back and continue, losing time in the process
feel free to add it back again.
Refer to Docs/mapping.txt for details on putting the race spawns.
I'll keep the textures and shaders in, as they can help other mappers.
r7185 | div0 | 2009-07-10 16:38:23 -0400 (Fri, 10 Jul 2009) | 2 lines
I don't think we still need dismal, we hid it from the menu, and nobody missed it.
r7186 | div0 | 2009-07-10 16:39:07 -0400 (Fri, 10 Jul 2009) | 2 lines
more stuff we really don't need (yet)
r7187 | div0 | 2009-07-10 16:54:57 -0400 (Fri, 10 Jul 2009) | 2 lines
fix radio buttons
r7188 | div0 | 2009-07-11 08:55:08 -0400 (Sat, 11 Jul 2009) | 2 lines
experimental race penalty time system (entity fields race_penalty and race_penalty_reason, entities trigger_race_checkpoint and trigger_race_penalty)


Modified: branches/nexuiz-2.0/.patchsets
===================================================================
--- branches/nexuiz-2.0/.patchsets	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/.patchsets	2009-07-11 14:59:28 UTC (rev 7191)
@@ -1,2 +1,2 @@
 master = svn://svn.icculus.org/nexuiz/trunk
-revisions_applied = 1-7090
+revisions_applied = 1-7188

Modified: branches/nexuiz-2.0/Docs/mapping.txt
===================================================================
--- branches/nexuiz-2.0/Docs/mapping.txt	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/Docs/mapping.txt	2009-07-11 14:59:28 UTC (rev 7191)
@@ -319,8 +319,8 @@
 Spawnpoints
 -----------
 classname  info_player_race
-target     targetname of the controlpoint
-race_place for finish line control points, the place of the point
+target     targetname of the checkpoint
+race_place for finish line checkpoints, the place of the point, or -1 to make it qualifying-only, or unset to let all the other players spawn
 
 Checkpoints
 -----------

Modified: branches/nexuiz-2.0/data/build-compat-pack.sh
===================================================================
--- branches/nexuiz-2.0/data/build-compat-pack.sh	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/build-compat-pack.sh	2009-07-11 14:59:28 UTC (rev 7191)
@@ -35,19 +35,41 @@
 	gfx/hud/keys/key_left.tga
 	gfx/hud/keys/key_right_inv.tga
 	gfx/hud/keys/key_right.tga
+	gfx/hud/num_0_stroke.tga
 	gfx/hud/num_0.tga
+	gfx/hud/num_1_stroke.tga
 	gfx/hud/num_1.tga
+	gfx/hud/num_2_stroke.tga
 	gfx/hud/num_2.tga
+	gfx/hud/num_3_stroke.tga
 	gfx/hud/num_3.tga
+	gfx/hud/num_4_stroke.tga
 	gfx/hud/num_4.tga
+	gfx/hud/num_5_stroke.tga
 	gfx/hud/num_5.tga
+	gfx/hud/num_6_stroke.tga
 	gfx/hud/num_6.tga
+	gfx/hud/num_7_stroke.tga
 	gfx/hud/num_7.tga
+	gfx/hud/num_8_stroke.tga
 	gfx/hud/num_8.tga
+	gfx/hud/num_9_stroke.tga
 	gfx/hud/num_9.tga
+	gfx/hud/num_colon_stroke.tga
 	gfx/hud/num_colon.tga
+	gfx/hud/num_minus_stroke.tga
 	gfx/hud/num_minus.tga
+	gfx/hud/num_plus_stroke.tga
 	gfx/hud/num_plus.tga
+	gfx/hud/rifle_ring_1.tga
+	gfx/hud/rifle_ring_2.tga
+	gfx/hud/rifle_ring_3.tga
+	gfx/hud/rifle_ring_4.tga
+	gfx/hud/rifle_ring_5.tga
+	gfx/hud/rifle_ring_6.tga
+	gfx/hud/rifle_ring_7.tga
+	gfx/hud/rifle_ring_8.tga
+	gfx/hud/sb_accuracy.tga
 	gfx/hud/sb_ammobg.tga
 	gfx/hud/sb_armor.tga
 	gfx/hud/sbar.tga
@@ -74,6 +96,8 @@
 	gfx/hud/sb_kh_yellow.tga
 	gfx/hud/sb_nexball_carrying.tga
 	gfx/hud/sb_rocket.tga
+	gfx/hud/sb_scoreboard_bg.tga
+	gfx/hud/sb_scoreboard_tableheader.tga
 	gfx/hud/sb_shells.tga
 	gfx/hud/sb_str.tga
 	gfx/hud/sb_timerbg.tga
@@ -105,6 +129,7 @@
 	models/gibs/smallchest.md3_0.skin
 	models/gibs/smallchest.md3_1.skin
 	models/gibs/smallchest.md3_2.skin
+	models/nexball/ball.md3
 	models/onslaught/boom.md3
 	models/onslaught/controlpoint_icon_dmg1.md3
 	models/onslaught/controlpoint_icon_dmg2.md3
@@ -129,6 +154,26 @@
 	models/onslaught/ons_ray.md3
 	models/onslaught/shockwave.md3
 	models/onslaught/shockwavetransring.md3
+	models/sprites/as-defend_frame0.tga
+	models/sprites/as-destroy_frame0.tga
+	models/sprites/as-push_frame0.tga
+	models/sprites/bluebase_frame0.tga
+	models/sprites/bluebase.tga
+	models/sprites/danger_frame0.tga
+	models/sprites/danger.tga
+	models/sprites/defend.tga
+	models/sprites/destroy.tga
+	models/sprites/dom-blue_frame0.tga
+	models/sprites/dom-neut_frame0.tga
+	models/sprites/dom-pink_frame0.tga
+	models/sprites/dom-red_frame0.tga
+	models/sprites/dom-yellow_frame0.tga
+	models/sprites/flagcarrier_frame0.tga
+	models/sprites/flagcarrier.tga
+	models/sprites/helpme_frame0.tga
+	models/sprites/helpme.tga
+	models/sprites/here_frame0.tga
+	models/sprites/here.tga
 	models/sprites/item-extralife_frame0.tga
 	models/sprites/item-extralife_frame1.tga
 	models/sprites/item-fuelregen_frame0.tga
@@ -143,11 +188,73 @@
 	models/sprites/item-speed_frame1.tga
 	models/sprites/item-strength_frame0.tga
 	models/sprites/item-strength_frame1.tga
+	models/sprites/keycarrier-blue_frame0.tga
+	models/sprites/keycarrier-blue.tga
+	models/sprites/keycarrier-finish_frame0.tga
+	models/sprites/keycarrier-finish.tga
+	models/sprites/keycarrier-friend_frame0.tga
+	models/sprites/keycarrier-friend.tga
+	models/sprites/keycarrier-pink_frame0.tga
+	models/sprites/keycarrier-pink.tga
+	models/sprites/keycarrier-red_frame0.tga
+	models/sprites/keycarrier-red.tga
+	models/sprites/keycarrier-yellow_frame0.tga
+	models/sprites/keycarrier-yellow.tga
+	models/sprites/key-dropped_frame0.tga
+	models/sprites/key-dropped.tga
+	models/sprites/nb-ball_frame0.tga
+	models/sprites/ons-cp-atck-blue_frame0.tga
+	models/sprites/ons-cp-atck-blue_frame1.tga
+	models/sprites/ons-cp-atck-neut_frame0.tga
+	models/sprites/ons-cp-atck-neut_frame1.tga
+	models/sprites/ons-cp-atck-red_frame0.tga
+	models/sprites/ons-cp-atck-red_frame1.tga
+	models/sprites/ons-cp-blue_frame0.tga
+	models/sprites/ons-cp-blue.tga
+	models/sprites/ons-cp-dfnd-blue_frame0.tga
+	models/sprites/ons-cp-dfnd-blue_frame1.tga
+	models/sprites/ons-cp-dfnd-red_frame0.tga
+	models/sprites/ons-cp-dfnd-red_frame1.tga
+	models/sprites/ons-cp-neut_frame0.tga
+	models/sprites/ons-cp-neut.tga
+	models/sprites/ons-cp-red_frame0.tga
+	models/sprites/ons-cp-red.tga
+	models/sprites/ons-gen-blue_frame0.tga
+	models/sprites/ons-gen-blue.tga
+	models/sprites/ons-gen-red_frame0.tga
+	models/sprites/ons-gen-red.tga
+	models/sprites/ons-gen-shielded_frame0.tga
+	models/sprites/ons-gen-shielded.tga
+	models/sprites/push.tga
+	models/sprites/race-checkpoint_frame0.tga
+	models/sprites/race-checkpoint.tga
+	models/sprites/race-finish_frame0.tga
+	models/sprites/race-finish.tga
+	models/sprites/redbase_frame0.tga
+	models/sprites/redbase.tga
+	models/sprites/waypoint_frame0.tga
+	models/sprites/waypoint.tga
+	models/sprites/wpn-campingrifle_frame0.tga
+	models/sprites/wpn-crylink_frame0.tga
+	models/sprites/wpn-electro_frame0.tga
+	models/sprites/wpn-gl_frame0.tga
+	models/sprites/wpn-hagar_frame0.tga
+	models/sprites/wpn-hlac_frame0.tga
+	models/sprites/wpn-hookgun_frame0.tga
+	models/sprites/wpn-laser_frame0.tga
+	models/sprites/wpn-minstanex_frame0.tga
+	models/sprites/wpn-nex_frame0.tga
+	models/sprites/wpn-porto_frame0.tga
+	models/sprites/wpn-rl_frame0.tga
+	models/sprites/wpn-seeker_frame0.tga
+	models/sprites/wpn-shotgun_frame0.tga
+	models/sprites/wpn-uzi_frame0.tga
 	models/weapons/g_tuba.md3
 	models/weapons/h_tuba.dpm
 	models/weapons/v_tuba.md3
 	particles/particlefont.tga
 	scripts/onslaught.shader
+	scripts/tuba.shader
 	sound/announcer/male/amazing.ogg
 	sound/announcer/male/awesome.ogg
 	sound/ctf/blue_capture.wav
@@ -168,6 +275,11 @@
 	sound/misc/powerup.ogg
 	sound/misc/shield_respawn.wav
 	sound/misc/strength_respawn.wav
+	sound/nexball/bounce.ogg
+	sound/nexball/drop.ogg
+	sound/nexball/shoot1.wav
+	sound/nexball/shoot2.ogg
+	sound/nexball/steal.ogg
 	sound/onslaught/electricity_explode.ogg
 	sound/onslaught/ons_hit1.ogg
 	sound/onslaught/ons_hit2.ogg
@@ -244,6 +356,9 @@
 	textures/meat_robot_norm.tga
 	textures/meat_robot.tga
 	textures/meat.tga
+	textures/nexball/ball_gloss.tga
+	textures/nexball/ball_norm.tga
+	textures/nexball/ball.tga
 	textures/ons_boom1.tga
 	textures/ons_gengib.tga
 	textures/ons_icon.tga
@@ -257,7 +372,6 @@
 	textures/tuba_gloss.tga
 	textures/tuba_glow.tga
 	textures/tuba.tga
-	scripts/tuba.shader
 "
 
 rm -rf pack

Modified: branches/nexuiz-2.0/data/defaultNexuiz.cfg
===================================================================
--- branches/nexuiz-2.0/data/defaultNexuiz.cfg	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/defaultNexuiz.cfg	2009-07-11 14:59:28 UTC (rev 7191)
@@ -24,7 +24,7 @@
 seta g_configversion 0	"Configuration file version (used to upgrade settings) 0: first run, or previous start was <2.4.1  Later, it's overridden by config.cfg, version ranges are defined in config_update.cfg"
 
 // default.cfg versioning (update using update-cvarcount.sh, run that every time after adding a new cvar)
-set cvar_check_default 40e11dd2f984335c9e27adf5beccb2d1
+set cvar_check_default 9b8ca48c50d9e2af73245655fdb29b04
 
 // Nexuiz version (formatted for machines)
 // used to determine if a client version is compatible
@@ -95,7 +95,7 @@
 crosshair 5
 seta crosshair_per_weapon 0	"when 1, each gun will display a different crosshair"
 seta crosshair_color_override 0	"when 1, crosshair_color_* overrides the per-weapon color"
-seta crosshair_hittest 1 "when 1, the crosshair is blurred if the shot wouldn't hit the crosshair because of obstructions"
+seta crosshair_hittest 1 "when not 0, the crosshair is blurred if the shot wouldn't hit the crosshair because of obstructions; also, the crosshair is scaled by the given number when aiming at an enemy"
 seta crosshair_laser ""	"crosshair to display when wielding the laser"
 seta crosshair_laser_color_red 1	"crosshair color red component to display when wielding the laser"
 seta crosshair_laser_color_green 0.35	"crosshair color green component to display when wielding the laser"
@@ -113,25 +113,25 @@
 seta crosshair_uzi_color_green 0.9	"crosshair color green component to display when wielding the machinegun"
 seta crosshair_uzi_color_blue 0.35	"crosshair color blue component to display when wielding the machinegun"
 seta crosshair_uzi_color_alpha 0.9	"crosshair alpha value to display when wielding the machinegun"
-seta crosshair_uzi_size 1.125	"crosshair size when wielding the machinegun"
+seta crosshair_uzi_size 0.6	"crosshair size when wielding the machinegun"
 seta crosshair_grenadelauncher ""	"crosshair to display when wielding the mortar"
 seta crosshair_grenadelauncher_color_red 1	"crosshair color red component to display when wielding the mortar"
 seta crosshair_grenadelauncher_color_green 0.15	"crosshair color green component to display when wielding the mortar"
 seta crosshair_grenadelauncher_color_blue 0	"crosshair color blue component to display when wielding the mortar"
 seta crosshair_grenadelauncher_color_alpha 1.15	"crosshair alpha value to display when wielding the mortar"
-seta crosshair_grenadelauncher_size 1.35	"crosshair size when wielding the mortar"
+seta crosshair_grenadelauncher_size 0.7	"crosshair size when wielding the mortar"
 seta crosshair_electro ""	"crosshair to display when wielding the electro"
 seta crosshair_electro_color_red 0.35	"crosshair color red component to display when wielding the electro"
 seta crosshair_electro_color_green 0.5	"crosshair color green component to display when wielding the electro"
 seta crosshair_electro_color_blue 1	"crosshair color blue component to display when wielding the electro"
 seta crosshair_electro_color_alpha 1	"crosshair alpha value to display when wielding the electro"
-seta crosshair_electro_size 0.95	"crosshair size when wielding the electro"
+seta crosshair_electro_size 0.5	"crosshair size when wielding the electro"
 seta crosshair_crylink ""	"crosshair to display when wielding the crylink"
 seta crosshair_crylink_color_red 0.85	"crosshair color red component to display when wielding the crylink"
 seta crosshair_crylink_color_green 0.25	"crosshair color green component to display when wielding the crylink"
 seta crosshair_crylink_color_blue 1	"crosshair color blue component to display when wielding the crylink"
 seta crosshair_crylink_color_alpha 0.85	"crosshair alpha value to display when wielding the crylink"
-seta crosshair_crylink_size 0.725	"crosshair size when wielding the crylink"
+seta crosshair_crylink_size 0.4	"crosshair size when wielding the crylink"
 seta crosshair_nex ""	"crosshair to display when wielding the nex gun"
 seta crosshair_nex_color_red 0	"crosshair color red component to display when wielding the nex gun"
 seta crosshair_nex_color_green 0.9	"crosshair color green component to display when wielding the nex gun"
@@ -143,7 +143,7 @@
 seta crosshair_hagar_color_green 0.5	"crosshair color green component to display when wielding the hagar"
 seta crosshair_hagar_color_blue 0.35	"crosshair color blue component to display when wielding the hagar"
 seta crosshair_hagar_color_alpha 1	"crosshair alpha value to display when wielding the hagar"
-seta crosshair_hagar_size 1.3	"crosshair size when wielding the hagar"
+seta crosshair_hagar_size 0.8	"crosshair size when wielding the hagar"
 seta crosshair_rocketlauncher ""	"crosshair to display when wielding the rocketlauncher"
 seta crosshair_rocketlauncher_color_red 1	"crosshair color red component to display when wielding the rocketlauncher"
 seta crosshair_rocketlauncher_color_green 0.75	"crosshair color green component to display when wielding the rocketlauncher"
@@ -155,37 +155,38 @@
 seta crosshair_porto_color_green 1	"crosshair color green component to display when wielding the porto"
 seta crosshair_porto_color_blue 0.5	"crosshair color blue component to display when wielding the porto"
 seta crosshair_porto_color_alpha 0.85	"crosshair alpha value to display when wielding the porto"
-seta crosshair_porto_size 1.35	"crosshair size when wielding the porto"
+seta crosshair_porto_size 0.6	"crosshair size when wielding the porto"
 seta crosshair_minstanex ""	"crosshair to display when wielding the minstanex gun"
 seta crosshair_minstanex_color_red 0.65	"crosshair color red component to display when wielding the minstanex gun"
 seta crosshair_minstanex_color_green 0.65	"crosshair color green component to display when wielding the minstanex gun"
 seta crosshair_minstanex_color_blue 1	"crosshair color blue component to display when wielding the minstanex gun"
 seta crosshair_minstanex_color_alpha 1	"crosshair alpha value to display when wielding the minstanex gun"
-seta crosshair_minstanex_size 0.65	"crosshair size when wielding the minstanex gun"
+seta crosshair_minstanex_size 0.4	"crosshair size when wielding the minstanex gun"
 seta crosshair_hook ""	"crosshair to display when wielding the hook"
 seta crosshair_hook_color_red 0.65	"crosshair color red component to display when wielding the hook"
 seta crosshair_hook_color_green 1	"crosshair color green component to display when wielding the hook"
 seta crosshair_hook_color_blue 0.85	"crosshair color blue component to display when wielding the hook"
 seta crosshair_hook_color_alpha 0.85	"crosshair alpha value to display when wielding the hook"
-seta crosshair_hook_size 1.1	"crosshair size when wielding the hook"
+seta crosshair_hook_size 0.5	"crosshair size when wielding the hook"
 seta crosshair_hlac ""	"crosshair to display when wielding the H.L.A.C"
 seta crosshair_hlac_color_red 1	"crosshair color red component to display when wielding the H.L.A.C."
 seta crosshair_hlac_color_green 0.65	"crosshair color green component to display when wielding the H.L.A.C."
 seta crosshair_hlac_color_blue 0.2	"crosshair color blue component to display when wielding the H.L.A.C."
 seta crosshair_hlac_color_alpha 1	"crosshair alpha value to display when wielding the H.L.A.C."
-seta crosshair_hlac_size 2	"crosshair size when wielding the H.L.A.C."
+seta crosshair_hlac_size 0.6	"crosshair size when wielding the H.L.A.C."
 seta crosshair_seeker ""	"crosshair to display when wielding the TAG Seeker"
 seta crosshair_seeker_color_red 1	"crosshair color red component to display when wielding the TAG seeker"
 seta crosshair_seeker_color_green 0.35	"crosshair color green component to display when wielding the TAG seeker"
 seta crosshair_seeker_color_blue 0.35	"crosshair color blue component to display when wielding the TAG seeker"
 seta crosshair_seeker_color_alpha 0.9	"crosshair alpha value to display when wielding the TAG seeker"
-seta crosshair_seeker_size 1.15	"crosshair size when wielding the TAG seeker"
+seta crosshair_seeker_size 0.8	"crosshair size when wielding the TAG seeker"
 seta crosshair_campingrifle ""	"crosshair to display when wielding the campingrifle"
 seta crosshair_campingrifle_color_red 0.85	"crosshair color red component to display when wielding the campingrifle"
 seta crosshair_campingrifle_color_green 0.5	"crosshair color green component to display when wielding the campingrifle"
 seta crosshair_campingrifle_color_blue 0.25	"crosshair color blue component to display when wielding the campingrifle"
 seta crosshair_campingrifle_color_alpha 1	"crosshair alpha value to display when wielding the campingrifle"
-seta crosshair_campingrifle_size 0.85	"crosshair size when wielding the campingrifle"
+seta crosshair_campingrifle_size 0.65	"crosshair size when wielding the campingrifle"
+seta crosshair_campingrifle_ring_size 1.5	"bullet counter ring size around campingrifle crosshair, multiple of crosshair_campingrifle_size"
 seta crosshair_tuba ""	"crosshair to display when wielding the tuba"
 seta crosshair_tuba_color_red 0.85	"crosshair color red component to display when wielding the tuba"
 seta crosshair_tuba_color_green 0.5	"crosshair color green component to display when wielding the tuba"
@@ -341,8 +342,6 @@
 seta cl_autoswitch 1 "automatically switch to newly picked up weapons if they are better than what you are carrying"
 alias autoswitch "set cl_autoswitch $1 ; cmd autoswitch $1"
 
-seta cl_playerdetailreduction 0	"the higher, the less detailed"
-
 set bot_config_file bots.txt "Name and path of the bot configuration file"
 set bot_number 0	"Minimum number of bots"
 seta bot_usemodelnames 0	"Use player model names for bot names"
@@ -410,6 +409,7 @@
 seta g_spawnshieldtime 0 "number of seconds you are invincible after you spawned, this shield is lost after you fire"
 seta g_antilag 2	"AntiLag (0 = no AntiLag, 1 = verified client side hit scan, 2 = server side hit scan in the past, 3 = unverified client side hit scan)"
 set g_antilag_bullets 1 "Bullets AntiLag (0 = no AntiLag, 1 = server side hit scan in the past) - DO NOT TOUCH (severely changes weapon balance)"
+set g_shootfromclient 0 "let client decide if it has the gun left, center or right (WARNING: cheating potential)"
 set g_shootfromeye 0 "shots are fired from your eye/crosshair"
 set g_shootfromcenter 0 "weapon gets moved to the center, shots still come from the barrel of your weapon"
 set g_shootfromfixedorigin "" "if set to a string like 0 y z, the gun is moved to the given y and z coordinates. If set to a string like x y z, the whole shot origin is used"
@@ -443,7 +443,7 @@
 set g_throughfloor 1 "set to 0 to disable damage through floor"
 set g_maplist_mostrecent "" "contains the name of the maps that were most recently played"
 seta g_maplist_mostrecent_count 3	"number of most recent maps that are blocked from being played again"
-seta g_maplist "accident aggressor aneurysm basement basementctf bleach bloodprison bloodprisonctf bluesky darkzone desertfactory dieselpower dismal downer eggandbacon evilspace farewell final_rage ons-reborn racetrack reslimed ruiner runningman runningman_1on1remix runningmanctf silvercity skyway slimepit soylent starship stormkeep strength toxic warfare"
+seta g_maplist "accident aggressor aneurysm basement basementctf bleach bloodprison bloodprisonctf bluesky cyberparcour01 darkzone desertfactory dieselpower dismal downer eggandbacon evilspace farewell final_rage ons-reborn racetrack reslimed ruiner runningman runningman_1on1remix runningmanctf silvercity skyway slimepit soylent starship stormkeep strength toxic warfare"
 seta g_maplist_index 0	"this is used internally for saving position in maplist cycle"
 seta g_maplist_selectrandom 0	"if 1, a random map will be chosen as next map - DEPRECATED in favor of g_maplist_shuffle"
 seta g_maplist_shuffle 1	"new randomization method: like selectrandom, but avoid playing the same maps in short succession. This works by taking out the first element and inserting it into g_maplist with a bias to the end of the list"
@@ -658,6 +658,9 @@
 set g_onslaught 0 "Onslaught: take control points towards the enemy generator and then destroy it"
 set g_onslaught_gen_health 5000
 set g_onslaught_cp_health 1000
+set g_onslaught_cp_buildhealth 100
+set g_onslaught_cp_buildtime 10
+set g_onslaught_cp_regen 20
 
 // assault
 set g_assault 0 "Assault: attack the enemy base as fast as you can, then defend the base against the enemy for that time to win"
@@ -688,7 +691,7 @@
 // -1: MrBougo's first try, not very playable but working...
 //     The ball gets the player's velocity * 1.5 + a vertical boost
 //  0: Revenant style
-//     Player's velocity + a boost where he's looking at + a boost 
+//     Player's velocity + a boost where he's looking at + a boost
 //     perpendicularly to the first boost, that is upwards relatively
 //     to the view angle
 //  1: MrBougo's modded Rev style 1
@@ -734,7 +737,8 @@
 set g_balance_armor_rot 0.1
 set g_balance_armor_regenlinear 0
 set g_balance_armor_rotlinear 0
-set g_balance_armor_stable 100
+set g_balance_armor_regenstable 100
+set g_balance_armor_rotstable 100
 set g_balance_armor_limit 999
 set g_balance_armor_start 0
 set g_balance_armor_blockpercent 0.6
@@ -742,7 +746,8 @@
 set g_balance_health_rot 0.1
 set g_balance_health_regenlinear 0
 set g_balance_health_rotlinear 0
-set g_balance_health_stable 100
+set g_balance_health_regenstable 100
+set g_balance_health_rotstable 100
 set g_balance_health_limit 999
 set g_balance_health_start 150
 set g_balance_selfdamagepercent 0.6
@@ -782,7 +787,8 @@
 r_shadow_realtime_world_lightmaps 1
 seta r_ambient 4
 cl_decals_fadetime 1
-cl_decals_time 2
+cl_decals_time 2
+set  cl_gunalign 3 "Gun alignment; 1 = right, 2 = left, 3 = center"
 seta cl_nogibs 0 "reduce number of violence effects, or remove them totally"
 seta cl_gibs_damageforcescale 3.5 "force to push around gibs"
 seta cl_gibs_lifetime 14 "average lifetime of gibs"
@@ -1272,10 +1278,13 @@
 sbar_info_pos 50
 seta sbar_alpha_bg 0.7
 seta sbar_alpha_fg 1
+seta sbar_border_thickness 1 "scoreboard border tickness"
 seta sbar_color_bg_r 0 "red color component of the HUD background"
 seta sbar_color_bg_g 0.25 "green color component of the HUD background"
 seta sbar_color_bg_b 0.17 "blue color component of the HUD background"
 seta sbar_color_bg_team 0.25 "team color multiplier of the HUD background"
+seta sbar_scoreboard_alpha_bg 0.28 "scoreboard background alpha"
+seta sbar_scoreboard_highlight 1 "enable highlighting for rows and columns in the scoreboard"
 
 // for menu server list (eventually make them have engine support?)
 seta menu_slist_showfull 1 "show servers even if they are full and have no slots to join"
@@ -1423,7 +1432,8 @@
 seta cl_teamradar_zoommode 0	"zoom mode: 0 = zoomed by default, 1 = zoomed when +zoom, 2 = always zoomed, 3 = always zoomed out"
 alias cl_teamradar_rotate "toggle cl_teamradar_rotation 0 1 2 3 4"
 
-set g_maplist_allow_hidden 0	"allow hidden maps to be, e.g., voted for and in the maplist"
+set g_maplist_allow_hidden 0		"allow hidden maps to be, e.g., voted for and in the maplist"
+set g_maplist_allow_frustrating 0	"allow impossible maps to be, e.g., voted for and in the maplist (if set to 2, ONLY impossible maps are allowed)"
 
 seta g_start_delay 0	"delay before the game starts, so everyone can join; recommended to set this to like 15 on a public server"
 	if_dedicated set g_start_delay 15
@@ -1558,7 +1568,8 @@
 set g_balance_fuel_rot 0.05
 set g_balance_fuel_regenlinear 0
 set g_balance_fuel_rotlinear 0
-set g_balance_fuel_stable 100
+set g_balance_fuel_regenstable 50
+set g_balance_fuel_rotstable 100
 set g_balance_fuel_limit 999
 set g_balance_pause_fuel_regen 2 // other than this, fuel uses the health regen counter
 set g_balance_pause_fuel_rot 5
@@ -1589,3 +1600,9 @@
 seta cl_forceplayermodels 0 "force all players to look like you; WARNING: animations can look very bad with this"
 seta cl_forceplayermodelsfromnexuiz 0 "force models coming from nexuiz; WARNING: animations can look very bad with this"
 set sv_clforceplayermodels 1 "allow clients to use cl_forcemodels"
+
+set sv_loddistance1 1024
+set sv_loddistance2 4096
+seta cl_playerdetailreduction 0	"the higher, the less detailed player models are displayed (LOD)"
+
+set g_mapinfo_settemp_acl "+*" "ACL for mapinfo setting cvars"

Modified: branches/nexuiz-2.0/data/effectinfo.txt
===================================================================
--- branches/nexuiz-2.0/data/effectinfo.txt	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/effectinfo.txt	2009-07-11 14:59:28 UTC (rev 7191)
@@ -2362,93 +2362,93 @@
 
 // Zero-violence effects
 
-// impact effect indicating damage
+// cl_gentle impact effect indicating damage
 // used in qcsrc/client/gibs.qc:			pointparticles(particleeffectnum("damage_hit"), org, vel, amount * 16)
 effect damage_hit
-tex 48 55
+tex 43 43
 count 1
-type alphastatic
-color 0x00FFFF 0xFF00FF
-size 16 16
+type spark
+color 0xffffff 0x9271fb
+size 14 24
 sizeincrease -24
-alpha 128 128 192
+alpha 128 128 292
 gravity -0.4
-bounce 1.5
 airfriction 5
 liquidfriction 10
-velocityjitter 256 256 256
+velocityjitter 356 356 456
+
 effect damage_hit
-tex 48 55
+tex 0 8
 count 1
-type alphastatic
-color 0xFF00FF 0xFFFF00
-size 16 16
+type smoke
+color 0xffffff 0x9271fb
+size 24 24
 sizeincrease -24
-alpha 128 128 192
-gravity -0.4
-bounce 1.5
+alpha 128 128 292
 airfriction 5
 liquidfriction 10
-velocityjitter 256 256 256
-effect damage_hit
-tex 48 55
-count 1
-type alphastatic
-color 0xFFFF00 0x00FFFF
-size 16 16
-sizeincrease -24
-alpha 128 128 192
-gravity -0.4
-bounce 1.5
-airfriction 5
-liquidfriction 10
-velocityjitter 256 256 256
+originjitter 10 10 10
 
+
 // effect for removing player model
 // "teleport"
 
-// large sparks
+// cl_gentle deathfx
 // used in qcsrc/client/gibs.qc:			pointparticles(particleeffectnum("damage_dissolve"), org, vel, amount)
 effect damage_dissolve
-tex 48 55
-count 30
-type alphastatic
-color 0x00FFFF 0xFF00FF
-size 32 32
+tex 43 43
+count 20
+type spark
+color 0xffffff 0x9271fb
+size 62 62
 sizeincrease -16
-alpha 256 256 128
+alpha 256 256 328
 gravity -0.4
-bounce 1.5
 airfriction 3
 liquidfriction 6
-velocityjitter 512 512 512
+velocityjitter 256 256 512
+
 effect damage_dissolve
-tex 48 55
-count 30
-type alphastatic
-color 0xFF00FF 0xFFFF00
-size 32 32
+tex 43 43
+count 5
+type spark
+color 0x7bdbff 0xbed2ff
+size 62 62
 sizeincrease -16
-alpha 256 256 128
-gravity -0.4
-bounce 1.5
+alpha 256 256 328
+gravity -0.8
+airfriction 5
+liquidfriction 6
+velocityjitter 256 256 512
+
+effect damage_dissolve
+tex 0 8
+count 10
+type smoke
+color 0xffffff 0x9271fb
+size 44 44
+sizeincrease -16
+alpha 256 256 228
 airfriction 3
 liquidfriction 6
-velocityjitter 512 512 512
+originjitter 32 32 96
+
+
 effect damage_dissolve
-tex 48 55
+tex 46 46
 count 30
-type alphastatic
-color 0xFFFF00 0x00FFFF
+type smoke
+color 0xffffff 0x9271fb
 size 32 32
 sizeincrease -16
-alpha 256 256 128
-gravity -0.4
+alpha 256 256 228
+gravity 1
 bounce 1.5
 airfriction 3
 liquidfriction 6
-velocityjitter 512 512 512
+velocityjitter 400 400 0
 
+
 // decal
 // used in qcsrc/server/g_triggers.qc:					self.cnt = particleeffectnum("laser_deadly")
 // used in qcsrc/server/g_triggers.qc:			self.cnt = particleeffectnum("laser_deadly")
@@ -3453,7 +3453,6 @@
 alpha 200 356 512
 gravity -0.5
 color 0x9E6A64 0x91302D
-origin 0 0 -20
 bounce 6
 sizeincrease 5
 originjitter 33 33 33
@@ -3516,7 +3515,6 @@
 alpha 200 356 512
 gravity -0.5
 color 0x64679E 0x2D4C91
-origin 0 0 -20
 bounce 6
 sizeincrease 5
 originjitter 33 33 33

Modified: branches/nexuiz-2.0/data/gfx/crosshaircampingrifle.tga
===================================================================
(Binary files differ)

Modified: branches/nexuiz-2.0/data/gfx/crosshaircrylink.tga
===================================================================
(Binary files differ)

Modified: branches/nexuiz-2.0/data/gfx/crosshairelectro.tga
===================================================================
(Binary files differ)

Modified: branches/nexuiz-2.0/data/gfx/crosshairgrenadelauncher.tga
===================================================================
(Binary files differ)

Modified: branches/nexuiz-2.0/data/gfx/crosshairhagar.tga
===================================================================
(Binary files differ)

Modified: branches/nexuiz-2.0/data/gfx/crosshairhlac.tga
===================================================================
(Binary files differ)

Modified: branches/nexuiz-2.0/data/gfx/crosshairhook.tga
===================================================================
(Binary files differ)

Modified: branches/nexuiz-2.0/data/gfx/crosshairlaser.tga
===================================================================
(Binary files differ)

Modified: branches/nexuiz-2.0/data/gfx/crosshairminstanex.tga
===================================================================
(Binary files differ)

Modified: branches/nexuiz-2.0/data/gfx/crosshairporto.tga
===================================================================
(Binary files differ)

Modified: branches/nexuiz-2.0/data/gfx/crosshairseeker.tga
===================================================================
(Binary files differ)

Modified: branches/nexuiz-2.0/data/gfx/crosshairuzi.tga
===================================================================
(Binary files differ)

Deleted: branches/nexuiz-2.0/data/gfx/dismal_radar.tga
===================================================================
(Binary files differ)

Modified: branches/nexuiz-2.0/data/gfx/hud/num_0.tga
===================================================================
(Binary files differ)

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

Modified: branches/nexuiz-2.0/data/gfx/hud/num_1.tga
===================================================================
(Binary files differ)

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

Modified: branches/nexuiz-2.0/data/gfx/hud/num_2.tga
===================================================================
(Binary files differ)

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

Modified: branches/nexuiz-2.0/data/gfx/hud/num_3.tga
===================================================================
(Binary files differ)

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

Modified: branches/nexuiz-2.0/data/gfx/hud/num_4.tga
===================================================================
(Binary files differ)

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

Modified: branches/nexuiz-2.0/data/gfx/hud/num_5.tga
===================================================================
(Binary files differ)

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

Modified: branches/nexuiz-2.0/data/gfx/hud/num_6.tga
===================================================================
(Binary files differ)

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

Modified: branches/nexuiz-2.0/data/gfx/hud/num_7.tga
===================================================================
(Binary files differ)

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

Modified: branches/nexuiz-2.0/data/gfx/hud/num_8.tga
===================================================================
(Binary files differ)

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

Modified: branches/nexuiz-2.0/data/gfx/hud/num_9.tga
===================================================================
(Binary files differ)

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

Modified: branches/nexuiz-2.0/data/gfx/hud/num_colon.tga
===================================================================
(Binary files differ)

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

Modified: branches/nexuiz-2.0/data/gfx/hud/num_minus.tga
===================================================================
(Binary files differ)

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

Modified: branches/nexuiz-2.0/data/gfx/hud/num_plus.tga
===================================================================
(Binary files differ)

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

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

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

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

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

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

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

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

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

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

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

Modified: branches/nexuiz-2.0/data/gfx/hud/sb_timerbg.tga
===================================================================
(Binary files differ)

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

Deleted: branches/nexuiz-2.0/data/maps/dismal.jpg
===================================================================
(Binary files differ)

Deleted: branches/nexuiz-2.0/data/maps/dismal.map
===================================================================
--- branches/nexuiz-2.0/data/maps/dismal.map	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/maps/dismal.map	2009-07-11 14:59:28 UTC (rev 7191)
@@ -1,13280 +0,0 @@
-
-// entity 0
-{
-"classname" "worldspawn"
-"gridsize" "64.000000 64.000000 128.000000"
-"message" "Dismal"
-// brush 0
-{
-( -448 -544 -16 ) ( -448 -544 -24 ) ( -296 -536 -24 ) common/caulk 0 0 0 0.5 0.5 134217728 4 0
-( -448 -544 -24 ) ( -448 -544 -16 ) ( -288 -544 -16 ) common/caulk 0 0 0 0.5 0.5 134217728 4 0
-( -288 -536 -24 ) ( -288 -544 -24 ) ( -288 -544 -16 ) common/caulk 0 0 0 0.5 0.5 134217728 4 0
-( -296 -536 -24 ) ( -288 -536 -24 ) ( -288 -536 -16 ) evil8_floor/e8clangfloor 0 0 0 0.5 0.5 134217728 0 0
-( -296 -536 -24 ) ( -296 -544 -24 ) ( -288 -544 -24 ) common/caulk 0 0 0 0.5 0.5 134217728 4 0
-( -288 -544 -16 ) ( -296 -544 -16 ) ( -296 -536 -16 ) evil8_floor/e8clangfloor 0 0 0 0.5 0.5 134217728 0 0
-}
-// brush 1
-{
-( -448 -660 -16 ) ( -448 -768 -16 ) ( -448 -768 -24 ) common/caulk 0 0 0 0.5 0.5 0 4 0
-( -304 -544 -16 ) ( -444 -544 -16 ) ( -444 -544 -24 ) common/caulk 0 0 0 0.5 0.5 0 4 0
-( -288 -768 -16 ) ( -288 -660 -16 ) ( -288 -660 -24 ) evil8_floor/e8clangfloor 0 0 0 0.5 0.5 0 0 0
-( -448 -768 -16 ) ( -308 -768 -16 ) ( -308 -768 -24 ) common/caulk 0 0 0 0.5 0.5 0 4 0
-( -448 -768 -16 ) ( -448 -660 -16 ) ( -308 -660 -16 ) evil8_floor/e8clangfloor 0 0 0 0.5 0.5 0 0 0
-( -308 -660 -40 ) ( -448 -660 -40 ) ( -448 -768 -40 ) evil8_floor/e8clangfloor 0 0 0 0.5 0.5 0 0 0
-}
-// brush 2
-{
-( -308 -116 -40 ) ( -448 -116 -40 ) ( -448 -224 -40 ) evil8_floor/e8clangfloor 0 0 0 0.5 0.5 0 0 0
-( -448 -224 -16 ) ( -448 -116 -16 ) ( -308 -116 -16 ) evil8_floor/e8clangfloor 0 0 0 0.5 0.5 0 0 0
-( -448 -224 -16 ) ( -308 -224 -16 ) ( -308 -224 -24 ) evil8_floor/e8clangfloor 0 0 0 0.5 0.5 0 0 0
-( -288 -224 -16 ) ( -288 -116 -16 ) ( -288 -116 -24 ) common/caulk 0 0 0 0.5 0.5 0 4 0
-( -304 0 -16 ) ( -444 0 -16 ) ( -444 0 -24 ) evil8_floor/e8clangfloor 0 0 0 0.5 0.5 0 0 0
-( -448 -116 -16 ) ( -448 -224 -16 ) ( -448 -224 -24 ) common/caulk 0 0 0 0.5 0.5 0 4 0
-}
-// brush 3
-{
-( -288 -224 -24 ) ( -296 -224 -24 ) ( -296 -232 -24 ) evil8_floor/e8clangfloor 0 0 0 0.5 0.5 134217728 0 0
-( -296 -232 -16 ) ( -296 -224 -16 ) ( -288 -224 -16 ) evil8_floor/e8clangfloor 0 0 0 0.5 0.5 134217728 0 0
-( -296 -232 -20 ) ( -288 -232 -20 ) ( -288 -232 -28 ) evil8_floor/e8clangfloor 0 0 0 0.5 0.5 134217728 0 0
-( -288 -232 -20 ) ( -288 -224 -20 ) ( -288 -224 -28 ) common/caulk 0 0 0 0.5 0.5 134217728 4 0
-( -448 -224 -20 ) ( -448 -224 -28 ) ( -288 -224 -28 ) common/caulk 0 0 0 0.5 0.5 134217728 4 0
-( -448 -224 -28 ) ( -448 -224 -20 ) ( -296 -232 -20 ) common/caulk 0 0 0 0.5 0.5 134217728 4 0
-}
-// brush 4
-{
-( 168 -408 -40 ) ( 28 -408 -40 ) ( 28 -776 -40 ) evil8_floor/e8clangfloor 0 0 0 0.5 0.5 0 0 0
-( 28 -776 -16 ) ( 28 -408 -16 ) ( 168 -408 -16 ) evil8_floor/e8clangfloor 0 0 0 0.5 0.5 0 0 0
-( 32 -768 -16 ) ( 172 -768 -16 ) ( 172 -768 -24 ) common/caulk 0 0 0 0.5 0.5 0 4 0
-( -128 -796 -16 ) ( -128 -428 -16 ) ( -128 -428 -24 ) common/caulk 0 0 0 0.5 0.5 0 4 0
-( 164 0 -16 ) ( 24 0 -16 ) ( 24 0 -24 ) evil8_floor/e8clangfloor 0 0 0 0.5 0.5 0 0 0
-( -288 -412 -16 ) ( -288 -780 -16 ) ( -288 -780 -24 ) common/caulk 0 0 0 0.5 0.5 0 4 0
-}
-// brush 5
-{
-( 192 240 -24 ) ( 192 240 -16 ) ( 192 12 -16 ) common/caulk 0 0 0 0.5 0.5 0 4 0
-( 192 0 -16 ) ( 256 0 -16 ) ( 256 0 -24 ) evil8_floor/e8clangfloor 0 0 0 0.5 0.5 0 0 0
-( 448 192 -24 ) ( 256 0 -24 ) ( 256 0 -16 ) evil8_floor/e8clangfloor 0 0 0 0.5 0.5 0 0 0
-( 440 192 -24 ) ( 440 192 -16 ) ( 216 192 -16 ) common/caulk 0 0 0 0.5 0.5 0 4 0
-( 424 12 -16 ) ( 200 12 -16 ) ( 200 240 -16 ) evil8_floor/e8clangfloor 0 0 0 0.5 0.5 0 0 0
-( 200 240 -40 ) ( 200 12 -40 ) ( 424 12 -40 ) evil8_floor/e8clangfloor 0 0 0 0.5 0.5 0 0 0
-}
-// brush 6
-{
-( 192 564 -16 ) ( 192 336 -16 ) ( 192 336 -24 ) common/caulk 0 0 0 0.5 0.5 0 4 0
-( 192 544 -16 ) ( 192 552 -24 ) ( 288 552 -24 ) evil8_floor/e8clangfloor 0 0 0 0.5 0.5 0 0 0
-( 256 576 -16 ) ( 256 576 -24 ) ( 448 384 -24 ) evil8_floor/e8clangfloor 0 0 0 0.5 0.5 0 0 0
-( 216 384 -16 ) ( 440 384 -16 ) ( 440 384 -24 ) common/caulk 0 0 0 0.5 0.5 0 4 0
-( 200 336 -16 ) ( 200 564 -16 ) ( 424 564 -16 ) evil8_floor/e8clangfloor 0 0 0 0.5 0.5 0 0 0
-( 448 384 -24 ) ( 288 552 -24 ) ( 192 552 -24 ) common/caulk 0 0 0 0.5 0.5 0 4 0
-}
-// brush 7
-{
-( 192 224 -24 ) ( 192 224 -16 ) ( 192 192 -16 ) common/caulk 0 0 0 0.5 0.5 0 4 0
-( 192 192 -24 ) ( 192 192 -16 ) ( 236 192 -16 ) common/caulk 0 0 0 0.5 0.5 0 4 0
-( 256 352 -24 ) ( 256 352 -16 ) ( 256 384 -16 ) common/caulk 0 0 0 0.5 0.5 0 4 0
-( 256 384 -24 ) ( 256 384 -16 ) ( 212 384 -16 ) common/caulk 0 0 0 0.5 0.5 0 4 0
-( 236 192 -16 ) ( 192 192 -16 ) ( 192 224 -16 ) evil8_floor/e8clangfloor 0 0 0 0.5 0.5 0 0 0
-( 192 224 -40 ) ( 192 192 -40 ) ( 236 192 -40 ) evil8_floor/e8clangfloor 0 0 0 0.5 0.5 0 0 0
-}
-// brush 8
-{
-( 192 -1104 -24 ) ( 192 -1104 -16 ) ( 192 -1332 -16 ) common/caulk 0 0 0 0.5 0.5 0 4 0
-( 190 -1320 -16 ) ( 254 -1320 -16 ) ( 254 -1320 -24 ) dsi_textures/cretebase4 0 0 0 0.5 0.5 0 0 0
-( 448 -1152 -24 ) ( 256 -1344 -24 ) ( 256 -1344 -16 ) dsi_textures/cretebase4 0 0 0 0.5 0.5 0 0 0
-( 440 -1152 -24 ) ( 440 -1152 -16 ) ( 216 -1152 -16 ) dsi_textures/cretebase4 0 0 0 0.5 0.5 0 0 0
-( 424 -1332 -24 ) ( 200 -1332 -24 ) ( 200 -1104 -24 ) dsi_textures/cretebase4 0 0 0 0.5 0.5 0 0 0
-( 200 -1104 -40 ) ( 200 -1332 -40 ) ( 424 -1332 -40 ) dsi_textures/cretebase4 0 0 0 0.5 0.5 0 0 0
-}
-// brush 9
-{
-( 64 -656 -40 ) ( 64 -768 -40 ) ( 124 -768 -40 ) evil8_floor/e8clangfloor 0 0 0 0.5 0.5 0 0 0
-( 124 -768 -16 ) ( 64 -768 -16 ) ( 64 -656 -16 ) evil8_floor/e8clangfloor 0 0 0 0.5 0.5 0 0 0
-( 64 -704 -24 ) ( 128 -720 -24 ) ( 128 -720 -16 ) evil8_floor/e8clangfloor 0 0 0 0.5 0.5 0 0 0
-( 192 -768 -16 ) ( 128 -720 -16 ) ( 128 -720 -24 ) evil8_floor/e8clangfloor 0 0 0 0.5 0.5 0 0 0
-( 64 -768 -24 ) ( 64 -768 -16 ) ( 124 -768 -16 ) common/caulk 0 0 0 0.5 0.5 0 4 0
-( 64 -656 -40 ) ( 64 -656 -32 ) ( 64 -768 -32 ) evil8_floor/e8clangfloor 0 0 0 0.5 0.5 0 0 0
-}
-// brush 10
-{
-( 64 -251 -40 ) ( -41 -251 -40 ) ( -41 -288 -40 ) evil8_floor/e8clangfloor 0 0 0 0.5 0.5 0 0 0
-( -41 -288 -16 ) ( -41 -251 -16 ) ( 64 -251 -16 ) evil8_floor/e8clangfloor 0 0 0 0.5 0.5 0 0 0
-( -41 -288 -16 ) ( 64 -288 -16 ) ( 64 -288 -24 ) evil8_floor/e8clangfloor 0 0 0 0.5 0.5 0 0 0
-( 64 -288 -32 ) ( 64 -251 -32 ) ( 64 -251 -40 ) evil8_floor/e8clangfloor 0 0 0 0.5 0.5 0 0 0
-( -128 -192 -16 ) ( -128 -192 -24 ) ( 64 -251 -24 ) evil8_floor/e8clangfloor 0 0 0 0.5 0.5 0 0 0
-( -128 -192 -24 ) ( -128 -192 -16 ) ( -128 -288 -16 ) common/caulk 0 0 0 0.5 0.5 0 4 0
-}
-// brush 11
-{
-( 64 0 -32 ) ( 64 -112 -32 ) ( 64 -112 -40 ) evil8_floor/e8clangfloor 0 0 0 0.5 0.5 0 0 0
-( 124 0 -16 ) ( 64 0 -16 ) ( 64 0 -24 ) common/caulk 0 0 0 0.5 0.5 0 4 0
-( 128 -48 -24 ) ( 128 -48 -16 ) ( 192 0 -16 ) evil8_floor/e8clangfloor 0 0 0 0.5 0.5 0 0 0
-( 128 -48 -16 ) ( 128 -48 -24 ) ( 64 -64 -24 ) evil8_floor/e8clangfloor 0 0 0 0.5 0.5 0 0 0
-( 64 -112 -16 ) ( 64 0 -16 ) ( 124 0 -16 ) evil8_floor/e8clangfloor 0 0 0 0.5 0.5 0 0 0
-( 124 0 -40 ) ( 64 0 -40 ) ( 64 -112 -40 ) evil8_floor/e8clangfloor 0 0 0 0.5 0.5 0 0 0
-}
-// brush 12
-{
-( -448 -216 -20 ) ( -448 -228 -20 ) ( -448 -228 -40 ) common/caulk 0 0 0 0.5 0.5 134217728 4 0
-( -291 -224 -20 ) ( -313 -224 -20 ) ( -313 -224 -40 ) common/caulk 0 0 0 0.5 0.5 134217728 4 0
-( -288 -232 -20 ) ( -288 -220 -20 ) ( -288 -220 -40 ) common/caulk 0 0 0 0.5 0.5 134217728 4 0
-( -310 -232 -20 ) ( -288 -232 -20 ) ( -288 -232 -40 ) common/caulk 0 0 0 0.5 0.5 134217728 4 0
-( -310 -232 -20 ) ( -310 -220 -20 ) ( -288 -220 -20 ) evil8_floor/e8clangfloor 0 0 0 0.5 0.5 134217728 0 0
-( -288 -220 -40 ) ( -310 -220 -40 ) ( -310 -232 -40 ) evil8_floor/e8clangfloor 0 0 0 0.5 0.5 134217728 0 0
-}
-// brush 13
-{
-( 424 564 -40 ) ( 200 564 -40 ) ( 200 336 -40 ) dsi_textures/cretebase4 0 96 0 0.5 0.5 0 0 0
-( 200 336 -24 ) ( 200 564 -24 ) ( 424 564 -24 ) common/caulk 0 0 0 0.5 0.5 0 4 0
-( 216 384 -16 ) ( 440 384 -16 ) ( 440 384 -24 ) common/caulk 0 0 0 0.5 0.5 0 4 0
-( 256 576 -16 ) ( 256 576 -24 ) ( 448 384 -24 ) dsi_textures/cretebase4 -96 0 0 0.5 0.5 0 0 0
-( 259 552 -24 ) ( 259 552 -16 ) ( 195 552 -16 ) dsi_textures/cretebase4 0 0 0 0.5 0.5 0 0 0
-( 192 564 -16 ) ( 192 336 -16 ) ( 192 336 -24 ) common/caulk 0 0 0 0.5 0.5 0 4 0
-}
-// brush 14
-{
-( -128 -288 -32 ) ( -128 -292 -32 ) ( -128 -292 -40 ) dsi_textures/cretebase4 -74 -24 0 0.5 0.5 0 0 0
-( -114 -288 -32 ) ( -128 -288 -32 ) ( -128 -288 -40 ) dsi_textures/cretebase4 234 -24 0 0.5 0.5 0 0 0
-( -116 -292 -32 ) ( -116 -288 -32 ) ( -116 -288 -40 ) dsi_textures/cretebase4 -74 -24 0 0.5 0.5 0 0 0
-( -134 -480 -32 ) ( -120 -480 -32 ) ( -120 -480 -40 ) dsi_textures/cretebase4 234 -24 0 0.5 0.5 0 0 0
-( -128 -292 -32 ) ( -128 -288 -32 ) ( -114 -288 -32 ) dsi_textures/cretebase4 234 74 0 0.5 0.5 0 0 0
-( -114 -288 -40 ) ( -128 -288 -40 ) ( -128 -292 -40 ) dsi_textures/cretebase4 234 74 0 0.5 0.5 0 0 0
-}
-// brush 15
-{
-( 895.5 -634 320 ) ( 895.5 -703 320 ) ( 895.5 -703 296 ) common/caulk 0 0 0 0.5 0.5 0 4 0
-( 1131 -64 320 ) ( 1044 -64 320 ) ( 1044 -64 296 ) common/caulk 0 0 0 0.5 0.5 0 4 0
-( 1088 -703 320 ) ( 1088 -634 320 ) ( 1088 -634 296 ) common/caulk 0 0 0 0.5 0.5 0 4 0
-( 1002 -703 320 ) ( 1088 -703 320 ) ( 1088 -703 296 ) dsi_textures/cretebase4 -33 0 0 0.5 0.5 0 0 0
-( 1000 -703 320 ) ( 1000 -634 320 ) ( 1086 -634 320 ) dsi_textures/cretebase4 -33 -15 0 0.5 0.5 0 0 0
-( 1086 -634 296 ) ( 1000 -634 296 ) ( 1000 -703 296 ) dsi_textures/cretebase4 -33 -15 0 0.5 0.5 0 0 0
-}
-// brush 16
-{
-( 1464 321 296 ) ( 1344 321 296 ) ( 1344 143 296 ) dsi_textures/cretebase4 -89 150 0 0.5 0.5 0 0 0
-( 1344 143 320 ) ( 1344 321 320 ) ( 1464 321 320 ) dsi_textures/cretebase4 -89 150 0 0.5 0.5 0 0 0
-( 1451 192 320 ) ( 1571 192 320 ) ( 1571 192 296 ) dsi_textures/cretebase4 -89 150 0 0.5 0.5 0 0 0
-( 1536 65 320 ) ( 1536 242 320 ) ( 1536 242 296 ) dsi_textures/cretebase4 -89 150 0 0.5 0.5 0 0 0
-( 1464 320 320 ) ( 1344 320 320 ) ( 1344 320 296 ) common/caulk 0 0 0 0.5 0.5 0 4 0
-( 1344 321 320 ) ( 1344 143 320 ) ( 1344 143 296 ) dsi_textures/cretebase4 -89 150 0 0.5 0.5 0 0 0
-}
-// brush 17
-{
-( 1536 321 320 ) ( 1536 143 320 ) ( 1536 143 296 ) dsi_textures/cretebase4 -89 150 0 0.5 0.5 0 0 0
-( 1656 320 320 ) ( 1536 320 320 ) ( 1536 320 296 ) common/caulk 0 0 0 0.5 0.5 0 4 0
-( 1599 73 320 ) ( 1599 250 320 ) ( 1599 250 296 ) common/caulk 0 0 0 0.5 0.5 0 4 0
-( 1693 -1088 320 ) ( 1813 -1088 320 ) ( 1813 -1088 296 ) dsi_textures/cretebase4 -89 150 0 0.5 0.5 0 0 0
-( 1536 143 320 ) ( 1536 321 320 ) ( 1656 321 320 ) dsi_textures/cretebase4 -89 150 0 0.5 0.5 0 0 0
-( 1656 321 296 ) ( 1536 321 296 ) ( 1536 143 296 ) dsi_textures/cretebase4 -89 150 0 0.5 0.5 0 0 0
-}
-// brush 18
-{
-( 1344 -959 320 ) ( 1344 -1137 320 ) ( 1344 -1137 296 ) common/caulk 0 0 0 0.5 0.5 0 4 0
-( 1464 -960 320 ) ( 1344 -960 320 ) ( 1344 -960 296 ) common/caulk 0 0 0 0.5 0.5 0 4 0
-( 1536 -1215 320 ) ( 1536 -1038 320 ) ( 1536 -1038 296 ) common/caulk 0 0 0 0.5 0.5 0 4 0
-( 1451 -1088 320 ) ( 1571 -1088 320 ) ( 1571 -1088 296 ) common/caulk 0 0 0 0.5 0.5 0 4 0
-( 1344 -1137 320 ) ( 1344 -959 320 ) ( 1464 -959 320 ) dsi_textures/cretebase4 39 150 0 0.5 0.5 0 0 0
-( 1464 -959 296 ) ( 1344 -959 296 ) ( 1344 -1137 296 ) dsi_textures/cretebase4 39 150 0 0.5 0.5 0 0 0
-}
-// brush 19
-{
-( 1296 -672 488 ) ( 1296 -856 488 ) ( 1296 -856 440 ) dsi_textures/cretebase4 64 0 0 0.5 0.5 0 0 0
-( 1528 -48 488 ) ( 1352 -48 488 ) ( 1352 -48 440 ) dsi_textures/cretebase4 0 0 0 0.5 0.5 0 0 0
-( 1328 -736 488 ) ( 1328 -552 488 ) ( 1328 -552 440 ) dsi_textures/cretebase4 64 0 0 0.5 0.5 0 0 0
-( 1176 -720 488 ) ( 1352 -720 488 ) ( 1352 -720 440 ) dsi_textures/cretebase4 0 0 0 0.5 0.5 0 0 0
-( 1168 -736 304 ) ( 1168 -552 304 ) ( 1344 -552 304 ) dsi_textures/cretebase4 0 -64 0 0.5 0.5 0 0 0
-( 1336 -552 296 ) ( 1160 -552 296 ) ( 1160 -736 296 ) dsi_textures/cretebase4 0 -64 0 0.5 0.5 0 0 0
-}
-// brush 20
-{
-( 1156 -16 488 ) ( 1156 -48 488 ) ( 1163 -48 480 ) dsi_textures/cretebase4 0 0 0 0.5 0.5 0 0 0
-( 1296 -16 488 ) ( 1272 -16 488 ) ( 1272 -16 304 ) dsi_textures/cretebase4 0 0 0 0.5 0.5 0 0 0
-( 1296 -48 488 ) ( 1296 -24 488 ) ( 1296 -24 304 ) dsi_textures/cretebase4 0 0 0 0.5 0.5 0 0 0
-( 1296 -48 480 ) ( 1163 -48 480 ) ( 1156 -48 488 ) dsi_textures/cretebase4 0 0 0 0.5 0.5 0 0 0
-( 1156 -48 488 ) ( 1156 -16 488 ) ( 1296 -16 488 ) dsi_textures/cretebase4 0 0 0 0.5 0.5 0 0 0
-( 1163 -48 480 ) ( 1296 -48 480 ) ( 1296 -16 480 ) dsi_textures/cretebase4 0 0 0 0.5 0.5 0 0 0
-}
-// brush 21
-{
-( 1328 -16 480 ) ( 1328 -48 480 ) ( 1461 -48 480 ) dsi_textures/cretebase4 0 0 0 0.5 0.5 0 0 0
-( 1328 -16 488 ) ( 1468 -16 488 ) ( 1468 -48 488 ) dsi_textures/cretebase4 0 0 0 0.5 0.5 0 0 0
-( 1468 -48 488 ) ( 1461 -48 480 ) ( 1328 -48 480 ) dsi_textures/cretebase4 0 0 0 0.5 0.5 0 0 0
-( 1328 -24 304 ) ( 1328 -24 488 ) ( 1328 -48 488 ) dsi_textures/cretebase4 0 0 0 0.5 0.5 0 0 0
-( 1352 -16 304 ) ( 1352 -16 488 ) ( 1328 -16 488 ) dsi_textures/cretebase4 0 0 0 0.5 0.5 0 0 0
-( 1461 -48 480 ) ( 1468 -48 488 ) ( 1468 -16 488 ) dsi_textures/cretebase4 0 0 0 0.5 0.5 0 0 0
-}
-// brush 22
-{
-( 1292 -16 323 ) ( 1292 -48 323 ) ( 1300 -16 323 ) dsi_textures/cretebase4 0 0 0 0.5 0.5 0 0 0
-( 1168 -64 488 ) ( 1168 120 488 ) ( 1344 120 488 ) dsi_textures/cretebase4 0 0 0 0.5 0.5 0 0 0
-( 1176 -48 488 ) ( 1352 -48 488 ) ( 1352 -48 440 ) dsi_textures/cretebase4 0 0 0 0.5 0.5 0 0 0
-( 1328 -64 488 ) ( 1328 120 488 ) ( 1328 120 440 ) dsi_textures/cretebase4 0 0 0 0.5 0.5 0 0 0
-( 1456 -16 488 ) ( 1280 -16 488 ) ( 1280 -16 440 ) dsi_textures/cretebase4 0 0 0 0.5 0.5 0 0 0
-( 1296 0 488 ) ( 1296 -184 488 ) ( 1296 -184 440 ) dsi_textures/cretebase4 0 0 0 0.5 0.5 0 0 0
-}
-// brush 23
-{
-( 201 -1312 -16 ) ( 192 -1312 -16 ) ( 192 -1320 -24 ) dsi_textures/cretebase 0 0 0 0.5 0.5 134217728 0 0
-( 192 -1318 -9 ) ( 201 -1318 -9 ) ( 201 -1320 -9 ) dsi_textures/cretebase 0 0 0 0.5 0.5 134217728 0 0
-( 201 -1320 -24 ) ( 192 -1320 -24 ) ( 192 -1320 -8 ) dsi_textures/cretebase 0 120 0 0.5 0.5 134217728 0 0
-( 280 -1320 -9 ) ( 282 -1318 -9 ) ( 288 -1312 -16 ) dsi_textures/cretebase 0 120 0 0.5 0.5 134217728 0 0
-( 192 -1312 -16 ) ( 281 -1318 -9 ) ( 192 -1318 -9 ) dsi_textures/cretebase 0 120 0 0.5 0.5 134217728 0 0
-( 192 -1312 -8 ) ( 192 -1320 -8 ) ( 192 -1320 -16 ) dsi_textures/cretebase 0 120 0 0.5 0.5 134217728 0 0
-}
-// brush 24
-{
-( 424 -780 -40 ) ( 200 -780 -40 ) ( 200 -1008 -40 ) evil8_floor/e8clangfloor 6 0 0 0.5 0.5 0 0 0
-( 200 -1008 -16 ) ( 200 -780 -16 ) ( 424 -780 -16 ) evil8_floor/e8clangfloor 6 0 0 0.5 0.5 0 0 0
-( 216 -960 -16 ) ( 440 -960 -16 ) ( 440 -960 -24 ) evil8_floor/e8clangfloor 6 0 0 0.5 0.5 0 0 0
-( 256 -768 -16 ) ( 256 -768 -24 ) ( 448 -960 -24 ) evil8_floor/e8clangfloor 6 0 0 0.5 0.5 0 0 0
-( 256 -768 -24 ) ( 256 -768 -16 ) ( 192 -768 -16 ) evil8_floor/e8clangfloor 6 0 0 0.5 0.5 0 0 0
-( 192 -780 -16 ) ( 192 -1008 -16 ) ( 192 -1008 -24 ) common/caulk 0 0 0 0.5 0.5 0 4 0
-}
-// brush 25
-{
-( 192 -960 -16 ) ( 192 -992 -16 ) ( 192 -992 -24 ) common/caulk 0 0 0 0.5 0.5 0 4 0
-( 236 -960 -16 ) ( 192 -960 -16 ) ( 192 -960 -24 ) evil8_floor/e8clangfloor 7 0 0 0.5 0.5 0 0 0
-( 256 -1152 -32 ) ( 256 -1120 -32 ) ( 256 -1120 -40 ) common/caulk 0 0 0 0.5 0.5 0 4 0
-( 212 -1152 -16 ) ( 256 -1152 -16 ) ( 256 -1152 -24 ) evil8_floor/e8clangfloor 7 0 0 0.5 0.5 0 0 0
-( 192 -992 -16 ) ( 192 -960 -16 ) ( 236 -960 -16 ) evil8_floor/e8clangfloor 7 0 0 0.5 0.5 0 0 0
-( 236 -960 -40 ) ( 192 -960 -40 ) ( 192 -992 -40 ) evil8_floor/e8clangfloor 7 0 0 0.5 0.5 0 0 0
-}
-// brush 26
-{
-( 192 -1104 -24 ) ( 192 -1104 -16 ) ( 192 -1332 -16 ) evil8_floor/e8clangfloor -5 0 0 0.5 0.5 0 0 0
-( 288 -1320 -24 ) ( 192 -1320 -24 ) ( 192 -1312 -16 ) evil8_floor/e8clangfloor -5 0 0 0.5 0.5 0 0 0
-( 448 -1152 -24 ) ( 256 -1344 -24 ) ( 256 -1344 -16 ) evil8_floor/e8clangfloor -5 0 0 0.5 0.5 0 0 0
-( 440 -1152 -24 ) ( 440 -1152 -16 ) ( 216 -1152 -16 ) evil8_floor/e8clangfloor -5 0 0 0.5 0.5 0 0 0
-( 424 -1332 -16 ) ( 200 -1332 -16 ) ( 200 -1104 -16 ) evil8_floor/e8clangfloor 7 0 0 0.5 0.5 0 0 0
-( 192 -1320 -24 ) ( 288 -1320 -24 ) ( 448 -1152 -24 ) evil8_floor/e8clangfloor -5 0 0 0.5 0.5 0 0 0
-}
-// brush 27
-{
-( 192 552 -16 ) ( 192 552 -8 ) ( 192 544 -8 ) dsi_textures/cretebase -160 119 0 0.5 0.5 0 0 0
-( 192 550 -9 ) ( 281 550 -9 ) ( 192 544 -16 ) dsi_textures/cretebase 0 120 0 0.5 0.5 0 0 0
-( 288 544 -16 ) ( 282 550 -9 ) ( 280 552 -9 ) dsi_textures/cretebase -160 120 0 0.5 0.5 0 0 0
-( 192 552 -8 ) ( 192 552 -24 ) ( 201 552 -24 ) dsi_textures/cretebase 0 120 0 0.5 0.5 0 0 0
-( 201 552 -9 ) ( 201 550 -9 ) ( 192 550 -9 ) dsi_textures/cretebase 0 160 0 0.5 0.5 0 0 0
-( 192 552 -24 ) ( 192 544 -16 ) ( 201 544 -16 ) dsi_textures/cretebase 0 160 0 0.5 0.5 0 0 0
-}
-// brush 28
-{
-( 256 0 -16 ) ( 256 0 -24 ) ( 448 192 -24 ) dsi_textures/cretebase 0 0 0 0.5 0.5 134217728 0 0
-( 455 192 -16 ) ( 448 192 -16 ) ( 448 192 -24 ) dsi_textures/cretebase 0 0 0 0.5 0.5 134217728 0 0
-( 262 -1 -24 ) ( 262 -1 -16 ) ( 454 191 -16 ) dsi_textures/cretebase 0 0 0 0.5 0.5 134217728 0 0
-( 259 0 -16 ) ( 259 0 -24 ) ( 256 0 -24 ) dsi_textures/cretebase 0 0 0 0.5 0.5 134217728 0 0
-( 448 187 -10 ) ( 448 192 -10 ) ( 455 192 -10 ) dsi_textures/cretebase 0 0 0 0.5 0.5 134217728 0 0
-( 455 192 -24 ) ( 448 192 -24 ) ( 448 187 -24 ) dsi_textures/cretebase 0 0 0 0.5 0.5 134217728 0 0
-}
-// brush 29
-{
-( 192 0 -10 ) ( 192 -1 -10 ) ( 192 -1 -24 ) dsi_textures/cretebase -2 0 0 0.5 0.5 134217728 0 0
-( 205 0 -10 ) ( 192 0 -10 ) ( 192 0 -24 ) dsi_textures/cretebase 4 0 0 0.5 0.5 134217728 0 0
-( 258 -5 -24 ) ( 258 -5 -10 ) ( 263 0 -10 ) dsi_textures/cretebase -2 0 0 0.5 0.5 134217728 0 0
-( 257 -5 -10 ) ( 257 -5 -24 ) ( 192 -5 -24 ) dsi_textures/cretebase 4 0 0 0.5 0.5 134217728 0 0
-( 249 -1 -10 ) ( 249 0 -10 ) ( 262 0 -10 ) dsi_textures/cretebase 4 2 0 0.5 0.5 134217728 0 0
-( 262 0 -24 ) ( 249 0 -24 ) ( 249 -1 -24 ) dsi_textures/cretebase 4 2 0 0.5 0.5 134217728 0 0
-}
-// brush 30
-{
-( 136 -48 -10 ) ( 136 -48 -24 ) ( 128 -48 -24 ) dsi_textures/cretebase 0 0 0 0.5 0.5 134217728 0 0
-( 128 -48 -10 ) ( 128 -48 -24 ) ( 192 0 -24 ) dsi_textures/cretebase 2 0 0 0.5 0.5 134217728 0 0
-( 192 -7 -10 ) ( 192 0 -10 ) ( 192 0 -24 ) dsi_textures/cretebase 0 0 0 0.5 0.5 134217728 0 0
-( 136 -48 -24 ) ( 136 -48 -10 ) ( 192 -5 -10 ) dsi_textures/cretebase 2 0 0 0.5 0.5 134217728 0 0
-( 187 -7 -10 ) ( 187 0 -10 ) ( 192 0 -10 ) dsi_textures/cretebase 2 0 0 0.5 0.5 134217728 0 0
-( 192 0 -24 ) ( 187 0 -24 ) ( 187 -7 -24 ) dsi_textures/cretebase 2 0 0 0.5 0.5 134217728 0 0
-}
-// brush 31
-{
-( 132 -51 -10 ) ( 132 -51 -24 ) ( 128 -54 -24 ) dsi_textures/cretebase -14 0 0 0.5 0.5 134217728 0 0
-( 137 -48 -24 ) ( 137 -48 -10 ) ( 128 -48 -10 ) dsi_textures/cretebase 6 0 0 0.5 0.5 134217728 0 0
-( 128 -53 -24 ) ( 128 -53 -10 ) ( 132 -51 -10 ) dsi_textures/cretebase -14 0 0 0.5 0.5 134217728 0 0
-( 128 -53 -10 ) ( 128 -53 -24 ) ( 128 -48 -24 ) dsi_textures/cretebase 6 0 0 0.5 0.5 134217728 0 0
-( 111 -61 -10 ) ( 111 -48 -10 ) ( 136 -48 -10 ) dsi_textures/cretebase 6 14 0 0.5 0.5 134217728 0 0
-( 136 -48 -24 ) ( 111 -48 -24 ) ( 111 -61 -24 ) dsi_textures/cretebase 6 14 0 0.5 0.5 134217728 0 0
-}
-// brush 32
-{
-( 128 -48 -24 ) ( 103 -48 -24 ) ( 103 -61 -24 ) dsi_textures/cretebase 22 14 0 0.5 0.5 134217728 0 0
-( 103 -61 -10 ) ( 103 -48 -10 ) ( 128 -48 -10 ) dsi_textures/cretebase 22 14 0 0.5 0.5 134217728 0 0
-( 64 -70 -10 ) ( 64 -70 -24 ) ( 64 -64 -24 ) dsi_textures/cretebase 6 0 0 0.5 0.5 134217728 0 0
-( 128 -61 -10 ) ( 128 -48 -10 ) ( 128 -48 -24 ) dsi_textures/cretebase -14 0 0 0.5 0.5 134217728 0 0
-( 64 -64 -10 ) ( 64 -64 -24 ) ( 128 -48 -24 ) dsi_textures/cretebase 22 0 0 0.5 0.5 134217728 0 0
-( 65 -68 -24 ) ( 65 -68 -10 ) ( 129 -53 -10 ) dsi_textures/cretebase 2 0 0 0.5 0.5 134217728 0 0
-}
-// brush 33
-{
-( 65 -68 -10 ) ( 65 -68 -24 ) ( 129 -53 -10 ) dsi_textures/cretebase -16 0 0 0.5 0.5 134217728 0 0
-( 69 -68 -10 ) ( 69 -67 -10 ) ( 69 -67 -24 ) dsi_textures/cretebase -4 0 -180 0.5 -0.5 134217728 0 0
-( 71 -129 -10 ) ( 78 -129 -10 ) ( 78 -129 -24 ) dsi_textures/cretebase -16 0 0 0.5 0.5 134217728 0 0
-( 64 -68 -10 ) ( 64 -69 -10 ) ( 64 -69 -24 ) dsi_textures/cretebase -4 0 -180 0.5 -0.5 134217728 0 0
-( 62 -67 -10 ) ( 69 -67 -10 ) ( 69 -68 -10 ) dsi_textures/cretebase -4 16 -90 0.5 0.5 134217728 0 0
-( 69 -68 -24 ) ( 69 -67 -24 ) ( 62 -67 -24 ) dsi_textures/cretebase -4 16 -90 0.5 0.5 134217728 0 0
-}
-// brush 34
-{
-( 64 -129 -10 ) ( 64 -133 -10 ) ( 64 -133 -24 ) dsi_textures/cretebase -1 0 0 0.5 0.5 134217728 0 0
-( 68 -129 -10 ) ( 64 -129 -10 ) ( 64 -129 -24 ) dsi_textures/cretebase 0 0 0 0.5 0.5 134217728 0 0
-( 67 -132 -24 ) ( 67 -132 -10 ) ( 69 -129 -10 ) dsi_textures/cretebase -1 0 0 0.5 0.5 134217728 0 0
-( 67 -132 -10 ) ( 67 -132 -24 ) ( 64 -134 -24 ) dsi_textures/cretebase 0 0 0 0.5 0.5 134217728 0 0
-( 64 -133 -10 ) ( 64 -129 -10 ) ( 68 -129 -10 ) dsi_textures/cretebase 0 1 0 0.5 0.5 134217728 0 0
-( 68 -129 -24 ) ( 64 -129 -24 ) ( 64 -133 -24 ) dsi_textures/cretebase 0 1 0 0.5 0.5 134217728 0 0
-}
-// brush 35
-{
-( 64 -130 -24 ) ( 60 -130 -24 ) ( 60 -147 -24 ) dsi_textures/cretebase -14 -4 0 0.5 0.5 134217728 0 0
-( 60 -147 -10 ) ( 60 -130 -10 ) ( 64 -130 -10 ) dsi_textures/cretebase -14 -4 0 0.5 0.5 134217728 0 0
-( -55 -214 -24 ) ( -55 -214 -10 ) ( 64 -134 -10 ) dsi_textures/cretebase -14 0 0 0.5 0.5 134217728 0 0
-( 64 -129 -10 ) ( 64 -129 -24 ) ( 64 -134 -24 ) dsi_textures/cretebase 4 0 0 0.5 0.5 134217728 0 0
-( -61 -212 -10 ) ( -61 -212 -24 ) ( 64 -129 -24 ) dsi_textures/cretebase -14 0 0 0.5 0.5 134217728 0 0
-( -61 -212 -24 ) ( -61 -212 -10 ) ( -55 -214 -10 ) dsi_textures/cretebase 4 0 0 0.5 0.5 134217728 0 0
-}
-// brush 36
-{
-( -61 -212 -10 ) ( -61 -212 -24 ) ( -55 -214 -10 ) dsi_textures/cretebase -6 0 0 0.5 0.5 134217728 0 0
-( -46 -203 -24 ) ( -56 -203 -24 ) ( -56 -214 -24 ) dsi_textures/cretebase -6 0 0 0.5 0.5 134217728 0 0
-( -56 -214 -10 ) ( -56 -203 -10 ) ( -46 -203 -10 ) dsi_textures/cretebase -6 0 0 0.5 0.5 134217728 0 0
-( -63 -212 -24 ) ( -63 -212 -10 ) ( 64 -251 -10 ) dsi_textures/cretebase -6 0 0 0.5 0.5 134217728 0 0
-( -60 -214 -10 ) ( -60 -214 -24 ) ( -50 -210 -24 ) dsi_textures/cretebase 0 0 0 0.5 0.5 134217728 0 0
-}
-// brush 37
-{
-( -55 -214 -10 ) ( -55 -214 -24 ) ( 64 -134 -10 ) dsi_textures/cretebase -6 0 0 0.5 0.5 134217728 0 0
-( -61 -212 -24 ) ( -61 -212 -10 ) ( -55 -214 -10 ) dsi_textures/cretebase -6 0 0 0.5 0.5 134217728 0 0
-( -46 -203 -24 ) ( -56 -203 -24 ) ( -56 -214 -24 ) dsi_textures/cretebase -6 0 0 0.5 0.5 134217728 0 0
-( -56 -214 -10 ) ( -56 -203 -10 ) ( -46 -203 -10 ) dsi_textures/cretebase -6 0 0 0.5 0.5 134217728 0 0
-( -63 -212 -24 ) ( -63 -212 -10 ) ( 64 -251 -10 ) dsi_textures/cretebase -6 0 0 0.5 0.5 134217728 0 0
-( 64 -244 -10 ) ( 64 -244 -24 ) ( 64 -251 -24 ) dsi_textures/cretebase 0 0 0 0.5 0.5 134217728 0 0
-( 64 -244 -24 ) ( 64 -244 -10 ) ( -48 -210 -10 ) dsi_textures/cretebase -6 0 0 0.5 0.5 134217728 0 0
-}
-// brush 38
-{
-( 64 -244 -10 ) ( 64 -251 -10 ) ( 64 -251 -24 ) dsi_textures/cretebase 0 0 0 0.5 0.5 134217728 0 0
-( 70 -246 -24 ) ( 70 -246 -10 ) ( 64 -244 -10 ) dsi_textures/cretebase 2 0 0 0.5 0.5 134217728 0 0
-( 70 -246 -10 ) ( 70 -246 -24 ) ( 70 -288 -24 ) dsi_textures/cretebase 0 0 0 0.5 0.5 134217728 0 0
-( 66 -288 -10 ) ( 72 -288 -10 ) ( 72 -288 -24 ) dsi_textures/cretebase 2 0 0 0.5 0.5 134217728 0 0
-( 64 -251 -10 ) ( 64 -244 -10 ) ( 70 -244 -10 ) dsi_textures/cretebase 2 0 0 0.5 0.5 134217728 0 0
-( 70 -244 -24 ) ( 64 -244 -24 ) ( 64 -251 -24 ) dsi_textures/cretebase 2 0 0 0.5 0.5 134217728 0 0
-}
-// brush 39
-{
-( 455 -960 -10 ) ( 448 -960 -10 ) ( 448 -955 -10 ) dsi_textures/cretebase 0 0 0 0.5 -0.5 134217728 0 0
-( 448 -955 -24 ) ( 448 -960 -24 ) ( 455 -960 -24 ) dsi_textures/cretebase 0 0 0 0.5 -0.5 134217728 0 0
-( 259 -768 -18 ) ( 259 -768 -10 ) ( 256 -768 -10 ) dsi_textures/cretebase 0 68 0 0.5 -0.5 134217728 0 0
-( 262 -767 -10 ) ( 262 -767 -18 ) ( 454 -959 -18 ) dsi_textures/cretebase 0 67 -180 0.5 0.5 134217728 0 0
-( 455 -960 -18 ) ( 448 -960 -18 ) ( 448 -960 -10 ) dsi_textures/cretebase 0 68 0 0.5 -0.5 134217728 0 0
-( 256 -768 -18 ) ( 256 -768 -10 ) ( 448 -960 -10 ) dsi_textures/cretebase 0 67 -180 0.5 0.5 134217728 0 0
-}
-// brush 40
-{
-( 262 -768 -10 ) ( 249 -768 -10 ) ( 249 -767 -10 ) dsi_textures/cretebase 4 2 0 0.5 -0.5 134217728 0 0
-( 249 -767 -24 ) ( 249 -768 -24 ) ( 262 -768 -24 ) dsi_textures/cretebase 4 2 0 0.5 -0.5 134217728 0 0
-( 257 -763 -24 ) ( 257 -763 -10 ) ( 192 -763 -10 ) dsi_textures/cretebase 4 68 0 0.5 -0.5 134217728 0 0
-( 258 -763 -10 ) ( 258 -763 -24 ) ( 263 -768 -24 ) dsi_textures/cretebase -2 67 -180 0.5 0.5 134217728 0 0
-( 205 -768 -24 ) ( 192 -768 -24 ) ( 192 -768 -10 ) dsi_textures/cretebase 4 68 0 0.5 -0.5 134217728 0 0
-( 192 -768 -24 ) ( 192 -767 -24 ) ( 192 -767 -10 ) dsi_textures/cretebase -2 67 -180 0.5 0.5 134217728 0 0
-}
-// brush 41
-{
-( 192 -768 -10 ) ( 187 -768 -10 ) ( 187 -761 -10 ) dsi_textures/cretebase 2 0 0 0.5 -0.5 134217728 0 0
-( 187 -761 -24 ) ( 187 -768 -24 ) ( 192 -768 -24 ) dsi_textures/cretebase 2 0 0 0.5 -0.5 134217728 0 0
-( 136 -720 -10 ) ( 136 -720 -24 ) ( 192 -763 -24 ) dsi_textures/cretebase 2 68 0 0.5 -0.5 134217728 0 0
-( 192 -761 -24 ) ( 192 -768 -24 ) ( 192 -768 -10 ) dsi_textures/cretebase 0 67 -180 0.5 0.5 134217728 0 0
-( 128 -720 -24 ) ( 128 -720 -10 ) ( 192 -768 -10 ) dsi_textures/cretebase 2 68 0 0.5 -0.5 134217728 0 0
-( 136 -720 -24 ) ( 136 -720 -10 ) ( 128 -720 -10 ) dsi_textures/cretebase 0 68 0 0.5 -0.5 134217728 0 0
-}
-// brush 42
-{
-( 136 -720 -10 ) ( 111 -720 -10 ) ( 111 -707 -10 ) dsi_textures/cretebase 6 14 0 0.5 -0.5 134217728 0 0
-( 111 -707 -24 ) ( 111 -720 -24 ) ( 136 -720 -24 ) dsi_textures/cretebase 6 14 0 0.5 -0.5 134217728 0 0
-( 128 -715 -24 ) ( 128 -715 -10 ) ( 128 -720 -10 ) dsi_textures/cretebase 6 67 -180 0.5 0.5 134217728 0 0
-( 128 -715 -10 ) ( 128 -715 -24 ) ( 132 -717 -24 ) dsi_textures/cretebase -14 68 0 0.5 -0.5 134217728 0 0
-( 137 -720 -10 ) ( 137 -720 -24 ) ( 128 -720 -24 ) dsi_textures/cretebase 6 68 0 0.5 -0.5 134217728 0 0
-( 132 -717 -24 ) ( 132 -717 -10 ) ( 128 -714 -10 ) dsi_textures/cretebase -14 68 0 0.5 -0.5 134217728 0 0
-}
-// brush 43
-{
-( 65 -700 -10 ) ( 65 -700 -24 ) ( 129 -715 -24 ) dsi_textures/cretebase 2 68 0 0.5 -0.5 134217728 0 0
-( 64 -704 -24 ) ( 64 -704 -10 ) ( 128 -720 -10 ) dsi_textures/cretebase 22 68 0 0.5 -0.5 134217728 0 0
-( 128 -707 -24 ) ( 128 -720 -24 ) ( 128 -720 -10 ) dsi_textures/cretebase -14 67 -180 0.5 0.5 134217728 0 0
-( 64 -698 -24 ) ( 64 -698 -10 ) ( 64 -704 -10 ) dsi_textures/cretebase 6 67 -180 0.5 0.5 134217728 0 0
-( 103 -707 -24 ) ( 103 -720 -24 ) ( 128 -720 -24 ) dsi_textures/cretebase 22 14 0 0.5 -0.5 134217728 0 0
-( 128 -720 -10 ) ( 103 -720 -10 ) ( 103 -707 -10 ) dsi_textures/cretebase 22 14 0 0.5 -0.5 134217728 0 0
-}
-// brush 44
-{
-( 69 -700 -10 ) ( 69 -701 -10 ) ( 62 -701 -10 ) dsi_textures/cretebase -3 16 90 0.5 -0.5 134217728 0 0
-( 62 -701 -24 ) ( 69 -701 -24 ) ( 69 -700 -24 ) dsi_textures/cretebase -3 16 90 0.5 -0.5 134217728 0 0
-( 64 -700 -24 ) ( 64 -699 -24 ) ( 64 -699 -10 ) dsi_textures/cretebase -4 68 0 0.5 -0.5 134217728 0 0
-( 71 -639 -24 ) ( 78 -639 -24 ) ( 78 -639 -10 ) dsi_textures/cretebase -16 68 0 0.5 -0.5 134217728 0 0
-( 69 -700 -24 ) ( 69 -701 -24 ) ( 69 -701 -10 ) dsi_textures/cretebase -4 68 0 0.5 -0.5 134217728 0 0
-( 65 -700 -24 ) ( 65 -700 -10 ) ( 129 -715 -24 ) dsi_textures/cretebase -16 68 0 0.5 -0.5 134217728 0 0
-}
-// brush 45
-{
-( 68 -639 -10 ) ( 64 -639 -10 ) ( 64 -635 -10 ) dsi_textures/cretebase 0 1 0 0.5 -0.5 134217728 0 0
-( 64 -635 -24 ) ( 64 -639 -24 ) ( 68 -639 -24 ) dsi_textures/cretebase 0 1 0 0.5 -0.5 134217728 0 0
-( 67 -636 -24 ) ( 67 -636 -10 ) ( 64 -634 -10 ) dsi_textures/cretebase 0 68 0 0.5 -0.5 134217728 0 0
-( 67 -636 -10 ) ( 67 -636 -24 ) ( 69 -639 -24 ) dsi_textures/cretebase -1 67 -180 0.5 0.5 134217728 0 0
-( 68 -639 -24 ) ( 64 -639 -24 ) ( 64 -639 -10 ) dsi_textures/cretebase 0 68 0 0.5 -0.5 134217728 0 0
-( 64 -639 -24 ) ( 64 -635 -24 ) ( 64 -635 -10 ) dsi_textures/cretebase -1 67 -180 0.5 0.5 134217728 0 0
-}
-// brush 46
-{
-( 70 -524 -10 ) ( 64 -524 -10 ) ( 64 -517 -10 ) dsi_textures/cretebase 2 0 0 0.5 -0.5 134217728 0 0
-( 64 -517 -24 ) ( 64 -524 -24 ) ( 70 -524 -24 ) dsi_textures/cretebase 2 0 0 0.5 -0.5 134217728 0 0
-( 66 -480 -24 ) ( 72 -480 -24 ) ( 72 -480 -10 ) dsi_textures/cretebase 2 67 0 0.5 -0.5 134217728 0 0
-( 70 -522 -24 ) ( 70 -522 -10 ) ( 70 -480 -10 ) dsi_textures/cretebase 0 67 -180 0.5 0.5 134217728 0 0
-( 70 -522 -10 ) ( 70 -522 -24 ) ( 64 -524 -24 ) dsi_textures/cretebase 2 68 0 0.5 -0.5 134217728 0 0
-( 64 -524 -24 ) ( 64 -517 -24 ) ( 64 -517 -10 ) dsi_textures/cretebase 0 67 -180 0.5 0.5 134217728 0 0
-}
-// brush 47
-{
-( -128 -448 -24 ) ( -128 -448 -16 ) ( -128 -768 -16 ) common/caulk 0 0 0 0.5 0.5 0 4 0
-( -132 -508 -16 ) ( -132 -508 -24 ) ( 60 -636 -24 ) evil8_floor/e8clangfloor 0 0 0 0.5 0.5 0 0 0
-( 64 -792 -32 ) ( 64 -424 -32 ) ( 64 -424 -40 ) evil8_floor/e8clangfloor 0 0 0 0.5 0.5 0 0 0
-( 192 -768 -16 ) ( 332 -768 -16 ) ( 332 -768 -24 ) common/caulk 0 0 0 0.5 0.5 0 4 0
-( 188 -776 -16 ) ( 188 -408 -16 ) ( 328 -408 -16 ) evil8_floor/e8clangfloor 0 0 0 0.5 0.5 0 0 0
-( 328 -408 -40 ) ( 188 -408 -40 ) ( 188 -776 -40 ) evil8_floor/e8clangfloor 0 0 0 0.5 0.5 0 0 0
-( -128 -576 -16 ) ( -128 -576 -24 ) ( 64 -517 -16 ) common/caulk 0 0 0 0.5 0.5 0 4 0
-}
-// brush 48
-{
-( 64 -517 -16 ) ( -41 -517 -16 ) ( -41 -480 -16 ) evil8_floor/e8clangfloor 0 0 0 0.5 0.5 0 0 0
-( -41 -480 -40 ) ( -41 -517 -40 ) ( 64 -517 -40 ) evil8_floor/e8clangfloor 0 0 0 0.5 0.5 0 0 0
-( -41 -480 -24 ) ( 64 -480 -24 ) ( 64 -480 -16 ) evil8_floor/e8clangfloor 0 0 0 0.5 0.5 0 0 0
-( 64 -480 -40 ) ( 64 -517 -40 ) ( 64 -517 -32 ) evil8_floor/e8clangfloor 0 0 0 0.5 0.5 0 0 0
-( -128 -576 -24 ) ( -128 -576 -16 ) ( 64 -517 -16 ) evil8_floor/e8clangfloor 0 0 0 0.5 0.5 0 0 0
-( -128 -576 -16 ) ( -128 -576 -24 ) ( -128 -480 -24 ) common/caulk 0 0 0 0.5 0.5 0 4 0
-}
-// brush 49
-{
-( -132 -508 -24 ) ( -132 -508 -16 ) ( 60 -636 -24 ) dsi_textures/cretebase 4 68 0 0.5 -0.5 134217728 0 0
-( 188 -776 -10 ) ( 188 -408 -10 ) ( 328 -408 -10 ) dsi_textures/cretebase 4 68 0 0.5 -0.5 134217728 0 0
-( -128 -576 -16 ) ( -128 -576 -24 ) ( 64 -517 -16 ) dsi_textures/cretebase 4 68 0 0.5 -0.5 134217728 0 0
-( -55 -554 -24 ) ( -55 -554 -10 ) ( -61 -555 -10 ) dsi_textures/cretebase 4 68 0 0.5 -0.5 134217728 0 0
-( 64 -639 -24 ) ( 64 -639 -10 ) ( 64 -634 -10 ) dsi_textures/cretebase 4 67 -180 0.5 0.5 134217728 0 0
-( -55 -554 -10 ) ( -55 -554 -24 ) ( 64 -634 -24 ) dsi_textures/cretebase -14 68 0 0.5 -0.5 134217728 0 0
-( 60 -621 -24 ) ( 60 -638 -24 ) ( 64 -638 -24 ) dsi_textures/cretebase -14 -4 0 0.5 -0.5 134217728 0 0
-}
-// brush 50
-{
-( -55 -554 -24 ) ( -55 -554 -10 ) ( 64 -634 -24 ) dsi_textures/cretebase -6 68 0 0.5 -0.5 134217728 0 0
-( -128 -576 -16 ) ( -128 -576 -24 ) ( 64 -517 -16 ) dsi_textures/cretebase -6 68 0 0.5 -0.5 134217728 0 0
-( 64 -524 -10 ) ( 64 -524 -24 ) ( -48 -558 -24 ) dsi_textures/cretebase -6 68 0 0.5 -0.5 134217728 0 0
-( 64 -524 -24 ) ( 64 -524 -10 ) ( 64 -517 -10 ) dsi_textures/cretebase 0 67 -180 0.5 0.5 134217728 0 0
-( -56 -554 -24 ) ( -56 -565 -24 ) ( -46 -565 -24 ) dsi_textures/cretebase -6 0 0 0.5 -0.5 134217728 0 0
-( -46 -565 -10 ) ( -56 -565 -10 ) ( -56 -554 -10 ) dsi_textures/cretebase -6 0 0 0.5 -0.5 134217728 0 0
-( -55 -554 -10 ) ( -55 -554 -24 ) ( -38 -548 -24 ) dsi_textures/cretebase -6 68 0 0.5 -0.5 134217728 0 0
-}
-// brush 51
-{
-( 3027 -224 -16 ) ( 3035 -224 -16 ) ( 3035 -232 -16 ) evil8_floor/e8clangfloor 102 0 -180 0.5 0.5 134217728 0 0
-( 3035 -232 -24 ) ( 3035 -224 -24 ) ( 3027 -224 -24 ) common/caulk 0 0 0 0.5 0.5 134217728 4 0
-( 3035 -232 -24 ) ( 3027 -232 -24 ) ( 3027 -232 -16 ) common/caulk 0 0 0 0.5 0.5 134217728 4 0
-( 3027 -232 -24 ) ( 3027 -224 -24 ) ( 3027 -224 -16 ) evil8_floor/e8clangfloor 0 0 -180 0.5 -0.5 134217728 0 0
-( 3187 -224 -24 ) ( 3187 -224 -16 ) ( 3027 -224 -16 ) evil8_floor/e8clangfloor 102 0 -180 0.5 -0.5 134217728 0 0
-( 3187 -224 -16 ) ( 3187 -224 -24 ) ( 3035 -232 -24 ) common/caulk 0 0 0 0.5 0.5 134217728 4 0
-}
-// brush 52
-{
-( 3187 -544 -28 ) ( 3187 -544 -20 ) ( 3035 -536 -20 ) common/caulk 0 0 0 0.5 0.5 134217728 4 0
-( 3187 -544 -20 ) ( 3187 -544 -28 ) ( 3027 -544 -28 ) evil8_floor/e8clangfloor 102 0 -180 0.5 -0.5 134217728 0 0
-( 3027 -536 -20 ) ( 3027 -544 -20 ) ( 3027 -544 -28 ) evil8_floor/e8clangfloor 0 0 -180 0.5 -0.5 134217728 0 0
-( 3035 -536 -20 ) ( 3027 -536 -20 ) ( 3027 -536 -28 ) common/caulk 0 0 0 0.5 0.5 134217728 4 0
-( 3035 -536 -16 ) ( 3035 -544 -16 ) ( 3027 -544 -16 ) evil8_floor/e8clangfloor 102 0 -180 0.5 0.5 134217728 0 0
-( 3027 -544 -24 ) ( 3035 -544 -24 ) ( 3035 -536 -24 ) common/caulk 0 0 0 0.5 0.5 134217728 4 0
-}
-// brush 53
-{
-( 3027 -356 -16 ) ( 3027 12 -16 ) ( 3027 12 -24 ) common/caulk 0 0 0 0.5 0.5 0 4 0
-( 2575 -768 -16 ) ( 2715 -768 -16 ) ( 2715 -768 -24 ) evil8_floor/e8clangfloor 102 0 -180 0.5 -0.5 0 0 0
-( 2867 28 -16 ) ( 2867 -340 -16 ) ( 2867 -340 -24 ) common/caulk 0 0 0 0.5 0.5 0 4 0
-( 2707 0 -16 ) ( 2567 0 -16 ) ( 2567 0 -24 ) common/caulk 0 0 0 0.5 0.5 0 4 0
-( 2711 8 -16 ) ( 2711 -360 -16 ) ( 2571 -360 -16 ) evil8_floor/e8clangfloor 102 0 -180 0.5 0.5 0 0 0
-( 2571 -360 -40 ) ( 2711 -360 -40 ) ( 2711 8 -40 ) evil8_floor/e8clangfloor 102 0 -180 0.5 0.5 0 0 0
-}
-// brush 54
-{
-( 2539 336 -40 ) ( 2539 564 -40 ) ( 2315 564 -40 ) dsi_textures/cretebase4 102 0 -180 0.5 0.5 0 0 0
-( 2315 564 -24 ) ( 2539 564 -24 ) ( 2539 336 -24 ) dsi_textures/cretebase4 102 0 -180 0.5 0.5 0 0 0
-( 2299 384 -24 ) ( 2299 384 -16 ) ( 2523 384 -16 ) common/caulk 0 0 0 0.5 0.5 0 4 0
-( 2291 384 -24 ) ( 2483 576 -24 ) ( 2483 576 -16 ) dsi_textures/cretebase4 0 0 -180 0.5 -0.5 0 0 0
-( 2549 552 -16 ) ( 2485 552 -16 ) ( 2485 552 -24 ) dsi_textures/cretebase4 102 0 -180 0.5 -0.5 0 0 0
-( 2547 336 -24 ) ( 2547 336 -16 ) ( 2547 564 -16 ) dsi_textures/cretebase4 0 0 -180 0.5 -0.5 0 0 0
-}
-// brush 55
-{
-( 2675 -112 -40 ) ( 2675 -112 -32 ) ( 2675 0 -32 ) evil8_floor/e8clangfloor 0 0 -180 0.5 -0.5 0 0 0
-( 2675 0 -24 ) ( 2675 0 -16 ) ( 2615 0 -16 ) common/caulk 0 0 0 0.5 0.5 0 4 0
-( 2547 0 -16 ) ( 2611 -48 -16 ) ( 2611 -48 -24 ) evil8_floor/e8clangfloor 102 0 -180 0.5 -0.5 0 0 0
-( 2675 -64 -24 ) ( 2611 -48 -24 ) ( 2611 -48 -16 ) evil8_floor/e8clangfloor 102 0 -180 0.5 -0.5 0 0 0
-( 2615 0 -16 ) ( 2675 0 -16 ) ( 2675 -112 -16 ) evil8_floor/e8clangfloor 102 0 -180 0.5 0.5 0 0 0
-( 2675 -112 -40 ) ( 2675 0 -40 ) ( 2615 0 -40 ) evil8_floor/e8clangfloor 102 0 -180 0.5 0.5 0 0 0
-}
-// brush 56
-{
-( 2867 -576 -24 ) ( 2867 -576 -16 ) ( 2867 -480 -16 ) common/caulk 0 0 0 0.5 0.5 0 4 0
-( 2867 -576 -16 ) ( 2867 -576 -24 ) ( 2675 -517 -24 ) evil8_floor/e8clangfloor 102 0 -180 0.5 -0.5 0 0 0
-( 2675 -480 -32 ) ( 2675 -517 -32 ) ( 2675 -517 -40 ) evil8_floor/e8clangfloor 0 0 -180 0.5 -0.5 0 0 0
-( 2780 -480 -16 ) ( 2675 -480 -16 ) ( 2675 -480 -24 ) common/caulk 0 0 0 0.5 0.5 0 4 0
-( 2780 -480 -16 ) ( 2780 -517 -16 ) ( 2675 -517 -16 ) evil8_floor/e8clangfloor 102 0 -180 0.5 0.5 0 0 0
-( 2675 -517 -40 ) ( 2780 -517 -40 ) ( 2780 -480 -40 ) evil8_floor/e8clangfloor 102 0 -180 0.5 0.5 0 0 0
-}
-// brush 57
-{
-( 2615 -768 -40 ) ( 2675 -768 -40 ) ( 2675 -656 -40 ) evil8_floor/e8clangfloor 102 0 -180 0.5 0.5 0 0 0
-( 2675 -656 -16 ) ( 2675 -768 -16 ) ( 2615 -768 -16 ) evil8_floor/e8clangfloor 102 0 -180 0.5 0.5 0 0 0
-( 2611 -720 -16 ) ( 2611 -720 -24 ) ( 2675 -704 -24 ) evil8_floor/e8clangfloor 102 0 -180 0.5 -0.5 0 0 0
-( 2611 -720 -24 ) ( 2611 -720 -16 ) ( 2547 -768 -16 ) evil8_floor/e8clangfloor 102 0 -180 0.5 -0.5 0 0 0
-( 2615 -768 -16 ) ( 2675 -768 -16 ) ( 2675 -768 -24 ) common/caulk 0 0 0 0.5 0.5 0 4 0
-( 2675 -768 -32 ) ( 2675 -656 -32 ) ( 2675 -656 -40 ) common/caulk 0 0 0 0.5 0.5 0 4 0
-}
-// brush 58
-{
-( 2547 -1332 -16 ) ( 2547 -1104 -16 ) ( 2547 -1104 -24 ) common/caulk 0 0 0 0.5 0.5 0 4 0
-( 2480 -1320 -24 ) ( 2480 -1320 -16 ) ( 2544 -1320 -16 ) dsi_textures/cretebase4 102 0 -180 0.5 -0.5 0 0 0
-( 2483 -1344 -16 ) ( 2483 -1344 -24 ) ( 2291 -1152 -24 ) dsi_textures/cretebase4 -96 0 -180 0.5 -0.5 0 0 0
-( 2523 -1152 -16 ) ( 2299 -1152 -16 ) ( 2299 -1152 -24 ) common/caulk 0 0 0 0.5 0.5 0 4 0
-( 2539 -1104 -24 ) ( 2539 -1332 -24 ) ( 2315 -1332 -24 ) common/caulk 0 0 0 0.5 0.5 0 4 0
-( 2315 -1332 -40 ) ( 2539 -1332 -40 ) ( 2539 -1104 -40 ) dsi_textures/cretebase4 102 96 -180 0.5 0.5 0 0 0
-}
-// brush 59
-{
-( 2547 544 -8 ) ( 2547 552 -8 ) ( 2547 552 -16 ) dsi_textures/cretebase 0 120 -180 0.5 -0.5 134217728 0 0
-( 2547 544 -16 ) ( 2458 550 -9 ) ( 2547 550 -9 ) dsi_textures/cretebase 102 119 -180 0.5 -0.5 134217728 0 0
-( 2459 552 -9 ) ( 2457 550 -9 ) ( 2451 544 -16 ) dsi_textures/cretebase 0 120 -180 0.5 -0.5 134217728 0 0
-( 2538 552 -24 ) ( 2547 552 -24 ) ( 2547 552 -8 ) dsi_textures/cretebase 102 119 -180 0.5 -0.5 134217728 0 0
-( 2547 550 -9 ) ( 2538 550 -9 ) ( 2538 552 -9 ) dsi_textures/cretebase 102 0 -180 0.5 0.5 134217728 0 0
-( 2538 544 -16 ) ( 2547 544 -16 ) ( 2547 552 -24 ) dsi_textures/cretebase 102 0 -180 0.5 0.5 134217728 0 0
-}
-// brush 60
-{
-( 2547 -1320 -24 ) ( 2547 -1312 -16 ) ( 2538 -1312 -16 ) dsi_textures/cretebase 102 160 -180 0.5 0.5 134217728 0 0
-( 2538 -1320 -9 ) ( 2538 -1318 -9 ) ( 2547 -1318 -9 ) dsi_textures/cretebase 102 160 -180 0.5 0.5 134217728 0 0
-( 2547 -1320 -8 ) ( 2547 -1320 -24 ) ( 2538 -1320 -24 ) dsi_textures/cretebase 102 119 -180 0.5 -0.5 134217728 0 0
-( 2451 -1312 -16 ) ( 2457 -1318 -9 ) ( 2459 -1320 -9 ) dsi_textures/cretebase -160 120 -180 0.5 -0.5 134217728 0 0
-( 2547 -1318 -9 ) ( 2458 -1318 -9 ) ( 2547 -1312 -16 ) dsi_textures/cretebase 102 119 -180 0.5 -0.5 134217728 0 0
-( 2547 -1320 -16 ) ( 2547 -1320 -8 ) ( 2547 -1312 -8 ) dsi_textures/cretebase -160 119 -180 0.5 -0.5 134217728 0 0
-}
-// brush 61
-{
-( 2284 -960 -24 ) ( 2291 -960 -24 ) ( 2291 -955 -24 ) dsi_textures/cretebase 102 0 -180 0.5 0.5 134217728 0 0
-( 2291 -955 -10 ) ( 2291 -960 -10 ) ( 2284 -960 -10 ) dsi_textures/cretebase 102 0 -180 0.5 0.5 134217728 0 0
-( 2480 -768 -16 ) ( 2480 -768 -24 ) ( 2483 -768 -24 ) dsi_textures/cretebase 102 0 -180 0.5 -0.5 134217728 0 0
-( 2477 -767 -24 ) ( 2477 -767 -16 ) ( 2285 -959 -16 ) dsi_textures/cretebase 0 0 -180 0.5 -0.5 134217728 0 0
-( 2284 -960 -16 ) ( 2291 -960 -16 ) ( 2291 -960 -24 ) dsi_textures/cretebase 102 0 -180 0.5 -0.5 134217728 0 0
-( 2483 -768 -16 ) ( 2483 -768 -24 ) ( 2291 -960 -24 ) dsi_textures/cretebase 0 0 -180 0.5 -0.5 134217728 0 0
-}
-// brush 62
-{
-( 2477 -768 -24 ) ( 2490 -768 -24 ) ( 2490 -767 -24 ) dsi_textures/cretebase 106 2 -180 0.5 0.5 134217728 0 0
-( 2490 -767 -10 ) ( 2490 -768 -10 ) ( 2477 -768 -10 ) dsi_textures/cretebase 106 2 -180 0.5 0.5 134217728 0 0
-( 2482 -763 -10 ) ( 2482 -763 -24 ) ( 2547 -763 -24 ) dsi_textures/cretebase 106 0 -180 0.5 -0.5 134217728 0 0
-( 2481 -763 -24 ) ( 2481 -763 -10 ) ( 2476 -768 -10 ) dsi_textures/cretebase -1 0 -180 0.5 -0.5 134217728 0 0
-( 2534 -768 -10 ) ( 2547 -768 -10 ) ( 2547 -768 -24 ) dsi_textures/cretebase 106 0 -180 0.5 -0.5 134217728 0 0
-( 2547 -768 -10 ) ( 2547 -767 -10 ) ( 2547 -767 -24 ) dsi_textures/cretebase -2 0 -180 0.5 -0.5 134217728 0 0
-}
-// brush 63
-{
-( 2547 -768 -24 ) ( 2552 -768 -24 ) ( 2552 -761 -24 ) dsi_textures/cretebase 104 0 -180 0.5 0.5 134217728 0 0
-( 2552 -761 -10 ) ( 2552 -768 -10 ) ( 2547 -768 -10 ) dsi_textures/cretebase 104 0 -180 0.5 0.5 134217728 0 0
-( 2603 -720 -24 ) ( 2603 -720 -10 ) ( 2547 -763 -10 ) dsi_textures/cretebase 104 0 -180 0.5 -0.5 134217728 0 0
-( 2547 -761 -10 ) ( 2547 -768 -10 ) ( 2547 -768 -24 ) dsi_textures/cretebase 0 0 -180 0.5 -0.5 134217728 0 0
-( 2611 -720 -10 ) ( 2611 -720 -24 ) ( 2547 -768 -24 ) dsi_textures/cretebase 104 0 -180 0.5 -0.5 134217728 0 0
-( 2603 -720 -10 ) ( 2603 -720 -24 ) ( 2611 -720 -24 ) dsi_textures/cretebase 102 0 -180 0.5 -0.5 134217728 0 0
-}
-// brush 64
-{
-( 2603 -720 -24 ) ( 2628 -720 -24 ) ( 2628 -707 -24 ) dsi_textures/cretebase 108 14 -180 0.5 0.5 134217728 0 0
-( 2628 -707 -10 ) ( 2628 -720 -10 ) ( 2603 -720 -10 ) dsi_textures/cretebase 108 14 -180 0.5 0.5 134217728 0 0
-( 2611 -715 -10 ) ( 2611 -715 -24 ) ( 2611 -720 -24 ) dsi_textures/cretebase 6 0 -180 0.5 -0.5 134217728 0 0
-( 2611 -715 -24 ) ( 2611 -715 -10 ) ( 2608 -717 -10 ) dsi_textures/cretebase 88 0 -180 0.5 -0.5 134217728 0 0
-( 2602 -720 -24 ) ( 2602 -720 -10 ) ( 2611 -720 -10 ) dsi_textures/cretebase 108 0 -180 0.5 -0.5 134217728 0 0
-( 2608 -717 -10 ) ( 2608 -717 -24 ) ( 2612 -714 -24 ) dsi_textures/cretebase 88 0 -180 0.5 -0.5 134217728 0 0
-}
-// brush 65
-{
-( 2674 -700 -24 ) ( 2674 -700 -10 ) ( 2610 -715 -10 ) dsi_textures/cretebase 104 0 -180 0.5 -0.5 134217728 0 0
-( 2675 -704 -10 ) ( 2675 -704 -24 ) ( 2611 -720 -24 ) dsi_textures/cretebase 124 0 -180 0.5 -0.5 134217728 0 0
-( 2611 -707 -10 ) ( 2611 -720 -10 ) ( 2611 -720 -24 ) dsi_textures/cretebase -14 0 -180 0.5 -0.5 134217728 0 0
-( 2675 -698 -10 ) ( 2675 -698 -24 ) ( 2675 -704 -24 ) dsi_textures/cretebase 6 0 -180 0.5 -0.5 134217728 0 0
-( 2636 -707 -10 ) ( 2636 -720 -10 ) ( 2611 -720 -10 ) dsi_textures/cretebase 124 14 -180 0.5 0.5 134217728 0 0
-( 2611 -720 -24 ) ( 2636 -720 -24 ) ( 2636 -707 -24 ) dsi_textures/cretebase 124 14 -180 0.5 0.5 134217728 0 0
-}
-// brush 66
-{
-( 2670 -700 -24 ) ( 2670 -701 -24 ) ( 2677 -701 -24 ) dsi_textures/cretebase -4 -86 90 0.5 0.5 134217728 0 0
-( 2677 -701 -10 ) ( 2670 -701 -10 ) ( 2670 -700 -10 ) dsi_textures/cretebase -4 -86 90 0.5 0.5 134217728 0 0
-( 2675 -700 -10 ) ( 2675 -699 -10 ) ( 2675 -699 -24 ) dsi_textures/cretebase -4 0 0 0.5 0.5 134217728 0 0
-( 2669 -639 -10 ) ( 2662 -639 -10 ) ( 2662 -639 -24 ) dsi_textures/cretebase 86 0 -180 0.5 -0.5 134217728 0 0
-( 2670 -700 -10 ) ( 2670 -701 -10 ) ( 2670 -701 -24 ) dsi_textures/cretebase -4 0 0 0.5 0.5 134217728 0 0
-( 2674 -700 -10 ) ( 2674 -700 -24 ) ( 2610 -715 -10 ) dsi_textures/cretebase 86 0 -180 0.5 -0.5 134217728 0 0
-}
-// brush 67
-{
-( 2671 -639 -24 ) ( 2675 -639 -24 ) ( 2675 -635 -24 ) dsi_textures/cretebase 102 1 -180 0.5 0.5 134217728 0 0
-( 2675 -635 -10 ) ( 2675 -639 -10 ) ( 2671 -639 -10 ) dsi_textures/cretebase 102 1 -180 0.5 0.5 134217728 0 0
-( 2672 -636 -10 ) ( 2672 -636 -24 ) ( 2675 -634 -24 ) dsi_textures/cretebase 102 0 -180 0.5 -0.5 134217728 0 0
-( 2672 -636 -24 ) ( 2672 -636 -10 ) ( 2670 -639 -10 ) dsi_textures/cretebase -1 0 -180 0.5 -0.5 134217728 0 0
-( 2671 -639 -10 ) ( 2675 -639 -10 ) ( 2675 -639 -24 ) dsi_textures/cretebase 102 0 -180 0.5 -0.5 134217728 0 0
-( 2675 -639 -10 ) ( 2675 -635 -10 ) ( 2675 -635 -24 ) dsi_textures/cretebase -1 0 -180 0.5 -0.5 134217728 0 0
-}
-// brush 68
-{
-( 2800 -555 -24 ) ( 2800 -555 -10 ) ( 2795 -554 -10 ) dsi_textures/cretebase 106 0 -180 0.5 -0.5 134217728 0 0
-( 2800 -555 -10 ) ( 2800 -555 -24 ) ( 2675 -639 -24 ) dsi_textures/cretebase 88 0 -180 0.5 -0.5 134217728 0 0
-( 2675 -639 -10 ) ( 2675 -639 -24 ) ( 2675 -634 -24 ) dsi_textures/cretebase 4 0 -180 0.5 -0.5 134217728 0 0
-( 2795 -554 -24 ) ( 2795 -554 -10 ) ( 2675 -634 -10 ) dsi_textures/cretebase 88 0 -180 0.5 -0.5 134217728 0 0
-( 2679 -621 -10 ) ( 2679 -638 -10 ) ( 2675 -638 -10 ) dsi_textures/cretebase 88 -3 -180 0.5 0.5 134217728 0 0
-( 2675 -638 -24 ) ( 2679 -638 -24 ) ( 2679 -621 -24 ) dsi_textures/cretebase 88 -3 -180 0.5 0.5 134217728 0 0
-}
-// brush 69
-{
-( 2675 -524 -24 ) ( 2675 -524 -10 ) ( 2787 -558 -10 ) dsi_textures/cretebase 96 0 -180 0.5 -0.5 134217728 0 0
-( 2675 -524 -10 ) ( 2675 -524 -24 ) ( 2675 -517 -24 ) dsi_textures/cretebase 0 0 -180 0.5 -0.5 134217728 0 0
-( 2802 -556 -24 ) ( 2802 -556 -10 ) ( 2675 -517 -10 ) dsi_textures/cretebase 96 0 -180 0.5 -0.5 134217728 0 0
-( 2795 -554 -10 ) ( 2795 -565 -10 ) ( 2785 -565 -10 ) dsi_textures/cretebase 96 0 -180 0.5 0.5 134217728 0 0
-( 2785 -565 -24 ) ( 2795 -565 -24 ) ( 2795 -554 -24 ) dsi_textures/cretebase 96 0 -180 0.5 0.5 134217728 0 0
-( 2800 -556 -24 ) ( 2800 -556 -10 ) ( 2794 -554 -10 ) dsi_textures/cretebase 96 0 -180 0.5 -0.5 134217728 0 0
-( 2794 -554 -10 ) ( 2794 -554 -24 ) ( 2675 -634 -10 ) dsi_textures/cretebase 96 0 -180 0.5 -0.5 134217728 0 0
-}
-// brush 70
-{
-( 2669 -524 -24 ) ( 2675 -524 -24 ) ( 2675 -517 -24 ) dsi_textures/cretebase 104 0 -180 0.5 0.5 134217728 0 0
-( 2675 -517 -10 ) ( 2675 -524 -10 ) ( 2669 -524 -10 ) dsi_textures/cretebase 104 0 -180 0.5 0.5 134217728 0 0
-( 2673 -480 -10 ) ( 2667 -480 -10 ) ( 2667 -480 -24 ) dsi_textures/cretebase 104 0 -180 0.5 -0.5 134217728 0 0
-( 2669 -522 -10 ) ( 2669 -522 -24 ) ( 2669 -480 -24 ) dsi_textures/cretebase 0 0 -180 0.5 -0.5 134217728 0 0
-( 2669 -522 -24 ) ( 2669 -522 -10 ) ( 2675 -524 -10 ) dsi_textures/cretebase 104 0 -180 0.5 -0.5 134217728 0 0
-( 2675 -524 -10 ) ( 2675 -517 -10 ) ( 2675 -517 -24 ) dsi_textures/cretebase 0 0 -180 0.5 -0.5 134217728 0 0
-}
-// brush 71
-{
-( 2483 0 -18 ) ( 2483 0 -10 ) ( 2291 192 -10 ) dsi_textures/cretebase 0 67 0 0.5 -0.5 134217728 0 0
-( 2284 192 -18 ) ( 2291 192 -18 ) ( 2291 192 -10 ) dsi_textures/cretebase 102 68 -180 0.5 0.5 134217728 0 0
-( 2477 -1 -10 ) ( 2477 -1 -18 ) ( 2285 191 -18 ) dsi_textures/cretebase 0 67 0 0.5 -0.5 134217728 0 0
-( 2480 0 -18 ) ( 2480 0 -10 ) ( 2483 0 -10 ) dsi_textures/cretebase 102 68 -180 0.5 0.5 134217728 0 0
-( 2291 187 -24 ) ( 2291 192 -24 ) ( 2284 192 -24 ) dsi_textures/cretebase 102 0 -180 0.5 -0.5 134217728 0 0
-( 2284 192 -10 ) ( 2291 192 -10 ) ( 2291 187 -10 ) dsi_textures/cretebase 102 0 -180 0.5 -0.5 134217728 0 0
-}
-// brush 72
-{
-( 2547 0 -24 ) ( 2547 -1 -24 ) ( 2547 -1 -10 ) dsi_textures/cretebase -2 67 0 0.5 -0.5 134217728 0 0
-( 2534 0 -24 ) ( 2547 0 -24 ) ( 2547 0 -10 ) dsi_textures/cretebase 106 68 -180 0.5 0.5 134217728 0 0
-( 2481 -5 -10 ) ( 2481 -5 -24 ) ( 2476 0 -24 ) dsi_textures/cretebase -2 67 0 0.5 -0.5 134217728 0 0
-( 2482 -5 -24 ) ( 2482 -5 -10 ) ( 2547 -5 -10 ) dsi_textures/cretebase 106 68 -180 0.5 0.5 134217728 0 0
-( 2490 -1 -24 ) ( 2490 0 -24 ) ( 2477 0 -24 ) dsi_textures/cretebase 106 1 -180 0.5 -0.5 134217728 0 0
-( 2477 0 -10 ) ( 2490 0 -10 ) ( 2490 -1 -10 ) dsi_textures/cretebase 106 1 -180 0.5 -0.5 134217728 0 0
-}
-// brush 73
-{
-( 2603 -48 -24 ) ( 2603 -48 -10 ) ( 2611 -48 -10 ) dsi_textures/cretebase 102 68 -180 0.5 0.5 134217728 0 0
-( 2611 -48 -24 ) ( 2611 -48 -10 ) ( 2547 0 -10 ) dsi_textures/cretebase 104 68 -180 0.5 0.5 134217728 0 0
-( 2547 -7 -24 ) ( 2547 0 -24 ) ( 2547 0 -10 ) dsi_textures/cretebase 0 67 0 0.5 -0.5 134217728 0 0
-( 2603 -48 -10 ) ( 2603 -48 -24 ) ( 2547 -5 -24 ) dsi_textures/cretebase 104 68 -180 0.5 0.5 134217728 0 0
-( 2552 -7 -24 ) ( 2552 0 -24 ) ( 2547 0 -24 ) dsi_textures/cretebase 104 0 -180 0.5 -0.5 134217728 0 0
-( 2547 0 -10 ) ( 2552 0 -10 ) ( 2552 -7 -10 ) dsi_textures/cretebase 104 0 -180 0.5 -0.5 134217728 0 0
-}
-// brush 74
-{
-( 2607 -51 -24 ) ( 2607 -51 -10 ) ( 2611 -54 -10 ) dsi_textures/cretebase 88 68 -180 0.5 0.5 134217728 0 0
-( 2602 -48 -10 ) ( 2602 -48 -24 ) ( 2611 -48 -24 ) dsi_textures/cretebase 108 68 -180 0.5 0.5 134217728 0 0
-( 2611 -53 -10 ) ( 2611 -53 -24 ) ( 2607 -51 -24 ) dsi_textures/cretebase 88 68 -180 0.5 0.5 134217728 0 0
-( 2611 -53 -24 ) ( 2611 -53 -10 ) ( 2611 -48 -10 ) dsi_textures/cretebase 6 67 0 0.5 -0.5 134217728 0 0
-( 2628 -61 -24 ) ( 2628 -48 -24 ) ( 2603 -48 -24 ) dsi_textures/cretebase 108 13 -180 0.5 -0.5 134217728 0 0
-( 2603 -48 -10 ) ( 2628 -48 -10 ) ( 2628 -61 -10 ) dsi_textures/cretebase 108 13 -180 0.5 -0.5 134217728 0 0
-}
-// brush 75
-{
-( 2611 -48 -10 ) ( 2636 -48 -10 ) ( 2636 -61 -10 ) dsi_textures/cretebase 124 13 -180 0.5 -0.5 134217728 0 0
-( 2636 -61 -24 ) ( 2636 -48 -24 ) ( 2611 -48 -24 ) dsi_textures/cretebase 124 13 -180 0.5 -0.5 134217728 0 0
-( 2675 -70 -24 ) ( 2675 -70 -10 ) ( 2675 -64 -10 ) dsi_textures/cretebase 6 67 0 0.5 -0.5 134217728 0 0
-( 2611 -61 -24 ) ( 2611 -48 -24 ) ( 2611 -48 -10 ) dsi_textures/cretebase -14 67 0 0.5 -0.5 134217728 0 0
-( 2675 -64 -24 ) ( 2675 -64 -10 ) ( 2611 -48 -10 ) dsi_textures/cretebase 124 68 -180 0.5 0.5 134217728 0 0
-( 2674 -68 -10 ) ( 2674 -68 -24 ) ( 2610 -53 -24 ) dsi_textures/cretebase 104 68 -180 0.5 0.5 134217728 0 0
-}
-// brush 76
-{
-( 2674 -68 -24 ) ( 2674 -68 -10 ) ( 2610 -53 -24 ) dsi_textures/cretebase 86 68 -180 0.5 0.5 134217728 0 0
-( 2670 -68 -24 ) ( 2670 -67 -24 ) ( 2670 -67 -10 ) dsi_textures/cretebase -4 67 -180 0.5 0.5 134217728 0 0
-( 2668 -129 -24 ) ( 2661 -129 -24 ) ( 2661 -129 -10 ) dsi_textures/cretebase 86 68 -180 0.5 0.5 134217728 0 0
-( 2675 -68 -24 ) ( 2675 -69 -24 ) ( 2675 -69 -10 ) dsi_textures/cretebase -4 67 -180 0.5 0.5 134217728 0 0
-( 2677 -67 -24 ) ( 2670 -67 -24 ) ( 2670 -68 -24 ) dsi_textures/cretebase -3 -86 -90 0.5 -0.5 134217728 0 0
-( 2670 -68 -10 ) ( 2670 -67 -10 ) ( 2677 -67 -10 ) dsi_textures/cretebase -3 -86 -90 0.5 -0.5 134217728 0 0
-}
-// brush 77
-{
-( 2675 -129 -24 ) ( 2675 -133 -24 ) ( 2675 -133 -10 ) dsi_textures/cretebase -1 67 0 0.5 -0.5 134217728 0 0
-( 2671 -129 -24 ) ( 2675 -129 -24 ) ( 2675 -129 -10 ) dsi_textures/cretebase 102 68 -180 0.5 0.5 134217728 0 0
-( 2672 -132 -10 ) ( 2672 -132 -24 ) ( 2670 -129 -24 ) dsi_textures/cretebase -1 67 0 0.5 -0.5 134217728 0 0
-( 2672 -132 -24 ) ( 2672 -132 -10 ) ( 2675 -134 -10 ) dsi_textures/cretebase 102 68 -180 0.5 0.5 134217728 0 0
-( 2675 -133 -24 ) ( 2675 -129 -24 ) ( 2671 -129 -24 ) dsi_textures/cretebase 102 0 -180 0.5 -0.5 134217728 0 0
-( 2671 -129 -10 ) ( 2675 -129 -10 ) ( 2675 -133 -10 ) dsi_textures/cretebase 102 0 -180 0.5 -0.5 134217728 0 0
-}
-// brush 78
-{
-( 2675 -244 -24 ) ( 2675 -251 -24 ) ( 2675 -251 -10 ) dsi_textures/cretebase 0 67 0 0.5 -0.5 134217728 0 0
-( 2669 -246 -10 ) ( 2669 -246 -24 ) ( 2675 -244 -24 ) dsi_textures/cretebase 104 68 -180 0.5 0.5 134217728 0 0
-( 2669 -246 -24 ) ( 2669 -246 -10 ) ( 2669 -288 -10 ) dsi_textures/cretebase 0 67 0 0.5 -0.5 134217728 0 0
-( 2673 -288 -24 ) ( 2667 -288 -24 ) ( 2667 -288 -10 ) dsi_textures/cretebase 104 67 -180 0.5 0.5 134217728 0 0
-( 2675 -251 -24 ) ( 2675 -244 -24 ) ( 2669 -244 -24 ) dsi_textures/cretebase 104 0 -180 0.5 -0.5 134217728 0 0
-( 2669 -244 -10 ) ( 2675 -244 -10 ) ( 2675 -251 -10 ) dsi_textures/cretebase 104 0 -180 0.5 -0.5 134217728 0 0
-}
-// brush 79
-{
-( 2867 -192 -16 ) ( 2867 -192 -24 ) ( 2675 -251 -16 ) evil8_floor/e8clangfloor 102 0 -180 0.5 -0.5 0 0 0
-( 2411 -360 -40 ) ( 2551 -360 -40 ) ( 2551 8 -40 ) evil8_floor/e8clangfloor 102 0 -180 0.5 0.5 0 0 0
-( 2551 8 -16 ) ( 2551 -360 -16 ) ( 2411 -360 -16 ) evil8_floor/e8clangfloor 102 0 -180 0.5 0.5 0 0 0
-( 2547 0 -16 ) ( 2407 0 -16 ) ( 2407 0 -24 ) common/caulk 0 0 0 0.5 0.5 0 4 0
-( 2675 24 -32 ) ( 2675 -344 -32 ) ( 2675 -344 -40 ) evil8_floor/e8clangfloor 0 0 -180 0.5 -0.5 0 0 0
-( 2871 -260 -16 ) ( 2871 -260 -24 ) ( 2679 -132 -24 ) evil8_floor/e8clangfloor 102 0 -180 0.5 -0.5 0 0 0
-( 2867 -320 -24 ) ( 2867 -320 -16 ) ( 2867 0 -16 ) common/caulk 0 0 0 0.5 0.5 0 4 0
-}
-// brush 80
-{
-( 2867 -192 -16 ) ( 2867 -192 -24 ) ( 2867 -288 -24 ) common/caulk 0 0 0 0.5 0.5 0 4 0
-( 2867 -192 -24 ) ( 2867 -192 -16 ) ( 2675 -251 -16 ) evil8_floor/e8clangfloor 102 0 -180 0.5 -0.5 0 0 0
-( 2675 -288 -40 ) ( 2675 -251 -40 ) ( 2675 -251 -32 ) evil8_floor/e8clangfloor 0 0 -180 0.5 -0.5 0 0 0
-( 2780 -288 -24 ) ( 2675 -288 -24 ) ( 2675 -288 -16 ) common/caulk 0 0 0 0.5 0.5 0 4 0
-( 2780 -288 -40 ) ( 2780 -251 -40 ) ( 2675 -251 -40 ) evil8_floor/e8clangfloor 102 0 -180 0.5 0.5 0 0 0
-( 2675 -251 -16 ) ( 2780 -251 -16 ) ( 2780 -288 -16 ) evil8_floor/e8clangfloor 102 0 -180 0.5 0.5 0 0 0
-}
-// brush 81
-{
-( 2679 -147 -24 ) ( 2679 -130 -24 ) ( 2675 -130 -24 ) dsi_textures/cretebase 88 -4 -180 0.5 -0.5 134217728 0 0
-( 2795 -214 -10 ) ( 2795 -214 -24 ) ( 2675 -134 -24 ) dsi_textures/cretebase 88 68 -180 0.5 0.5 134217728 0 0
-( 2675 -129 -24 ) ( 2675 -129 -10 ) ( 2675 -134 -10 ) dsi_textures/cretebase 4 67 0 0.5 -0.5 134217728 0 0
-( 2795 -214 -24 ) ( 2795 -214 -10 ) ( 2800 -213 -10 ) dsi_textures/cretebase 106 68 -180 0.5 0.5 134217728 0 0
-( 2867 -192 -16 ) ( 2867 -192 -24 ) ( 2675 -251 -16 ) dsi_textures/cretebase 106 68 -180 0.5 0.5 134217728 0 0
-( 2551 8 -10 ) ( 2551 -360 -10 ) ( 2411 -360 -10 ) dsi_textures/cretebase 106 -188 -180 0.5 -0.5 134217728 0 0
-( 2871 -260 -24 ) ( 2871 -260 -16 ) ( 2679 -132 -24 ) dsi_textures/cretebase 106 68 -180 0.5 0.5 134217728 0 0
-}
-// brush 82
-{
-( 2795 -214 -10 ) ( 2795 -214 -24 ) ( 2777 -220 -24 ) dsi_textures/cretebase 96 68 -180 0.5 0.5 134217728 0 0
-( 2785 -203 -10 ) ( 2795 -203 -10 ) ( 2795 -214 -10 ) dsi_textures/cretebase 96 0 -180 0.5 -0.5 134217728 0 0
-( 2795 -214 -24 ) ( 2795 -203 -24 ) ( 2785 -203 -24 ) dsi_textures/cretebase 96 0 -180 0.5 -0.5 134217728 0 0
-( 2675 -244 -24 ) ( 2675 -244 -10 ) ( 2675 -251 -10 ) dsi_textures/cretebase 0 67 0 0.5 -0.5 134217728 0 0
-( 2675 -244 -10 ) ( 2675 -244 -24 ) ( 2787 -210 -24 ) dsi_textures/cretebase 96 68 -180 0.5 0.5 134217728 0 0
-( 2867 -192 -16 ) ( 2867 -192 -24 ) ( 2675 -251 -16 ) dsi_textures/cretebase 96 68 -180 0.5 0.5 134217728 0 0
-( 2795 -214 -24 ) ( 2795 -214 -10 ) ( 2675 -134 -24 ) dsi_textures/cretebase 96 68 -180 0.5 0.5 134217728 0 0
-}
-// brush 83
-{
-( -333 -844 176 ) ( -333 -884 176 ) ( -200 -884 176 ) dsi_textures/cretebase2 0 0 0 0.5 0.5 0 0 0
-( -200 -847 184 ) ( -200 -881 184 ) ( -208 -881 184 ) dsi_textures/cretebase2 0 0 0 0.5 0.5 0 0 0
-( -201 -849 184 ) ( -209 -849 184 ) ( -209 -849 176 ) dsi_textures/cretebase2 0 0 0 0.5 0.5 0 0 0
-( -333 -884 176 ) ( -333 -844 176 ) ( -343 -844 184 ) dsi_textures/cretebase2 0 0 0 0.5 0.5 0 0 0
-( -207 -879 184 ) ( -199 -879 184 ) ( -199 -879 176 ) dsi_textures/cretebase2 0 0 0 0.5 0.5 0 0 0
-( -165 -885 185 ) ( -165 -851 185 ) ( -165 -851 177 ) dsi_textures/cretebase2 0 0 0 0.5 0.5 0 0 0
-}
-// brush 84
-{
-( -193 -849 184 ) ( -159 -849 184 ) ( -159 -849 176 ) dsi_textures/cretebase2 0 0 0 0.5 0.5 0 0 0
-( -195 -834 184 ) ( -195 -842 184 ) ( -195 -842 176 ) dsi_textures/cretebase2 0 0 0 0.5 0.5 0 0 0
-( -200 -711 176 ) ( -160 -711 176 ) ( -160 -701 184 ) dsi_textures/cretebase2 0 0 0 0.5 0.5 0 0 0
-( -165 -842 184 ) ( -165 -834 184 ) ( -165 -834 176 ) dsi_textures/cretebase2 0 0 0 0.5 0.5 0 0 0
-( -163 -844 184 ) ( -197 -844 184 ) ( -197 -836 184 ) dsi_textures/cretebase2 0 0 0 0.5 0.5 0 0 0
-( -160 -711 176 ) ( -200 -711 176 ) ( -200 -844 176 ) dsi_textures/cretebase2 0 0 0 0.5 0.5 0 0 0
-}
-// brush 85
-{
-( -200 -1017 176 ) ( -160 -1017 176 ) ( -160 -884 176 ) dsi_textures/cretebase2 0 0 0 0.5 0.5 0 0 0
-( -197 -884 184 ) ( -163 -884 184 ) ( -163 -892 184 ) dsi_textures/cretebase2 0 0 0 0.5 0.5 0 0 0
-( -195 -885 184 ) ( -195 -893 184 ) ( -195 -893 176 ) dsi_textures/cretebase2 0 0 0 0.5 0.5 0 0 0
-( -160 -1017 176 ) ( -200 -1017 176 ) ( -200 -1027 184 ) dsi_textures/cretebase2 0 0 0 0.5 0.5 0 0 0
-( -165 -893 184 ) ( -165 -885 184 ) ( -165 -885 176 ) dsi_textures/cretebase2 0 0 0 0.5 0.5 0 0 0
-( -167 -879 184 ) ( -201 -879 184 ) ( -201 -879 176 ) dsi_textures/cretebase2 0 0 0 0.5 0.5 0 0 0
-}
-// brush 86
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 9 3 0 0 0 )
-(
-( ( -211 -864 -14 0 1.484375 ) ( -211 -864 81 0 0.7421879768 ) ( -211 -864 176 0 0 ) )
-( ( -211 -895 -14 0.2421880066 1.484375 ) ( -211 -895 81 0.2421880066 0.7421879768 ) ( -211 -895 176 0.2421880066 0 ) )
-( ( -180 -895 -14 0.484375 1.484375 ) ( -180 -895 81 0.484375 0.7421879768 ) ( -180 -895 176 0.484375 0 ) )
-( ( -149 -895 -14 0.7265629768 1.484375 ) ( -149 -895 81 0.7265629768 0.7421879768 ) ( -149 -895 176 0.7265629768 0 ) )
-( ( -149 -864 -14 0.96875 1.484375 ) ( -149 -864 81 0.96875 0.7421879768 ) ( -149 -864 176 0.96875 0 ) )
-( ( -149 -833 -14 1.2109379768 1.484375 ) ( -149 -833 81 1.2109379768 0.7421879768 ) ( -149 -833 176 1.2109379768 0 ) )
-( ( -180 -833 -14 1.453125 1.484375 ) ( -180 -833 81 1.453125 0.7421879768 ) ( -180 -833 176 1.453125 0 ) )
-( ( -211 -833 -14 1.6953129768 1.484375 ) ( -211 -833 81 1.6953129768 0.7421879768 ) ( -211 -833 176 1.6953129768 0 ) )
-( ( -211 -864 -14 1.9375 1.484375 ) ( -211 -864 81 1.9375 0.7421879768 ) ( -211 -864 176 1.9375 0 ) )
-)
-}
-}
-// brush 87
-{
-( -27 -884 176 ) ( -27 -844 176 ) ( -160 -844 176 ) dsi_textures/cretebase2 0 0 0 0.5 0.5 0 0 0
-( -160 -881 184 ) ( -160 -847 184 ) ( -152 -847 184 ) dsi_textures/cretebase2 0 0 0 0.5 0.5 0 0 0
-( -156 -879 184 ) ( -148 -879 184 ) ( -148 -879 176 ) dsi_textures/cretebase2 0 0 0 0.5 0.5 0 0 0
-( -27 -844 176 ) ( -27 -884 176 ) ( -17 -884 184 ) dsi_textures/cretebase2 0 0 0 0.5 0.5 0 0 0
-( -153 -849 184 ) ( -161 -849 184 ) ( -161 -849 176 ) dsi_textures/cretebase2 0 0 0 0.5 0.5 0 0 0
-( -165 -852 184 ) ( -165 -886 184 ) ( -165 -886 176 ) dsi_textures/cretebase2 0 0 0 0.5 0.5 0 0 0
-}
-// brush 88
-{
-( -201 83 185 ) ( -167 83 185 ) ( -167 83 177 ) dsi_textures/cretebase2 168 0 0 0.5 0.5 0 0 0
-( -195 125 184 ) ( -195 117 184 ) ( -195 117 176 ) dsi_textures/cretebase2 -163 0 -180 0.5 -0.5 0 0 0
-( -200 251 176 ) ( -160 251 176 ) ( -160 261 184 ) dsi_textures/cretebase2 -163 -168 -90 0.5 0.5 0 0 0
-( -165 119 184 ) ( -165 127 184 ) ( -165 127 176 ) dsi_textures/cretebase2 -163 0 -180 0.5 -0.5 0 0 0
-( -163 118 184 ) ( -197 118 184 ) ( -197 126 184 ) dsi_textures/cretebase2 -163 -168 -90 0.5 0.5 0 0 0
-( -160 251 176 ) ( -200 251 176 ) ( -200 118 176 ) dsi_textures/cretebase2 -163 -168 -90 0.5 0.5 0 0 0
-}
-// brush 89
-{
-( -27 78 176 ) ( -27 118 176 ) ( -160 118 176 ) dsi_textures/cretebase2 -163 -168 -90 0.5 0.5 0 0 0
-( -160 81 184 ) ( -160 115 184 ) ( -152 115 184 ) dsi_textures/cretebase2 -163 -168 -90 0.5 0.5 0 0 0
-( -158 83 184 ) ( -150 83 184 ) ( -150 83 176 ) dsi_textures/cretebase2 168 0 0 0.5 0.5 0 0 0
-( -27 118 176 ) ( -27 78 176 ) ( -17 78 184 ) dsi_textures/cretebase2 -163 -168 -90 0.5 0.5 0 0 0
-( -150 113 184 ) ( -158 113 184 ) ( -158 113 176 ) dsi_textures/cretebase2 168 0 0 0.5 0.5 0 0 0
-( -165 111 184 ) ( -165 77 184 ) ( -165 77 176 ) dsi_textures/cretebase2 -163 0 -180 0.5 -0.5 0 0 0
-}
-// brush 90
-{
-( -195 85 184 ) ( -195 119 184 ) ( -195 119 176 ) dsi_textures/cretebase2 -163 0 -180 0.5 -0.5 0 0 0
-( -209 83 184 ) ( -201 83 184 ) ( -201 83 176 ) dsi_textures/cretebase2 168 0 0 0.5 0.5 0 0 0
-( -333 78 176 ) ( -333 118 176 ) ( -343 118 184 ) dsi_textures/cretebase2 -163 -168 -90 0.5 0.5 0 0 0
-( -201 113 184 ) ( -209 113 184 ) ( -209 113 176 ) dsi_textures/cretebase2 168 0 0 0.5 0.5 0 0 0
-( -200 115 184 ) ( -200 81 184 ) ( -208 81 184 ) dsi_textures/cretebase2 -163 -168 -90 0.5 0.5 0 0 0
-( -333 118 176 ) ( -333 78 176 ) ( -200 78 176 ) dsi_textures/cretebase2 -163 -168 -90 0.5 0.5 0 0 0
-}
-// brush 91
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 9 3 0 0 0 )
-(
-( ( -180.25 129.25 -14 0 1.484375 ) ( -180.25 129.25 81 0 0.7421879768 ) ( -180.25 129.25 176 0 0 ) )
-( ( -211.25 129.25 -14 0.2421880066 1.484375 ) ( -211.25 129.25 81 0.2421880066 0.7421879768 ) ( -211.25 129.25 176 0.2421880066 0 ) )
-( ( -211.25 98.25 -14 0.484375 1.484375 ) ( -211.25 98.25 81 0.484375 0.7421879768 ) ( -211.25 98.25 176 0.484375 0 ) )
-( ( -211.25 67.25 -14 0.7265629768 1.484375 ) ( -211.25 67.25 81 0.7265629768 0.7421879768 ) ( -211.25 67.25 176 0.7265629768 0 ) )
-( ( -180.25 67.25 -14 0.96875 1.484375 ) ( -180.25 67.25 81 0.96875 0.7421879768 ) ( -180.25 67.25 176 0.96875 0 ) )
-( ( -149.25 67.25 -14 1.2109379768 1.484375 ) ( -149.25 67.25 81 1.2109379768 0.7421879768 ) ( -149.25 67.25 176 1.2109379768 0 ) )
-( ( -149.25 98.25 -14 1.453125 1.484375 ) ( -149.25 98.25 81 1.453125 0.7421879768 ) ( -149.25 98.25 176 1.453125 0 ) )
-( ( -149.25 129.25 -14 1.6953129768 1.484375 ) ( -149.25 129.25 81 1.6953129768 0.7421879768 ) ( -149.25 129.25 176 1.6953129768 0 ) )
-( ( -180.25 129.25 -14 1.9375 1.484375 ) ( -180.25 129.25 81 1.9375 0.7421879768 ) ( -180.25 129.25 176 1.9375 0 ) )
-)
-}
-}
-// brush 92
-{
-( -168 83 184 ) ( -202 83 184 ) ( -202 83 176 ) dsi_textures/cretebase2 168 0 0 0.5 0.5 0 0 0
-( -165 71 184 ) ( -165 79 184 ) ( -165 79 176 ) dsi_textures/cretebase2 -163 0 -180 0.5 -0.5 0 0 0
-( -160 -55 176 ) ( -200 -55 176 ) ( -200 -65 184 ) dsi_textures/cretebase2 -163 -168 -90 0.5 0.5 0 0 0
-( -195 74 184 ) ( -195 66 184 ) ( -195 66 176 ) dsi_textures/cretebase2 -163 0 -180 0.5 -0.5 0 0 0
-( -197 78 184 ) ( -163 78 184 ) ( -163 70 184 ) dsi_textures/cretebase2 -163 -168 -90 0.5 0.5 0 0 0
-( -200 -55 176 ) ( -160 -55 176 ) ( -160 78 176 ) dsi_textures/cretebase2 -163 -168 -90 0.5 0.5 0 0 0
-}
-// brush 93
-{
-( 2900 -55 176 ) ( 2940 -55 176 ) ( 2940 78 176 ) dsi_textures/cretebase2 -44 -14 90 0.5 0.5 0 0 0
-( 2903 78 184 ) ( 2937 78 184 ) ( 2937 70 184 ) dsi_textures/cretebase2 -44 -14 90 0.5 0.5 0 0 0
-( 2905 77 184 ) ( 2905 69 184 ) ( 2905 69 176 ) dsi_textures/cretebase2 -44 0 0 0.5 0.5 0 0 0
-( 2940 -55 176 ) ( 2900 -55 176 ) ( 2900 -65 184 ) dsi_textures/cretebase2 -44 -14 90 0.5 0.5 0 0 0
-( 2935 71 184 ) ( 2935 79 184 ) ( 2935 79 176 ) dsi_textures/cretebase2 -44 0 0 0.5 0.5 0 0 0
-( 2941 113 185 ) ( 2907 113 185 ) ( 2907 113 177 ) dsi_textures/cretebase2 14 0 -180 0.5 -0.5 0 0 0
-}
-// brush 94
-{
-( 2905 85 184 ) ( 2905 119 184 ) ( 2905 119 176 ) dsi_textures/cretebase2 -44 0 0 0.5 0.5 0 0 0
-( 2890 83 184 ) ( 2898 83 184 ) ( 2898 83 176 ) dsi_textures/cretebase2 14 0 -180 0.5 -0.5 0 0 0
-( 2767 78 176 ) ( 2767 118 176 ) ( 2757 118 184 ) dsi_textures/cretebase2 -44 -14 90 0.5 0.5 0 0 0
-( 2898 113 184 ) ( 2890 113 184 ) ( 2890 113 176 ) dsi_textures/cretebase2 14 0 -180 0.5 -0.5 0 0 0
-( 2900 115 184 ) ( 2900 81 184 ) ( 2892 81 184 ) dsi_textures/cretebase2 -44 -14 90 0.5 0.5 0 0 0
-( 2767 118 176 ) ( 2767 78 176 ) ( 2900 78 176 ) dsi_textures/cretebase2 -44 -14 90 0.5 0.5 0 0 0
-}
-// brush 95
-{
-( 3073 78 176 ) ( 3073 118 176 ) ( 2940 118 176 ) dsi_textures/cretebase2 -44 -14 90 0.5 0.5 0 0 0
-( 2940 81 184 ) ( 2940 115 184 ) ( 2948 115 184 ) dsi_textures/cretebase2 -44 -14 90 0.5 0.5 0 0 0
-( 2941 83 184 ) ( 2949 83 184 ) ( 2949 83 176 ) dsi_textures/cretebase2 14 0 -180 0.5 -0.5 0 0 0
-( 3073 118 176 ) ( 3073 78 176 ) ( 3083 78 184 ) dsi_textures/cretebase2 -44 -14 90 0.5 0.5 0 0 0
-( 2949 113 184 ) ( 2941 113 184 ) ( 2941 113 176 ) dsi_textures/cretebase2 14 0 -180 0.5 -0.5 0 0 0
-( 2935 111 184 ) ( 2935 77 184 ) ( 2935 77 176 ) dsi_textures/cretebase2 -44 0 0 0.5 0.5 0 0 0
-}
-// brush 96
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 9 3 0 0 0 )
-(
-( ( 2919.5 67.25 -14 0 1.484375 ) ( 2919.5 67.25 81 0 0.7421879768 ) ( 2919.5 67.25 176 0 0 ) )
-( ( 2950.5 67.25 -14 0.2421880066 1.484375 ) ( 2950.5 67.25 81 0.2421880066 0.7421879768 ) ( 2950.5 67.25 176 0.2421880066 0 ) )
-( ( 2950.5 98.25 -14 0.484375 1.484375 ) ( 2950.5 98.25 81 0.484375 0.7421879768 ) ( 2950.5 98.25 176 0.484375 0 ) )
-( ( 2950.5 129.25 -14 0.7265629768 1.484375 ) ( 2950.5 129.25 81 0.7265629768 0.7421879768 ) ( 2950.5 129.25 176 0.7265629768 0 ) )
-( ( 2919.5 129.25 -14 0.96875 1.484375 ) ( 2919.5 129.25 81 0.96875 0.7421879768 ) ( 2919.5 129.25 176 0.96875 0 ) )
-( ( 2888.5 129.25 -14 1.2109379768 1.484375 ) ( 2888.5 129.25 81 1.2109379768 0.7421879768 ) ( 2888.5 129.25 176 1.2109379768 0 ) )
-( ( 2888.5 98.25 -14 1.453125 1.484375 ) ( 2888.5 98.25 81 1.453125 0.7421879768 ) ( 2888.5 98.25 176 1.453125 0 ) )
-( ( 2888.5 67.25 -14 1.6953129768 1.484375 ) ( 2888.5 67.25 81 1.6953129768 0.7421879768 ) ( 2888.5 67.25 176 1.6953129768 0 ) )
-( ( 2919.5 67.25 -14 1.9375 1.484375 ) ( 2919.5 67.25 81 1.9375 0.7421879768 ) ( 2919.5 67.25 176 1.9375 0 ) )
-)
-}
-}
-// brush 97
-{
-( 2940 251 176 ) ( 2900 251 176 ) ( 2900 118 176 ) dsi_textures/cretebase2 -44 -14 90 0.5 0.5 0 0 0
-( 2937 118 184 ) ( 2903 118 184 ) ( 2903 126 184 ) dsi_textures/cretebase2 -44 -14 90 0.5 0.5 0 0 0
-( 2935 122 184 ) ( 2935 130 184 ) ( 2935 130 176 ) dsi_textures/cretebase2 -44 0 0 0.5 0.5 0 0 0
-( 2900 251 176 ) ( 2940 251 176 ) ( 2940 261 184 ) dsi_textures/cretebase2 -44 -14 90 0.5 0.5 0 0 0
-( 2905 125 184 ) ( 2905 117 184 ) ( 2905 117 176 ) dsi_textures/cretebase2 -44 0 0 0.5 0.5 0 0 0
-( 2908 113 184 ) ( 2942 113 184 ) ( 2942 113 176 ) dsi_textures/cretebase2 14 0 -180 0.5 -0.5 0 0 0
-}
-// brush 98
-{
-( 2941 -849 185 ) ( 2907 -849 185 ) ( 2907 -849 177 ) dsi_textures/cretebase2 14 0 -180 0.5 -0.5 0 0 0
-( 2935 -891 184 ) ( 2935 -883 184 ) ( 2935 -883 176 ) dsi_textures/cretebase2 88 0 0 0.5 0.5 0 0 0
-( 2940 -1017 176 ) ( 2900 -1017 176 ) ( 2900 -1027 184 ) dsi_textures/cretebase2 88 -14 90 0.5 0.5 0 0 0
-( 2905 -885 184 ) ( 2905 -893 184 ) ( 2905 -893 176 ) dsi_textures/cretebase2 88 0 0 0.5 0.5 0 0 0
-( 2903 -884 184 ) ( 2937 -884 184 ) ( 2937 -892 184 ) dsi_textures/cretebase2 88 -14 90 0.5 0.5 0 0 0
-( 2900 -1017 176 ) ( 2940 -1017 176 ) ( 2940 -884 176 ) dsi_textures/cretebase2 88 -14 90 0.5 0.5 0 0 0
-}
-// brush 99
-{
-( 2767 -844 176 ) ( 2767 -884 176 ) ( 2900 -884 176 ) dsi_textures/cretebase2 88 -14 90 0.5 0.5 0 0 0
-( 2900 -847 184 ) ( 2900 -881 184 ) ( 2892 -881 184 ) dsi_textures/cretebase2 88 -14 90 0.5 0.5 0 0 0
-( 2898 -849 184 ) ( 2890 -849 184 ) ( 2890 -849 176 ) dsi_textures/cretebase2 14 0 -180 0.5 -0.5 0 0 0
-( 2767 -884 176 ) ( 2767 -844 176 ) ( 2757 -844 184 ) dsi_textures/cretebase2 88 -14 90 0.5 0.5 0 0 0
-( 2890 -879 184 ) ( 2898 -879 184 ) ( 2898 -879 176 ) dsi_textures/cretebase2 14 0 -180 0.5 -0.5 0 0 0
-( 2905 -877 184 ) ( 2905 -843 184 ) ( 2905 -843 176 ) dsi_textures/cretebase2 88 0 0 0.5 0.5 0 0 0
-}
-// brush 100
-{
-( 2935 -851 184 ) ( 2935 -885 184 ) ( 2935 -885 176 ) dsi_textures/cretebase2 88 0 0 0.5 0.5 0 0 0
-( 2949 -849 184 ) ( 2941 -849 184 ) ( 2941 -849 176 ) dsi_textures/cretebase2 14 0 -180 0.5 -0.5 0 0 0
-( 3073 -844 176 ) ( 3073 -884 176 ) ( 3083 -884 184 ) dsi_textures/cretebase2 88 -14 90 0.5 0.5 0 0 0
-( 2941 -879 184 ) ( 2949 -879 184 ) ( 2949 -879 176 ) dsi_textures/cretebase2 14 0 -180 0.5 -0.5 0 0 0
-( 2940 -881 184 ) ( 2940 -847 184 ) ( 2948 -847 184 ) dsi_textures/cretebase2 88 -14 90 0.5 0.5 0 0 0
-( 3073 -884 176 ) ( 3073 -844 176 ) ( 2940 -844 176 ) dsi_textures/cretebase2 88 -14 90 0.5 0.5 0 0 0
-}
-// brush 101
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 9 3 0 0 0 )
-(
-( ( 2919.5 -895 -14 0 1.484375 ) ( 2919.5 -895 81 0 0.7421879768 ) ( 2919.5 -895 176 0 0 ) )
-( ( 2950.5 -895 -14 0.2421880066 1.484375 ) ( 2950.5 -895 81 0.2421880066 0.7421879768 ) ( 2950.5 -895 176 0.2421880066 0 ) )
-( ( 2950.5 -864 -14 0.484375 1.484375 ) ( 2950.5 -864 81 0.484375 0.7421879768 ) ( 2950.5 -864 176 0.484375 0 ) )
-( ( 2950.5 -833 -14 0.7265629768 1.484375 ) ( 2950.5 -833 81 0.7265629768 0.7421879768 ) ( 2950.5 -833 176 0.7265629768 0 ) )
-( ( 2919.5 -833 -14 0.96875 1.484375 ) ( 2919.5 -833 81 0.96875 0.7421879768 ) ( 2919.5 -833 176 0.96875 0 ) )
-( ( 2888.5 -833 -14 1.2109379768 1.484375 ) ( 2888.5 -833 81 1.2109379768 0.7421879768 ) ( 2888.5 -833 176 1.2109379768 0 ) )
-( ( 2888.5 -864 -14 1.453125 1.484375 ) ( 2888.5 -864 81 1.453125 0.7421879768 ) ( 2888.5 -864 176 1.453125 0 ) )
-( ( 2888.5 -895 -14 1.6953129768 1.484375 ) ( 2888.5 -895 81 1.6953129768 0.7421879768 ) ( 2888.5 -895 176 1.6953129768 0 ) )
-( ( 2919.5 -895 -14 1.9375 1.484375 ) ( 2919.5 -895 81 1.9375 0.7421879768 ) ( 2919.5 -895 176 1.9375 0 ) )
-)
-}
-}
-// brush 102
-{
-( 2908 -849 184 ) ( 2942 -849 184 ) ( 2942 -849 176 ) dsi_textures/cretebase2 14 0 -180 0.5 -0.5 0 0 0
-( 2905 -837 184 ) ( 2905 -845 184 ) ( 2905 -845 176 ) dsi_textures/cretebase2 88 0 0 0.5 0.5 0 0 0
-( 2900 -711 176 ) ( 2940 -711 176 ) ( 2940 -701 184 ) dsi_textures/cretebase2 88 -14 90 0.5 0.5 0 0 0
-( 2935 -840 184 ) ( 2935 -832 184 ) ( 2935 -832 176 ) dsi_textures/cretebase2 88 0 0 0.5 0.5 0 0 0
-( 2937 -844 184 ) ( 2903 -844 184 ) ( 2903 -836 184 ) dsi_textures/cretebase2 88 -14 90 0.5 0.5 0 0 0
-( 2940 -711 176 ) ( 2900 -711 176 ) ( 2900 -844 176 ) dsi_textures/cretebase2 88 -14 90 0.5 0.5 0 0 0
-}
-// brush 103
-{
-( 352 -1432 -648 ) ( 352 664 -648 ) ( 344 664 -648 ) common/hint 0 0 0 0.5 0.5 0 15 0
-( 904 -1432 656 ) ( 904 664 656 ) ( 912 664 656 ) common/hint 0 0 0 0.5 0.5 0 15 0
-( 672 -1432 8 ) ( 680 -1432 8 ) ( 680 -1432 0 ) common/hint 0 0 0 0.5 0.5 0 15 0
-( 912 -1432 656 ) ( 912 664 656 ) ( 352 664 -648 ) common/hint 0 0 0 0.5 0.5 0 15 0
-( 640 664 8 ) ( 632 664 8 ) ( 632 664 0 ) common/hint 0 0 0 0.5 0.5 0 15 0
-( 904 664 656 ) ( 904 -1432 656 ) ( 344 -1432 -648 ) common/hint 0 0 0 0.5 0.5 0 15 0
-}
-// brush 104
-{
-( 2696 664 -648 ) ( 2696 -1432 -648 ) ( 1672 -1432 656 ) common/hint 0 0 -180 0.5 -0.5 0 15 0
-( 1936 -1432 8 ) ( 1944 -1432 8 ) ( 1944 -1432 0 ) common/hint -32 0 -180 0.5 -0.5 0 15 0
-( 2688 -1432 -648 ) ( 2688 664 -648 ) ( 1664 664 656 ) common/hint 0 0 -180 0.5 -0.5 0 15 0
-( 1904 664 8 ) ( 1896 664 8 ) ( 1896 664 0 ) common/hint -32 0 -180 0.5 -0.5 0 15 0
-( 1672 664 656 ) ( 1672 -1432 656 ) ( 1664 -1432 656 ) common/hint -32 -63 -180 0.5 0.5 0 15 0
-( 2688 664 -648 ) ( 2688 -1432 -648 ) ( 2696 -1432 -648 ) common/hint -32 -63 -180 0.5 0.5 0 15 0
-}
-// brush 105
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 9 3 0 0 0 )
-(
-( ( -639 -779 142 0 0.3174769878 ) ( -640 -779 127.4393920898 0 0.1961310059 ) ( -622 -779 111 0 0 ) )
-( ( -639 -776 142 0.0234379992 0.3174769878 ) ( -640 -776 127.4393920898 0.0234379992 0.1961310059 ) ( -622 -779 111 0.0234379992 0 ) )
-( ( -636 -776 142 0.046875 0.3174769878 ) ( -637 -776 127.4393920898 0.046875 0.1961310059 ) ( -622 -779 111 0.046875 0 ) )
-( ( -633 -776 142 0.0703129992 0.3174769878 ) ( -634 -776 127.4393920898 0.0703129992 0.1961310059 ) ( -622 -779 111 0.0703129992 0 ) )
-( ( -633 -779 142 0.09375 0.3174769878 ) ( -634 -779 127.4393920898 0.09375 0.1961310059 ) ( -622 -779 111 0.09375 0 ) )
-( ( -633 -782 142 0.1171879992 0.3174769878 ) ( -634 -782 127.4393920898 0.1171879992 0.1961310059 ) ( -622 -779 111 0.1171879992 0 ) )
-( ( -636 -782 142 0.140625 0.3174769878 ) ( -637 -782 127.4393920898 0.140625 0.1961310059 ) ( -622 -779 111 0.140625 0 ) )
-( ( -639 -782 142 0.1640630066 0.3174769878 ) ( -640 -782 127.4393920898 0.1640630066 0.1961310059 ) ( -622 -779 111 0.1640630066 0 ) )
-( ( -639 -779 142 0.1875 0.3174769878 ) ( -640 -779 127.4393920898 0.1875 0.1961310059 ) ( -622 -779 111 0.1875 0 ) )
-)
-}
-}
-// brush 106
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 9 3 0 0 0 )
-(
-( ( -636.9221191406 -833.1134033203 142 0 0.3174769878 ) ( -637.9124755859 -833.2526245117 127.4393920898 0 0.1961320043 ) ( -620.0875244141 -830.7473754883 111 0 0 ) )
-( ( -637.3397216797 -830.142578125 142 0.0234379992 0.3174769878 ) ( -638.3298950195 -830.2817382812 127.4393920898 0.0234379992 0.1961320043 ) ( -620.0875244141 -830.7473754883 111 0.0234379992 0 ) )
-( ( -634.3688354492 -829.7250366211 142 0.0468759984 0.3174769878 ) ( -635.3591308594 -829.8643188477 127.4393920898 0.0468759984 0.1961320043 ) ( -620.0875244141 -830.7473754883 111 0.0468759984 0 ) )
-( ( -631.3980712891 -829.307434082 142 0.0703129992 0.3174769878 ) ( -632.3883666992 -829.4466552734 127.4393920898 0.0703129992 0.1961320043 ) ( -620.0875244141 -830.7473754883 111 0.0703129992 0 ) )
-( ( -630.98046875 -832.2783203125 142 0.0937509984 0.3174769878 ) ( -631.9709472656 -832.4175415039 127.4393920898 0.0937509984 0.1961320043 ) ( -620.0875244141 -830.7473754883 111 0.0937509984 0 ) )
-( ( -630.5629882812 -835.2490844727 142 0.1171889976 0.3174769878 ) ( -631.5533447266 -835.3883666992 127.4393920898 0.1171889976 0.1961320043 ) ( -620.0875244141 -830.7473754883 111 0.1171889976 0 ) )
-( ( -633.5338745117 -835.6666870117 142 0.1406269968 0.3174769878 ) ( -634.5241088867 -835.8059082031 127.4393920898 0.1406269968 0.1961320043 ) ( -620.0875244141 -830.7473754883 111 0.1406269968 0 ) )
-( ( -636.5046386719 -836.0841674805 142 0.164064005 0.3174769878 ) ( -637.494934082 -836.2233886719 127.4393920898 0.164064005 0.1961320043 ) ( -620.0875244141 -830.7473754883 111 0.164064005 0 ) )
-( ( -636.9221191406 -833.1134033203 142 0.1875009984 0.3174769878 ) ( -637.9124755859 -833.2526245117 127.4393920898 0.1875009984 0.1961320043 ) ( -620.0875244141 -830.7473754883 111 0.1875009984 0 ) )
-)
-}
-}
-// brush 107
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 9 3 0 0 0 )
-(
-( ( -626.8145751953 -899.9381713867 142 0 0.3174769878 ) ( -627.7849731445 -900.1801757812 127.4393920898 0 0.1961320043 ) ( -610.3195800781 -895.825378418 111 0 0 ) )
-( ( -627.5403442383 -897.0272216797 142 0.0234379992 0.3174769878 ) ( -628.5106201172 -897.2691040039 127.4393920898 0.0234379992 0.1961320043 ) ( -610.3195800781 -895.825378418 111 0.0234379992 0 ) )
-( ( -624.6295166016 -896.3013916016 142 0.046875 0.3174769878 ) ( -625.5998535156 -896.5435180664 127.4393920898 0.046875 0.1961320043 ) ( -610.3195800781 -895.825378418 111 0.046875 0 ) )
-( ( -621.7186279297 -895.5755615234 142 0.0703129992 0.3174769878 ) ( -622.6889038086 -895.8174438477 127.4393920898 0.0703129992 0.1961320043 ) ( -610.3195800781 -895.825378418 111 0.0703129992 0 ) )
-( ( -620.9928588867 -898.4866333008 142 0.0937519968 0.3174769878 ) ( -621.9632568359 -898.7285766602 127.4393920898 0.0937519968 0.1961320043 ) ( -610.3195800781 -895.825378418 111 0.0937519968 0 ) )
-( ( -620.2670288086 -901.3973999023 142 0.1171879992 0.3174769878 ) ( -621.2374267578 -901.6394042969 127.4393920898 0.1171879992 0.1961320043 ) ( -610.3195800781 -895.825378418 111 0.1171879992 0 ) )
-( ( -623.1780395508 -902.1232910156 142 0.1406269968 0.3174769878 ) ( -624.1483764648 -902.365234375 127.4393920898 0.1406269968 0.1961320043 ) ( -610.3195800781 -895.825378418 111 0.1406269968 0 ) )
-( ( -626.0888061523 -902.8489379883 142 0.1640630066 0.3174769878 ) ( -627.0591430664 -903.0909423828 127.4393920898 0.1640630066 0.1961320043 ) ( -610.3195800781 -895.825378418 111 0.1640630066 0 ) )
-( ( -626.8145751953 -899.9381713867 142 0.1875 0.3174769878 ) ( -627.7849731445 -900.1801757812 127.4393920898 0.1875 0.1961320043 ) ( -610.3195800781 -895.825378418 111 0.1875 0 ) )
-)
-}
-}
-// brush 108
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 9 3 0 0 0 )
-(
-( ( -610.7286987305 -960.7003173828 142 0 0.3174769878 ) ( -611.6684570312 -961.0424804688 127.4393920898 0 0.1961320043 ) ( -594.7539672852 -954.8858642578 111 0 0 ) )
-( ( -611.7547607422 -957.8812255859 142 0.0234379992 0.3174769878 ) ( -612.6943969727 -958.2232055664 127.4393920898 0.0234379992 0.1961320043 ) ( -594.7539672852 -954.8858642578 111 0.0234379992 0 ) )
-( ( -608.9357910156 -956.8551025391 142 0.0468740016 0.3174769878 ) ( -609.8754272461 -957.1973266602 127.4393920898 0.0468740016 0.1961320043 ) ( -594.7539672852 -954.8858642578 111 0.0468740016 0 ) )
-( ( -606.1166381836 -955.8289794922 142 0.0703129992 0.3174769878 ) ( -607.0563354492 -956.1709594727 127.4393920898 0.0703129992 0.1961320043 ) ( -594.7539672852 -954.8858642578 111 0.0703129992 0 ) )
-( ( -605.090637207 -958.6481933594 142 0.0937509984 0.3174769878 ) ( -606.0303955078 -958.9902954102 127.4393920898 0.0937509984 0.1961320043 ) ( -594.7539672852 -954.8858642578 111 0.0937509984 0 ) )
-( ( -604.0645141602 -961.4671630859 142 0.1171879992 0.3174769878 ) ( -605.0042114258 -961.8093261719 127.4393920898 0.1171879992 0.1961320043 ) ( -594.7539672852 -954.8858642578 111 0.1171879992 0 ) )
-( ( -606.8837890625 -962.4934082031 142 0.1406269968 0.3174769878 ) ( -607.8233642578 -962.8354492188 127.4393920898 0.1406269968 0.1961320043 ) ( -594.7539672852 -954.8858642578 111 0.1406269968 0 ) )
-( ( -609.7025756836 -963.5193481445 142 0.1640619934 0.3174769878 ) ( -610.6423950195 -963.8614501953 127.4393920898 0.1640619934 0.1961320043 ) ( -594.7539672852 -954.8858642578 111 0.1640619934 0 ) )
-( ( -610.7286987305 -960.7003173828 142 0.1875 0.3174769878 ) ( -611.6684570312 -961.0424804688 127.4393920898 0.1875 0.1961320043 ) ( -594.7539672852 -954.8858642578 111 0.1875 0 ) )
-)
-}
-}
-// brush 109
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 9 3 0 0 0 )
-(
-( ( -588.5322875977 -1017.5113525391 142 0 0.3174780011 ) ( -589.4234008789 -1017.9655151367 127.4393920898 0 0.1961320043 ) ( -573.3851928711 -1009.7935180664 111 0 0 ) )
-( ( -589.8942260742 -1014.8383789062 142 0.0234370008 0.3174780011 ) ( -590.78515625 -1015.2923583984 127.4393920898 0.0234370008 0.1961320043 ) ( -573.3851928711 -1009.7935180664 111 0.0234370008 0 ) )
-( ( -587.2213745117 -1013.4763183594 142 0.0468740016 0.3174780011 ) ( -588.1122436523 -1013.9305419922 127.4393920898 0.0468740016 0.1961320043 ) ( -573.3851928711 -1009.7935180664 111 0.0468740016 0 ) )
-( ( -584.5482177734 -1012.1143188477 142 0.0703120008 0.3174780011 ) ( -585.4392700195 -1012.5682373047 127.4393920898 0.0703120008 0.1961320043 ) ( -573.3851928711 -1009.7935180664 111 0.0703120008 0 ) )
-( ( -583.186340332 -1014.7874145508 142 0.09375 0.3174780011 ) ( -584.0773925781 -1015.2415161133 127.4393920898 0.09375 0.1961320043 ) ( -573.3851928711 -1009.7935180664 111 0.09375 0 ) )
-( ( -581.8242797852 -1017.4603881836 142 0.1171870008 0.3174780011 ) ( -582.7152099609 -1017.9144897461 127.4393920898 0.1171870008 0.1961320043 ) ( -573.3851928711 -1009.7935180664 111 0.1171870008 0 ) )
-( ( -584.4974975586 -1018.8225097656 142 0.1406269968 0.3174780011 ) ( -585.3884277344 -1019.276550293 127.4393920898 0.1406269968 0.1961320043 ) ( -573.3851928711 -1009.7935180664 111 0.1406269968 0 ) )
-( ( -587.1701660156 -1020.1843261719 142 0.164060995 0.3174780011 ) ( -588.0614013672 -1020.6384277344 127.4393920898 0.164060995 0.1961320043 ) ( -573.3851928711 -1009.7935180664 111 0.164060995 0 ) )
-( ( -588.5322875977 -1017.5113525391 142 0.1874990016 0.3174780011 ) ( -589.4234008789 -1017.9655151367 127.4393920898 0.1874990016 0.1961320043 ) ( -573.3851928711 -1009.7935180664 111 0.1874990016 0 ) )
-)
-}
-}
-// brush 110
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 9 3 0 0 0 )
-(
-( ( -559.1888427734 -1070.4008789062 142 0 0.3174780011 ) ( -560.0079956055 -1070.9747314453 127.4393920898 0 0.1961330026 ) ( -545.2631835938 -1060.6499023438 111 0 0 ) )
-( ( -560.9094238281 -1067.943359375 142 0.0234370008 0.3174780011 ) ( -561.7285766602 -1068.5169677734 127.4393920898 0.0234370008 0.1961330026 ) ( -545.2631835938 -1060.6499023438 111 0.0234370008 0 ) )
-( ( -558.4522094727 -1066.22265625 142 0.0468729995 0.3174780011 ) ( -559.2711791992 -1066.7965087891 127.4393920898 0.0468729995 0.1961330026 ) ( -545.2631835938 -1060.6499023438 111 0.0468729995 0 ) )
-( ( -555.9946289062 -1064.5018310547 142 0.0703120008 0.3174780011 ) ( -556.8139038086 -1065.0754394531 127.4393920898 0.0703120008 0.1961330026 ) ( -545.2631835938 -1060.6499023438 111 0.0703120008 0 ) )
-( ( -554.2740478516 -1066.9594726562 142 0.09375 0.3174780011 ) ( -555.0932006836 -1067.5329589844 127.4393920898 0.09375 0.1961330026 ) ( -545.2631835938 -1060.6499023438 111 0.09375 0 ) )
-( ( -552.5532226562 -1069.4169921875 142 0.1171879992 0.3174780011 ) ( -553.3721923828 -1069.9906005859 127.4393920898 0.1171879992 0.1961330026 ) ( -545.2631835938 -1060.6499023438 111 0.1171879992 0 ) )
-( ( -555.0108642578 -1071.1378173828 142 0.1406269968 0.3174780011 ) ( -555.8298950195 -1071.7114257812 127.4393920898 0.1406269968 0.1961330026 ) ( -545.2631835938 -1060.6499023438 111 0.1406269968 0 ) )
-( ( -557.467956543 -1072.8581542969 142 0.164060995 0.3174780011 ) ( -558.2873535156 -1073.4320068359 127.4393920898 0.164060995 0.1961330026 ) ( -545.2631835938 -1060.6499023438 111 0.164060995 0 ) )
-( ( -559.1888427734 -1070.4008789062 142 0.1874980032 0.3174780011 ) ( -560.0079956055 -1070.9747314453 127.4393920898 0.1874980032 0.1961330026 ) ( -545.2631835938 -1060.6499023438 111 0.1874980032 0 ) )
-)
-}
-}
-// brush 111
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 9 3 0 0 0 )
-(
-( ( -480.201965332 -1161.6066894531 142 0 0.3174780011 ) ( -480.8579406738 -1162.3614501953 127.4393920898 0 0.1961330026 ) ( -469.0489501953 -1148.7762451172 111 0 0 ) )
-( ( -482.4659423828 -1159.6383056641 142 0.0234379992 0.3174780011 ) ( -483.1220703125 -1160.3929443359 127.4393920898 0.0234379992 0.1961330026 ) ( -469.0489501953 -1148.7762451172 111 0.0234379992 0 ) )
-( ( -480.4978637695 -1157.3742675781 142 0.0468740016 0.3174780011 ) ( -481.1539306641 -1158.12890625 127.4393920898 0.0468740016 0.1961330026 ) ( -469.0489501953 -1148.7762451172 111 0.0468740016 0 ) )
-( ( -478.5296936035 -1155.1099853516 142 0.0703129992 0.3174780011 ) ( -479.1858825684 -1155.8646240234 127.4393920898 0.0703129992 0.1961330026 ) ( -469.0489501953 -1148.7762451172 111 0.0703129992 0 ) )
-( ( -476.2656860352 -1157.0784912109 142 0.0937509984 0.3174780011 ) ( -476.9218444824 -1157.8330078125 127.4393920898 0.0937509984 0.1961330026 ) ( -469.0489501953 -1148.7762451172 111 0.0937509984 0 ) )
-( ( -474.0014343262 -1159.0466308594 142 0.1171889976 0.3174780011 ) ( -474.6572875977 -1159.8015136719 127.4393920898 0.1171889976 0.1961330026 ) ( -469.0489501953 -1148.7762451172 111 0.1171889976 0 ) )
-( ( -475.969909668 -1161.3106689453 142 0.1406279951 0.3174780011 ) ( -476.625793457 -1162.0654296875 127.4393920898 0.1406279951 0.1961330026 ) ( -469.0489501953 -1148.7762451172 111 0.1406279951 0 ) )
-( ( -477.9378356934 -1163.5744628906 142 0.1640619934 0.3174780011 ) ( -478.5940246582 -1164.3293457031 127.4393920898 0.1640619934 0.1961330026 ) ( -469.0489501953 -1148.7762451172 111 0.1640619934 0 ) )
-( ( -480.201965332 -1161.6066894531 142 0.1874970049 0.3174780011 ) ( -480.8579406738 -1162.3614501953 127.4393920898 0.1874970049 0.1961330026 ) ( -469.0489501953 -1148.7762451172 111 0.1874970049 0 ) )
-)
-}
-}
-// brush 112
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 9 3 0 0 0 )
-(
-( ( -431.201965332 -1199.6066894531 142 0 0.3174780011 ) ( -431.8579406738 -1200.3614501953 127.4393920898 0 0.1961330026 ) ( -420.0489501953 -1186.7762451172 111 0 0 ) )
-( ( -433.4659423828 -1197.6383056641 142 0.0234379992 0.3174780011 ) ( -434.1220703125 -1198.3929443359 127.4393920898 0.0234379992 0.1961330026 ) ( -420.0489501953 -1186.7762451172 111 0.0234379992 0 ) )
-( ( -431.4978637695 -1195.3742675781 142 0.0468740016 0.3174780011 ) ( -432.1539306641 -1196.12890625 127.4393920898 0.0468740016 0.1961330026 ) ( -420.0489501953 -1186.7762451172 111 0.0468740016 0 ) )
-( ( -429.5296936035 -1193.1099853516 142 0.0703129992 0.3174780011 ) ( -430.1858825684 -1193.8646240234 127.4393920898 0.0703129992 0.1961330026 ) ( -420.0489501953 -1186.7762451172 111 0.0703129992 0 ) )
-( ( -427.2656860352 -1195.0784912109 142 0.0937509984 0.3174780011 ) ( -427.9218444824 -1195.8330078125 127.4393920898 0.0937509984 0.1961330026 ) ( -420.0489501953 -1186.7762451172 111 0.0937509984 0 ) )
-( ( -425.0014343262 -1197.0466308594 142 0.1171889976 0.3174780011 ) ( -425.6572875977 -1197.8015136719 127.4393920898 0.1171889976 0.1961330026 ) ( -420.0489501953 -1186.7762451172 111 0.1171889976 0 ) )
-( ( -426.969909668 -1199.3106689453 142 0.1406279951 0.3174780011 ) ( -427.625793457 -1200.0654296875 127.4393920898 0.1406279951 0.1961330026 ) ( -420.0489501953 -1186.7762451172 111 0.1406279951 0 ) )
-( ( -428.9378356934 -1201.5744628906 142 0.1640619934 0.3174780011 ) ( -429.5940246582 -1202.3293457031 127.4393920898 0.1640619934 0.1961330026 ) ( -420.0489501953 -1186.7762451172 111 0.1640619934 0 ) )
-( ( -431.201965332 -1199.6066894531 142 0.1874970049 0.3174780011 ) ( -431.8579406738 -1200.3614501953 127.4393920898 0.1874970049 0.1961330026 ) ( -420.0489501953 -1186.7762451172 111 0.1874970049 0 ) )
-)
-}
-}
-// brush 113
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 9 3 0 0 0 )
-(
-( ( -375.251373291 -1234.2585449219 142 0 0.3174780011 ) ( -375.7663269043 -1235.1158447266 127.4393920898 0 0.1961330026 ) ( -366.4957885742 -1219.6864013672 111 0 0 ) )
-( ( -377.8227539062 -1232.7135009766 142 0.0234360006 0.3174780011 ) ( -378.337890625 -1233.5704345703 127.4393920898 0.0234360006 0.1961330026 ) ( -366.4957885742 -1219.6864013672 111 0.0234360006 0 ) )
-( ( -376.2777099609 -1230.1420898438 142 0.0468729995 0.3174780011 ) ( -376.7928161621 -1230.9991455078 127.4393920898 0.0468729995 0.1961330026 ) ( -366.4957885742 -1219.6864013672 111 0.0468729995 0 ) )
-( ( -374.7326049805 -1227.5704345703 142 0.0703120008 0.3174780011 ) ( -375.2478027344 -1228.4273681641 127.4393920898 0.0703120008 0.1961330026 ) ( -366.4957885742 -1219.6864013672 111 0.0703120008 0 ) )
-( ( -372.1611938477 -1229.1157226562 142 0.0937490016 0.3174780011 ) ( -372.6763305664 -1229.9727783203 127.4393920898 0.0937490016 0.1961330026 ) ( -366.4957885742 -1219.6864013672 111 0.0937490016 0 ) )
-( ( -369.5895385742 -1230.6610107422 142 0.1171879992 0.3174780011 ) ( -370.1043701172 -1231.5183105469 127.4393920898 0.1171879992 0.1961330026 ) ( -366.4957885742 -1219.6864013672 111 0.1171879992 0 ) )
-( ( -371.1349487305 -1233.2325439453 142 0.1406269968 0.3174780011 ) ( -371.649810791 -1234.08984375 127.4393920898 0.1406269968 0.1961330026 ) ( -366.4957885742 -1219.6864013672 111 0.1406269968 0 ) )
-( ( -372.6799621582 -1235.8035888672 142 0.164060995 0.3174780011 ) ( -373.1950683594 -1236.6608886719 127.4393920898 0.164060995 0.1961330026 ) ( -366.4957885742 -1219.6864013672 111 0.164060995 0 ) )
-( ( -375.251373291 -1234.2585449219 142 0.1874980032 0.3174780011 ) ( -375.7663269043 -1235.1158447266 127.4393920898 0.1874980032 0.1961330026 ) ( -366.4957885742 -1219.6864013672 111 0.1874980032 0 ) )
-)
-}
-}
-// brush 114
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 9 3 0 0 0 )
-(
-( ( -314.251373291 -1263.2585449219 142 0 0.3174780011 ) ( -314.7663269043 -1264.1158447266 127.4393920898 0 0.1961330026 ) ( -305.4957885742 -1248.6864013672 111 0 0 ) )
-( ( -316.8227539062 -1261.7135009766 142 0.0234360006 0.3174780011 ) ( -317.337890625 -1262.5704345703 127.4393920898 0.0234360006 0.1961330026 ) ( -305.4957885742 -1248.6864013672 111 0.0234360006 0 ) )
-( ( -315.2777099609 -1259.1420898438 142 0.0468729995 0.3174780011 ) ( -315.7928161621 -1259.9991455078 127.4393920898 0.0468729995 0.1961330026 ) ( -305.4957885742 -1248.6864013672 111 0.0468729995 0 ) )
-( ( -313.7326049805 -1256.5704345703 142 0.0703120008 0.3174780011 ) ( -314.2478027344 -1257.4273681641 127.4393920898 0.0703120008 0.1961330026 ) ( -305.4957885742 -1248.6864013672 111 0.0703120008 0 ) )
-( ( -311.1611938477 -1258.1157226562 142 0.0937490016 0.3174780011 ) ( -311.6763305664 -1258.9727783203 127.4393920898 0.0937490016 0.1961330026 ) ( -305.4957885742 -1248.6864013672 111 0.0937490016 0 ) )
-( ( -308.5895385742 -1259.6610107422 142 0.1171879992 0.3174780011 ) ( -309.1043701172 -1260.5183105469 127.4393920898 0.1171879992 0.1961330026 ) ( -305.4957885742 -1248.6864013672 111 0.1171879992 0 ) )
-( ( -310.1349487305 -1262.2325439453 142 0.1406269968 0.3174780011 ) ( -310.649810791 -1263.08984375 127.4393920898 0.1406269968 0.1961330026 ) ( -305.4957885742 -1248.6864013672 111 0.1406269968 0 ) )
-( ( -311.6799621582 -1264.8035888672 142 0.164060995 0.3174780011 ) ( -312.1950683594 -1265.6608886719 127.4393920898 0.164060995 0.1961330026 ) ( -305.4957885742 -1248.6864013672 111 0.164060995 0 ) )
-( ( -314.251373291 -1263.2585449219 142 0.1874980032 0.3174780011 ) ( -314.7663269043 -1264.1158447266 127.4393920898 0.1874980032 0.1961330026 ) ( -305.4957885742 -1248.6864013672 111 0.1874980032 0 ) )
-)
-}
-}
-// brush 115
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 9 3 0 0 0 )
-(
-( ( -247.945526123 -1287.4208984375 142 0 0.3174790144 ) ( -248.4149169922 -1288.3039550781 127.4393920898 0 0.1961330026 ) ( -239.9645996094 -1272.4104003906 111 0 0 ) )
-( ( -250.5942687988 -1286.0123291016 142 0.0234370008 0.3174790144 ) ( -251.0638427734 -1286.8952636719 127.4393920898 0.0234370008 0.1961330026 ) ( -239.9645996094 -1272.4104003906 111 0.0234370008 0 ) )
-( ( -249.1858978271 -1283.3637695312 142 0.0468729995 0.3174790144 ) ( -249.655456543 -1284.2465820312 127.4393920898 0.0468729995 0.1961330026 ) ( -239.9645996094 -1272.4104003906 111 0.0468729995 0 ) )
-( ( -247.7775115967 -1280.7147216797 142 0.0703120008 0.3174790144 ) ( -248.2471618652 -1281.5972900391 127.4393920898 0.0703120008 0.1961330026 ) ( -239.9645996094 -1272.4104003906 111 0.0703120008 0 ) )
-( ( -245.1287384033 -1282.1232910156 142 0.0937490016 0.3174790144 ) ( -245.5983276367 -1283.0061035156 127.4393920898 0.0937490016 0.1961330026 ) ( -239.9645996094 -1272.4104003906 111 0.0937490016 0 ) )
-( ( -242.4797363281 -1283.5318603516 142 0.1171879992 0.3174790144 ) ( -242.9490203857 -1284.4149169922 127.4393920898 0.1171879992 0.1961330026 ) ( -239.9645996094 -1272.4104003906 111 0.1171879992 0 ) )
-( ( -243.888458252 -1286.1807861328 142 0.1406279951 0.3174790144 ) ( -244.3577423096 -1287.0638427734 127.4393920898 0.1406279951 0.1961330026 ) ( -239.9645996094 -1272.4104003906 111 0.1406279951 0 ) )
-( ( -245.2967987061 -1288.8292236328 142 0.1640619934 0.3174790144 ) ( -245.7663269043 -1289.7122802734 127.4393920898 0.1640619934 0.1961330026 ) ( -239.9645996094 -1272.4104003906 111 0.1640619934 0 ) )
-( ( -247.945526123 -1287.4208984375 142 0.1874980032 0.3174790144 ) ( -248.4149169922 -1288.3039550781 127.4393920898 0.1874980032 0.1961330026 ) ( -239.9645996094 -1272.4104003906 111 0.1874980032 0 ) )
-)
-}
-}
-// brush 116
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 9 3 0 0 0 )
-(
-( ( -172.1447906494 -1307.6711425781 142 0 0.3174790144 ) ( -172.5030670166 -1308.6048583984 127.4393920898 0 0.196134001 ) ( -166.0526733398 -1291.7998046875 111 0 0 ) )
-( ( -174.9454498291 -1306.595703125 142 0.0234379992 0.3174790144 ) ( -175.3039245605 -1307.5294189453 127.4393920898 0.0234379992 0.196134001 ) ( -166.0526733398 -1291.7998046875 111 0.0234379992 0 ) )
-( ( -173.8703613281 -1303.7952880859 142 0.0468729995 0.3174790144 ) ( -174.228805542 -1304.7288818359 127.4393920898 0.0468729995 0.196134001 ) ( -166.0526733398 -1291.7998046875 111 0.0468729995 0 ) )
-( ( -172.7953033447 -1300.9945068359 142 0.0703110024 0.3174790144 ) ( -173.1538696289 -1301.927734375 127.4393920898 0.0703110024 0.196134001 ) ( -166.0526733398 -1291.7998046875 111 0.0703110024 0 ) )
-( ( -169.9945983887 -1302.0697021484 142 0.0937480032 0.3174790144 ) ( -170.3531036377 -1303.0034179688 127.4393920898 0.0937480032 0.196134001 ) ( -166.0526733398 -1291.7998046875 111 0.0937480032 0 ) )
-( ( -167.1936645508 -1303.1448974609 142 0.1171870008 0.3174790144 ) ( -167.551864624 -1304.0784912109 127.4393920898 0.1171870008 0.196134001 ) ( -166.0526733398 -1291.7998046875 111 0.1171870008 0 ) )
-( ( -168.2690887451 -1305.9456787109 142 0.1406259984 0.3174790144 ) ( -168.6272735596 -1306.8793945312 127.4393920898 0.1406259984 0.196134001 ) ( -166.0526733398 -1291.7998046875 111 0.1406259984 0 ) )
-( ( -169.3441772461 -1308.74609375 142 0.164060995 0.3174790144 ) ( -169.7025909424 -1309.6798095703 127.4393920898 0.164060995 0.196134001 ) ( -166.0526733398 -1291.7998046875 111 0.164060995 0 ) )
-( ( -172.1447906494 -1307.6711425781 142 0.1874970049 0.3174790144 ) ( -172.5030670166 -1308.6048583984 127.4393920898 0.1874970049 0.196134001 ) ( -166.0526733398 -1291.7998046875 111 0.1874970049 0 ) )
-)
-}
-}
-// brush 117
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 9 3 0 0 0 )
-(
-( ( -87.1447906494 -1323.6711425781 144 0 0.3174790144 ) ( -87.5030670166 -1324.6048583984 128.5 0 0.196134001 ) ( -81.0526733398 -1307.7998046875 111 0 0 ) )
-( ( -89.9454498291 -1322.595703125 144 0.0234379992 0.3174790144 ) ( -90.3039245605 -1323.5294189453 128.5 0.0234379992 0.196134001 ) ( -81.0526733398 -1307.7998046875 111 0.0234379992 0 ) )
-( ( -88.8703613281 -1319.7952880859 144 0.0468729995 0.3174790144 ) ( -89.228805542 -1320.7288818359 128.5 0.0468729995 0.196134001 ) ( -81.0526733398 -1307.7998046875 111 0.0468729995 0 ) )
-( ( -87.7953033447 -1316.9945068359 144 0.0703110024 0.3174790144 ) ( -88.1538696289 -1317.927734375 128.5 0.0703110024 0.196134001 ) ( -81.0526733398 -1307.7998046875 111 0.0703110024 0 ) )
-( ( -84.9945983887 -1318.0697021484 144 0.0937480032 0.3174790144 ) ( -85.3531036377 -1319.0034179688 128.5 0.0937480032 0.196134001 ) ( -81.0526733398 -1307.7998046875 111 0.0937480032 0 ) )
-( ( -82.1936645508 -1319.1448974609 144 0.1171870008 0.3174790144 ) ( -82.551864624 -1320.0784912109 128.5 0.1171870008 0.196134001 ) ( -81.0526733398 -1307.7998046875 111 0.1171870008 0 ) )
-( ( -83.2690887451 -1321.9456787109 144 0.1406259984 0.3174790144 ) ( -83.6272735596 -1322.8793945312 128.5 0.1406259984 0.196134001 ) ( -81.0526733398 -1307.7998046875 111 0.1406259984 0 ) )
-( ( -84.3441772461 -1324.74609375 144 0.164060995 0.3174790144 ) ( -84.7025909424 -1325.6798095703 128.5 0.164060995 0.196134001 ) ( -81.0526733398 -1307.7998046875 111 0.164060995 0 ) )
-( ( -87.1447906494 -1323.6711425781 144 0.1874970049 0.3174790144 ) ( -87.5030670166 -1324.6048583984 128.5 0.1874970049 0.196134001 ) ( -81.0526733398 -1307.7998046875 111 0.1874970049 0 ) )
-)
-}
-}
-// brush 118
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 9 3 0 0 0 )
-(
-( ( -0.3195259869 -1334.8217773438 144 0 0.3174790144 ) ( -0.5613359809 -1335.7922363281 128.5 0 0.1961330026 ) ( 3.792963028 -1318.3264160156 111 0 0 ) )
-( ( -3.2303669453 -1334.0958251953 144 0.0234370008 0.3174790144 ) ( -3.4723830223 -1335.0661621094 128.5 0.0234370008 0.1961330026 ) ( 3.792963028 -1318.3264160156 111 0.0234370008 0 ) )
-( ( -2.504584074 -1331.1851806641 144 0.0468729995 0.3174790144 ) ( -2.7465798855 -1332.1555175781 128.5 0.0468729995 0.1961330026 ) ( 3.792963028 -1318.3264160156 111 0.0468729995 0 ) )
-( ( -1.7788649797 -1328.2742919922 144 0.0703110024 0.3174790144 ) ( -2.0210270882 -1329.2442626953 128.5 0.0703110024 0.1961330026 ) ( 3.792963028 -1318.3264160156 111 0.0703110024 0 ) )
-( ( 1.1319979429 -1329.0001220703 144 0.0937480032 0.3174790144 ) ( 0.8899639845 -1329.970703125 128.5 0.0937480032 0.1961330026 ) ( 3.792963028 -1318.3264160156 111 0.0937480032 0 ) )
-( ( 4.0430841446 -1329.7259521484 144 0.1171870008 0.3174790144 ) ( 3.8013370037 -1330.6962890625 128.5 0.1171870008 0.1961330026 ) ( 3.792963028 -1318.3264160156 111 0.1171870008 0 ) )
-( ( 3.3170089722 -1332.6369628906 144 0.1406259984 0.3174790144 ) ( 3.0752820969 -1333.6072998047 128.5 0.1406259984 0.1961330026 ) ( 3.792963028 -1318.3264160156 111 0.1406259984 0 ) )
-( ( 2.5912189484 -1335.5474853516 144 0.164060995 0.3174790144 ) ( 2.3492679596 -1336.5179443359 128.5 0.164060995 0.1961330026 ) ( 3.792963028 -1318.3264160156 111 0.164060995 0 ) )
-( ( -0.3195259869 -1334.8217773438 144 0.1874970049 0.3174790144 ) ( -0.5613359809 -1335.7922363281 128.5 0.1874970049 0.1961330026 ) ( 3.792963028 -1318.3264160156 111 0.1874970049 0 ) )
-)
-}
-}
-// brush 119
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 9 3 0 0 0 )
-(
-( ( 92.7074508667 -1341.8646240234 144 0 0.3174780011 ) ( 92.6030349731 -1342.8592529297 128.5 0 0.1961330026 ) ( 94.4842071533 -1324.9575195312 111 0 0 ) )
-( ( 89.7239074707 -1341.5509033203 144 0.0234370008 0.3174780011 ) ( 89.6192703247 -1342.5452880859 128.5 0.0234370008 0.1961330026 ) ( 94.4842071533 -1324.9575195312 111 0.0234370008 0 ) )
-( ( 90.0375289917 -1338.5675048828 144 0.0468740016 0.3174780011 ) ( 89.9329528809 -1339.5621337891 128.5 0.0468740016 0.1961330026 ) ( 94.4842071533 -1324.9575195312 111 0.0468740016 0 ) )
-( ( 90.3510742188 -1335.583984375 144 0.0703110024 0.3174780011 ) ( 90.2462692261 -1336.5782470703 128.5 0.0703110024 0.1961330026 ) ( 94.4842071533 -1324.9575195312 111 0.0703110024 0 ) )
-( ( 93.3346252441 -1335.8974609375 144 0.0937480032 0.3174780011 ) ( 93.2300491333 -1336.892578125 128.5 0.0937480032 0.1961330026 ) ( 94.4842071533 -1324.9575195312 111 0.0937480032 0 ) )
-( ( 96.3184051514 -1336.2111816406 144 0.1171870008 0.3174780011 ) ( 96.2140579224 -1337.2056884766 128.5 0.1171870008 0.1961330026 ) ( 94.4842071533 -1324.9575195312 111 0.1171870008 0 ) )
-( ( 96.0045394897 -1339.1950683594 144 0.1406279951 0.3174780011 ) ( 95.9001846313 -1340.1893310547 128.5 0.1406279951 0.1961330026 ) ( 94.4842071533 -1324.9575195312 111 0.1406279951 0 ) )
-( ( 95.6908569336 -1342.1781005859 144 0.164060995 0.3174780011 ) ( 95.5863265991 -1343.1727294922 128.5 0.164060995 0.1961330026 ) ( 94.4842071533 -1324.9575195312 111 0.164060995 0 ) )
-( ( 92.7074508667 -1341.8646240234 144 0.1874970049 0.3174780011 ) ( 92.6030349731 -1342.8592529297 128.5 0.1874970049 0.1961330026 ) ( 94.4842071533 -1324.9575195312 111 0.1874970049 0 ) )
-)
-}
-}
-// brush 120
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 9 3 0 0 0 )
-(
-( ( 188.2567749023 -1343.8658447266 144 0 0.3174790144 ) ( 188.2220001221 -1344.8653564453 128.5 0 0.1961330026 ) ( 188.849822998 -1326.8759765625 111 0 0 ) )
-( ( 185.258605957 -1343.7611083984 144 0.0234370008 0.3174790144 ) ( 185.2236022949 -1344.7603759766 128.5 0.0234370008 0.1961330026 ) ( 188.849822998 -1326.8759765625 111 0.0234370008 0 ) )
-( ( 185.3633575439 -1340.7630615234 144 0.0468740016 0.3174790144 ) ( 185.328414917 -1341.7625732422 128.5 0.0468740016 0.1961330026 ) ( 188.849822998 -1326.8759765625 111 0.0468740016 0 ) )
-( ( 185.4680023193 -1337.7648925781 144 0.0703110024 0.3174790144 ) ( 185.4328308105 -1338.7639160156 128.5 0.0703110024 0.1961330026 ) ( 188.849822998 -1326.8759765625 111 0.0703110024 0 ) )
-( ( 188.4661865234 -1337.8695068359 144 0.0937490016 0.3174790144 ) ( 188.4312591553 -1338.8695068359 128.5 0.0937490016 0.1961330026 ) ( 188.849822998 -1326.8759765625 111 0.0937490016 0 ) )
-( ( 191.4645690918 -1337.9742431641 144 0.1171879992 0.3174790144 ) ( 191.4298248291 -1338.9736328125 128.5 0.1171879992 0.1961330026 ) ( 188.849822998 -1326.8759765625 111 0.1171879992 0 ) )
-( ( 191.3596191406 -1340.9727783203 144 0.1406289935 0.3174790144 ) ( 191.3248596191 -1341.9719238281 128.5 0.1406289935 0.1961330026 ) ( 188.849822998 -1326.8759765625 111 0.1406289935 0 ) )
-( ( 191.254776001 -1343.9705810547 144 0.1640630066 0.3174790144 ) ( 191.219909668 -1344.9699707031 128.5 0.1640630066 0.1961330026 ) ( 188.849822998 -1326.8759765625 111 0.1640630066 0 ) )
-( ( 188.2567749023 -1343.8658447266 144 0.1874990016 0.3174790144 ) ( 188.2220001221 -1344.8653564453 128.5 0.1874990016 0.1961330026 ) ( 188.849822998 -1326.8759765625 111 0.1874990016 0 ) )
-)
-}
-}
-// brush 121
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 9 3 0 0 0 )
-(
-( ( -622 4 111 0 0 ) ( -640 4 127.4393920898 0 0.1961310059 ) ( -639 4 142 0 0.3174769878 ) )
-( ( -622 4 111 0.0234379992 0 ) ( -640 1 127.4393920898 0.0234379992 0.1961310059 ) ( -639 1 142 0.0234379992 0.3174769878 ) )
-( ( -622 4 111 0.046875 0 ) ( -637 1 127.4393920898 0.046875 0.1961310059 ) ( -636 1 142 0.046875 0.3174769878 ) )
-( ( -622 4 111 0.0703129992 0 ) ( -634 1 127.4393920898 0.0703129992 0.1961310059 ) ( -633 1 142 0.0703129992 0.3174769878 ) )
-( ( -622 4 111 0.09375 0 ) ( -634 4 127.4393920898 0.09375 0.1961310059 ) ( -633 4 142 0.09375 0.3174769878 ) )
-( ( -622 4 111 0.1171879992 0 ) ( -634 7 127.4393920898 0.1171879992 0.1961310059 ) ( -633 7 142 0.1171879992 0.3174769878 ) )
-( ( -622 4 111 0.140625 0 ) ( -637 7 127.4393920898 0.140625 0.1961310059 ) ( -636 7 142 0.140625 0.3174769878 ) )
-( ( -622 4 111 0.1640630066 0 ) ( -640 7 127.4393920898 0.1640630066 0.1961310059 ) ( -639 7 142 0.1640630066 0.3174769878 ) )
-( ( -622 4 111 0.1875 0 ) ( -640 4 127.4393920898 0.1875 0.1961310059 ) ( -639 4 142 0.1875 0.3174769878 ) )
-)
-}
-}
-// brush 122
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 9 3 0 0 0 )
-(
-( ( -620.0875244141 55.7473144531 111 0 0 ) ( -637.9124755859 58.2526855469 127.4393920898 0 0.1961320043 ) ( -636.9221191406 58.1134033203 142 0 0.3174769878 ) )
-( ( -620.0875244141 55.7473144531 111 0.0234379992 0 ) ( -638.3298339844 55.2817382812 127.4393920898 0.0234379992 0.1961320043 ) ( -637.3397216797 55.142578125 142 0.0234379992 0.3174769878 ) )
-( ( -620.0875244141 55.7473144531 111 0.0468759984 0 ) ( -635.3591308594 54.8642578125 127.4393920898 0.0468759984 0.1961320043 ) ( -634.3688964844 54.7250976562 142 0.0468759984 0.3174769878 ) )
-( ( -620.0875244141 55.7473144531 111 0.0703129992 0 ) ( -632.3884277344 54.4466552734 127.4393920898 0.0703129992 0.1961320043 ) ( -631.3980712891 54.3073730469 142 0.0703129992 0.3174769878 ) )
-( ( -620.0875244141 55.7473144531 111 0.0937509984 0 ) ( -631.9709472656 57.4174804688 127.4393920898 0.0937509984 0.1961320043 ) ( -630.98046875 57.2783203125 142 0.0937509984 0.3174769878 ) )
-( ( -620.0875244141 55.7473144531 111 0.1171889976 0 ) ( -631.5533447266 60.3884277344 127.4393920898 0.1171889976 0.1961320043 ) ( -630.5629882812 60.2490234375 142 0.1171889976 0.3174769878 ) )
-( ( -620.0875244141 55.7473144531 111 0.1406269968 0 ) ( -634.5241699219 60.8059082031 127.4393920898 0.1406269968 0.1961320043 ) ( -633.5339355469 60.6667480469 142 0.1406269968 0.3174769878 ) )
-( ( -620.0875244141 55.7473144531 111 0.164064005 0 ) ( -637.4948730469 61.2233886719 127.4393920898 0.164064005 0.1961320043 ) ( -636.5046386719 61.0842285156 142 0.164064005 0.3174769878 ) )
-( ( -620.0875244141 55.7473144531 111 0.1875009984 0 ) ( -637.9124755859 58.2526855469 127.4393920898 0.1875009984 0.1961320043 ) ( -636.9221191406 58.1134033203 142 0.1875009984 0.3174769878 ) )
-)
-}
-}
-// brush 123
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 9 3 0 0 0 )
-(
-( ( -611.3195800781 120.8254394531 111 0 0 ) ( -628.7849121094 125.1801757812 127.4393920898 0 0.1961320043 ) ( -627.8145751953 124.9382324219 142 0 0.3174769878 ) )
-( ( -611.3195800781 120.8254394531 111 0.0234379992 0 ) ( -629.5106201172 122.2690429688 127.4393920898 0.0234379992 0.1961320043 ) ( -628.5402832031 122.0272216797 142 0.0234379992 0.3174769878 ) )
-( ( -611.3195800781 120.8254394531 111 0.046875 0 ) ( -626.5998535156 121.5434570312 127.4393920898 0.046875 0.1961320043 ) ( -625.6295166016 121.3013916016 142 0.046875 0.3174769878 ) )
-( ( -611.3195800781 120.8254394531 111 0.0703129992 0 ) ( -623.6889648438 120.8173828125 127.4393920898 0.0703129992 0.1961320043 ) ( -622.7186279297 120.5755615234 142 0.0703129992 0.3174769878 ) )
-( ( -611.3195800781 120.8254394531 111 0.0937519968 0 ) ( -622.9632568359 123.728515625 127.4393920898 0.0937519968 0.1961320043 ) ( -621.9929199219 123.4865722656 142 0.0937519968 0.3174769878 ) )
-( ( -611.3195800781 120.8254394531 111 0.1171879992 0 ) ( -622.2374267578 126.6394042969 127.4393920898 0.1171879992 0.1961320043 ) ( -621.2670898438 126.3974609375 142 0.1171879992 0.3174769878 ) )
-( ( -611.3195800781 120.8254394531 111 0.1406269968 0 ) ( -625.1484375 127.365234375 127.4393920898 0.1406269968 0.1961320043 ) ( -624.1779785156 127.1232910156 142 0.1406269968 0.3174769878 ) )
-( ( -611.3195800781 120.8254394531 111 0.1640630066 0 ) ( -628.0590820312 128.0909423828 127.4393920898 0.1640630066 0.1961320043 ) ( -627.0888671875 127.8488769531 142 0.1640630066 0.3174769878 ) )
-( ( -611.3195800781 120.8254394531 111 0.1875 0 ) ( -628.7849121094 125.1801757812 127.4393920898 0.1875 0.1961320043 ) ( -627.8145751953 124.9382324219 142 0.1875 0.3174769878 ) )
-)
-}
-}
-// brush 124
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 9 3 0 0 0 )
-(
-( ( -596.75390625 180.8858642578 111 0 0 ) ( -613.6684570312 187.0424804688 127.4393920898 0 0.1961320043 ) ( -612.7287597656 186.7003173828 142 0 0.3174769878 ) )
-( ( -596.75390625 180.8858642578 111 0.0234379992 0 ) ( -614.6943359375 184.2231445312 127.4393920898 0.0234379992 0.1961320043 ) ( -613.7547607422 183.8812255859 142 0.0234379992 0.3174769878 ) )
-( ( -596.75390625 180.8858642578 111 0.0468740016 0 ) ( -611.8754882812 183.197265625 127.4393920898 0.0468740016 0.1961320043 ) ( -610.9357910156 182.8551025391 142 0.0468740016 0.3174769878 ) )
-( ( -596.75390625 180.8858642578 111 0.0703129992 0 ) ( -609.0563964844 182.1708984375 127.4393920898 0.0703129992 0.1961320043 ) ( -608.1166992188 181.8289794922 142 0.0703129992 0.3174769878 ) )
-( ( -596.75390625 180.8858642578 111 0.0937509984 0 ) ( -608.0303955078 184.990234375 127.4393920898 0.0937509984 0.1961320043 ) ( -607.0905761719 184.6481933594 142 0.0937509984 0.3174769878 ) )
-( ( -596.75390625 180.8858642578 111 0.1171879992 0 ) ( -607.0041503906 187.8093261719 127.4393920898 0.1171879992 0.1961320043 ) ( -606.064453125 187.4671630859 142 0.1171879992 0.3174769878 ) )
-( ( -596.75390625 180.8858642578 111 0.1406269968 0 ) ( -609.8233642578 188.8354492188 127.4393920898 0.1406269968 0.1961320043 ) ( -608.8837890625 188.4934082031 142 0.1406269968 0.3174769878 ) )
-( ( -596.75390625 180.8858642578 111 0.1640619934 0 ) ( -612.6423339844 189.8614501953 127.4393920898 0.1640619934 0.1961320043 ) ( -611.7026367188 189.5192871094 142 0.1640619934 0.3174769878 ) )
-( ( -596.75390625 180.8858642578 111 0.1875 0 ) ( -613.6684570312 187.0424804688 127.4393920898 0.1875 0.1961320043 ) ( -612.7287597656 186.7003173828 142 0.1875 0.3174769878 ) )
-)
-}
-}
-// brush 125
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 9 3 0 0 0 )
-(
-( ( -576.3852539062 235.7934570312 111 0 0 ) ( -592.4233398438 243.9655761719 127.4393920898 0 0.1961320043 ) ( -591.5322265625 243.5113525391 142 0 0.3174780011 ) )
-( ( -576.3852539062 235.7934570312 111 0.0234370008 0 ) ( -593.78515625 241.2923583984 127.4393920898 0.0234370008 0.1961320043 ) ( -592.8942871094 240.8383789062 142 0.0234370008 0.3174780011 ) )
-( ( -576.3852539062 235.7934570312 111 0.0468740016 0 ) ( -591.1123046875 239.9305419922 127.4393920898 0.0468740016 0.1961320043 ) ( -590.2214355469 239.4763183594 142 0.0468740016 0.3174780011 ) )
-( ( -576.3852539062 235.7934570312 111 0.0703120008 0 ) ( -588.4392089844 238.5682373047 127.4393920898 0.0703120008 0.1961320043 ) ( -587.5482177734 238.1142578125 142 0.0703120008 0.3174780011 ) )
-( ( -576.3852539062 235.7934570312 111 0.09375 0 ) ( -587.0773925781 241.2414550781 127.4393920898 0.09375 0.1961320043 ) ( -586.1862792969 240.7873535156 142 0.09375 0.3174780011 ) )
-( ( -576.3852539062 235.7934570312 111 0.1171870008 0 ) ( -585.7152099609 243.9145507812 127.4393920898 0.1171870008 0.1961320043 ) ( -584.82421875 243.4604492188 142 0.1171870008 0.3174780011 ) )
-( ( -576.3852539062 235.7934570312 111 0.1406269968 0 ) ( -588.3884277344 245.2766113281 127.4393920898 0.1406269968 0.1961320043 ) ( -587.4975585938 244.8225097656 142 0.1406269968 0.3174780011 ) )
-( ( -576.3852539062 235.7934570312 111 0.164060995 0 ) ( -591.0614013672 246.6384277344 127.4393920898 0.164060995 0.1961320043 ) ( -590.1701660156 246.1843261719 142 0.164060995 0.3174780011 ) )
-( ( -576.3852539062 235.7934570312 111 0.1874990016 0 ) ( -592.4233398438 243.9655761719 127.4393920898 0.1874990016 0.1961320043 ) ( -591.5322265625 243.5113525391 142 0.1874990016 0.3174780011 ) )
-)
-}
-}
-// brush 126
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 9 3 0 0 0 )
-(
-( ( -547.2631835938 287.6499023438 111 0 0 ) ( -562.0080566406 297.9747314453 127.4393920898 0 0.1961330026 ) ( -561.1888427734 297.4008789062 142 0 0.3174780011 ) )
-( ( -547.2631835938 287.6499023438 111 0.0234370008 0 ) ( -563.728515625 295.5169677734 127.4393920898 0.0234370008 0.1961330026 ) ( -562.9094238281 294.943359375 142 0.0234370008 0.3174780011 ) )
-( ( -547.2631835938 287.6499023438 111 0.0468729995 0 ) ( -561.2712402344 293.7965087891 127.4393920898 0.0468729995 0.1961330026 ) ( -560.4521484375 293.22265625 142 0.0468729995 0.3174780011 ) )
-( ( -547.2631835938 287.6499023438 111 0.0703120008 0 ) ( -558.8139648438 292.0754394531 127.4393920898 0.0703120008 0.1961330026 ) ( -557.9946289062 291.5018310547 142 0.0703120008 0.3174780011 ) )
-( ( -547.2631835938 287.6499023438 111 0.09375 0 ) ( -557.0932617188 294.5329589844 127.4393920898 0.09375 0.1961330026 ) ( -556.2740478516 293.9594726562 142 0.09375 0.3174780011 ) )
-( ( -547.2631835938 287.6499023438 111 0.1171879992 0 ) ( -555.3721923828 296.9906005859 127.4393920898 0.1171879992 0.1961330026 ) ( -554.5532226562 296.4169921875 142 0.1171879992 0.3174780011 ) )
-( ( -547.2631835938 287.6499023438 111 0.1406269968 0 ) ( -557.8298339844 298.7114257812 127.4393920898 0.1406269968 0.1961330026 ) ( -557.0108642578 298.1378173828 142 0.1406269968 0.3174780011 ) )
-( ( -547.2631835938 287.6499023438 111 0.164060995 0 ) ( -560.2873535156 300.4320068359 127.4393920898 0.164060995 0.1961330026 ) ( -559.4680175781 299.8581542969 142 0.164060995 0.3174780011 ) )
-( ( -547.2631835938 287.6499023438 111 0.1874980032 0 ) ( -562.0080566406 297.9747314453 127.4393920898 0.1874980032 0.1961330026 ) ( -561.1888427734 297.4008789062 142 0.1874980032 0.3174780011 ) )
-)
-}
-}
-// brush 127
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 9 3 0 0 0 )
-(
-( ( -513.9720458984 333.8237304688 111 0 0 ) ( -527.5568847656 345.6331787109 127.4393920898 0 0.1961330026 ) ( -526.8022460938 344.9769287109 142 0 0.3174780011 ) )
-( ( -513.9720458984 333.8237304688 111 0.0234370008 0 ) ( -529.5249023438 343.3687744141 127.4393920898 0.0234370008 0.1961330026 ) ( -528.7702636719 342.7127685547 142 0.0234370008 0.3174780011 ) )
-( ( -513.9720458984 333.8237304688 111 0.0468729995 0 ) ( -527.2608642578 341.4007568359 127.4393920898 0.0468729995 0.1961330026 ) ( -526.5062255859 340.7446289062 142 0.0468729995 0.3174780011 ) )
-( ( -513.9720458984 333.8237304688 111 0.0703110024 0 ) ( -524.9968261719 339.4323730469 127.4393920898 0.0703110024 0.1961330026 ) ( -524.2420654297 338.7763671875 142 0.0703110024 0.3174780011 ) )
-( ( -513.9720458984 333.8237304688 111 0.09375 0 ) ( -523.0288085938 341.6965332031 127.4393920898 0.09375 0.1961330026 ) ( -522.2740478516 341.0407714844 142 0.09375 0.3174780011 ) )
-( ( -513.9720458984 333.8237304688 111 0.1171870008 0 ) ( -521.0603027344 343.9609375 127.4393920898 0.1171870008 0.1961330026 ) ( -520.3056640625 343.3048095703 142 0.1171870008 0.3174780011 ) )
-( ( -513.9720458984 333.8237304688 111 0.1406259984 0 ) ( -523.3247070312 345.9290771484 127.4393920898 0.1406259984 0.1961330026 ) ( -522.5700683594 345.2729492188 142 0.1406259984 0.3174780011 ) )
-( ( -513.9720458984 333.8237304688 111 0.1640599966 0 ) ( -525.5888671875 347.8970947266 127.4393920898 0.1640599966 0.1961330026 ) ( -524.833984375 347.2407226562 142 0.1640599966 0.3174780011 ) )
-( ( -513.9720458984 333.8237304688 111 0.1874960065 0 ) ( -527.5568847656 345.6331787109 127.4393920898 0.1874960065 0.1961330026 ) ( -526.8022460938 344.9769287109 142 0.1874960065 0.3174780011 ) )
-)
-}
-}
-// brush 128
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 9 3 0 0 0 )
-(
-( ( -473.0489501953 376.7762451172 111 0 0 ) ( -484.8579101562 390.3614501953 127.4393920898 0 0.1961330026 ) ( -484.2019042969 389.6066894531 142 0 0.3174780011 ) )
-( ( -473.0489501953 376.7762451172 111 0.0234379992 0 ) ( -487.1220703125 388.3929443359 127.4393920898 0.0234379992 0.1961330026 ) ( -486.4659423828 387.6383056641 142 0.0234379992 0.3174780011 ) )
-( ( -473.0489501953 376.7762451172 111 0.0468740016 0 ) ( -485.1539306641 386.12890625 127.4393920898 0.0468740016 0.1961330026 ) ( -484.4978027344 385.3742675781 142 0.0468740016 0.3174780011 ) )
-( ( -473.0489501953 376.7762451172 111 0.0703129992 0 ) ( -483.1859130859 383.8646240234 127.4393920898 0.0703129992 0.1961330026 ) ( -482.5296630859 383.1099853516 142 0.0703129992 0.3174780011 ) )
-( ( -473.0489501953 376.7762451172 111 0.0937509984 0 ) ( -480.921875 385.8330078125 127.4393920898 0.0937509984 0.1961330026 ) ( -480.265625 385.0784912109 142 0.0937509984 0.3174780011 ) )
-( ( -473.0489501953 376.7762451172 111 0.1171889976 0 ) ( -478.6572265625 387.8015136719 127.4393920898 0.1171889976 0.1961330026 ) ( -478.0014648438 387.0466308594 142 0.1171889976 0.3174780011 ) )
-( ( -473.0489501953 376.7762451172 111 0.1406279951 0 ) ( -480.6257324219 390.0654296875 127.4393920898 0.1406279951 0.1961330026 ) ( -479.9699707031 389.3106689453 142 0.1406279951 0.3174780011 ) )
-( ( -473.0489501953 376.7762451172 111 0.1640619934 0 ) ( -482.5939941406 392.3293457031 127.4393920898 0.1640619934 0.1961330026 ) ( -481.9378662109 391.5744628906 142 0.1640619934 0.3174780011 ) )
-( ( -473.0489501953 376.7762451172 111 0.1874970049 0 ) ( -484.8579101562 390.3614501953 127.4393920898 0.1874970049 0.1961330026 ) ( -484.2019042969 389.6066894531 142 0.1874970049 0.3174780011 ) )
-)
-}
-}
-// brush 129
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 9 3 0 0 0 )
-(
-( ( -424.0489501953 415.7762451172 111 0 0 ) ( -435.8579101562 429.3614501953 127.4393920898 0 0.1961330026 ) ( -435.2019042969 428.6066894531 142 0 0.3174780011 ) )
-( ( -424.0489501953 415.7762451172 111 0.0234379992 0 ) ( -438.1220703125 427.3929443359 127.4393920898 0.0234379992 0.1961330026 ) ( -437.4659423828 426.6383056641 142 0.0234379992 0.3174780011 ) )
-( ( -424.0489501953 415.7762451172 111 0.0468740016 0 ) ( -436.1539306641 425.12890625 127.4393920898 0.0468740016 0.1961330026 ) ( -435.4978027344 424.3742675781 142 0.0468740016 0.3174780011 ) )
-( ( -424.0489501953 415.7762451172 111 0.0703129992 0 ) ( -434.1859130859 422.8646240234 127.4393920898 0.0703129992 0.1961330026 ) ( -433.5296630859 422.1099853516 142 0.0703129992 0.3174780011 ) )
-( ( -424.0489501953 415.7762451172 111 0.0937509984 0 ) ( -431.921875 424.8330078125 127.4393920898 0.0937509984 0.1961330026 ) ( -431.265625 424.0784912109 142 0.0937509984 0.3174780011 ) )
-( ( -424.0489501953 415.7762451172 111 0.1171889976 0 ) ( -429.6572265625 426.8015136719 127.4393920898 0.1171889976 0.1961330026 ) ( -429.0014648438 426.0466308594 142 0.1171889976 0.3174780011 ) )
-( ( -424.0489501953 415.7762451172 111 0.1406279951 0 ) ( -431.6257324219 429.0654296875 127.4393920898 0.1406279951 0.1961330026 ) ( -430.9699707031 428.3106689453 142 0.1406279951 0.3174780011 ) )
-( ( -424.0489501953 415.7762451172 111 0.1640619934 0 ) ( -433.5939941406 431.3293457031 127.4393920898 0.1640619934 0.1961330026 ) ( -432.9378662109 430.5744628906 142 0.1640619934 0.3174780011 ) )
-( ( -424.0489501953 415.7762451172 111 0.1874970049 0 ) ( -435.8579101562 429.3614501953 127.4393920898 0.1874970049 0.1961330026 ) ( -435.2019042969 428.6066894531 142 0.1874970049 0.3174780011 ) )
-)
-}
-}
-// brush 130
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 9 3 0 0 0 )
-(
-( ( -369.4958496094 449.6864013672 111 0 0 ) ( -378.7663574219 465.1158447266 127.4393920898 0 0.1961330026 ) ( -378.2513427734 464.2585449219 142 0 0.3174780011 ) )
-( ( -369.4958496094 449.6864013672 111 0.0234360006 0 ) ( -381.337890625 463.5704345703 127.4393920898 0.0234360006 0.1961330026 ) ( -380.8227539062 462.7135009766 142 0.0234360006 0.3174780011 ) )
-( ( -369.4958496094 449.6864013672 111 0.0468729995 0 ) ( -379.7928466797 460.9991455078 127.4393920898 0.0468729995 0.1961330026 ) ( -379.2777099609 460.1420898438 142 0.0468729995 0.3174780011 ) )
-( ( -369.4958496094 449.6864013672 111 0.0703120008 0 ) ( -378.2478027344 458.4273681641 127.4393920898 0.0703120008 0.1961330026 ) ( -377.7326660156 457.5704345703 142 0.0703120008 0.3174780011 ) )
-( ( -369.4958496094 449.6864013672 111 0.0937490016 0 ) ( -375.6762695312 459.9727783203 127.4393920898 0.0937490016 0.1961330026 ) ( -375.1611328125 459.1157226562 142 0.0937490016 0.3174780011 ) )
-( ( -369.4958496094 449.6864013672 111 0.1171879992 0 ) ( -373.1043701172 461.5183105469 127.4393920898 0.1171879992 0.1961330026 ) ( -372.5895996094 460.6610107422 142 0.1171879992 0.3174780011 ) )
-( ( -369.4958496094 449.6864013672 111 0.1406269968 0 ) ( -374.6497802734 464.08984375 127.4393920898 0.1406269968 0.1961330026 ) ( -374.1350097656 463.2325439453 142 0.1406269968 0.3174780011 ) )
-( ( -369.4958496094 449.6864013672 111 0.164060995 0 ) ( -376.1950683594 466.6608886719 127.4393920898 0.164060995 0.1961330026 ) ( -375.6799316406 465.8035888672 142 0.164060995 0.3174780011 ) )
-( ( -369.4958496094 449.6864013672 111 0.1874980032 0 ) ( -378.7663574219 465.1158447266 127.4393920898 0.1874980032 0.1961330026 ) ( -378.2513427734 464.2585449219 142 0.1874980032 0.3174780011 ) )
-)
-}
-}
-// brush 131
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 9 3 0 0 0 )
-(
-( ( -309.4958496094 478.6864013672 111 0 0 ) ( -318.7663574219 494.1158447266 127.4393920898 0 0.1961330026 ) ( -318.2513427734 493.2585449219 142 0 0.3174780011 ) )
-( ( -309.4958496094 478.6864013672 111 0.0234360006 0 ) ( -321.337890625 492.5704345703 127.4393920898 0.0234360006 0.1961330026 ) ( -320.8227539062 491.7135009766 142 0.0234360006 0.3174780011 ) )
-( ( -309.4958496094 478.6864013672 111 0.0468729995 0 ) ( -319.7928466797 489.9991455078 127.4393920898 0.0468729995 0.1961330026 ) ( -319.2777099609 489.1420898438 142 0.0468729995 0.3174780011 ) )
-( ( -309.4958496094 478.6864013672 111 0.0703120008 0 ) ( -318.2478027344 487.4273681641 127.4393920898 0.0703120008 0.1961330026 ) ( -317.7326660156 486.5704345703 142 0.0703120008 0.3174780011 ) )
-( ( -309.4958496094 478.6864013672 111 0.0937490016 0 ) ( -315.6762695312 488.9727783203 127.4393920898 0.0937490016 0.1961330026 ) ( -315.1611328125 488.1157226562 142 0.0937490016 0.3174780011 ) )
-( ( -309.4958496094 478.6864013672 111 0.1171879992 0 ) ( -313.1043701172 490.5183105469 127.4393920898 0.1171879992 0.1961330026 ) ( -312.5895996094 489.6610107422 142 0.1171879992 0.3174780011 ) )
-( ( -309.4958496094 478.6864013672 111 0.1406269968 0 ) ( -314.6497802734 493.08984375 127.4393920898 0.1406269968 0.1961330026 ) ( -314.1350097656 492.2325439453 142 0.1406269968 0.3174780011 ) )
-( ( -309.4958496094 478.6864013672 111 0.164060995 0 ) ( -316.1950683594 495.6608886719 127.4393920898 0.164060995 0.1961330026 ) ( -315.6799316406 494.8035888672 142 0.164060995 0.3174780011 ) )
-( ( -309.4958496094 478.6864013672 111 0.1874980032 0 ) ( -318.7663574219 494.1158447266 127.4393920898 0.1874980032 0.1961330026 ) ( -318.2513427734 493.2585449219 142 0.1874980032 0.3174780011 ) )
-)
-}
-}
-// brush 132
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 9 3 0 0 0 )
-(
-( ( -242.9645996094 502.4104003906 111 0 0 ) ( -251.4149169922 518.3039550781 127.4393920898 0 0.1961330026 ) ( -250.9455566406 517.4208984375 142 0 0.3174790144 ) )
-( ( -242.9645996094 502.4104003906 111 0.0234370008 0 ) ( -254.0638427734 516.8952636719 127.4393920898 0.0234370008 0.1961330026 ) ( -253.5942382812 516.0123291016 142 0.0234370008 0.3174790144 ) )
-( ( -242.9645996094 502.4104003906 111 0.0468729995 0 ) ( -252.6555175781 514.2465820312 127.4393920898 0.0468729995 0.1961330026 ) ( -252.1859130859 513.3637695312 142 0.0468729995 0.3174790144 ) )
-( ( -242.9645996094 502.4104003906 111 0.0703120008 0 ) ( -251.2471923828 511.5972900391 127.4393920898 0.0703120008 0.1961330026 ) ( -250.7774658203 510.7147216797 142 0.0703120008 0.3174790144 ) )
-( ( -242.9645996094 502.4104003906 111 0.0937490016 0 ) ( -248.5983886719 513.0061035156 127.4393920898 0.0937490016 0.1961330026 ) ( -248.1287841797 512.1232910156 142 0.0937490016 0.3174790144 ) )
-( ( -242.9645996094 502.4104003906 111 0.1171879992 0 ) ( -245.9489746094 514.4149169922 127.4393920898 0.1171879992 0.1961330026 ) ( -245.4797363281 513.5318603516 142 0.1171879992 0.3174790144 ) )
-( ( -242.9645996094 502.4104003906 111 0.1406279951 0 ) ( -247.3577880859 517.0638427734 127.4393920898 0.1406279951 0.1961330026 ) ( -246.8884277344 516.1807861328 142 0.1406279951 0.3174790144 ) )
-( ( -242.9645996094 502.4104003906 111 0.1640619934 0 ) ( -248.7663574219 519.7122802734 127.4393920898 0.1640619934 0.1961330026 ) ( -248.2967529297 518.8292236328 142 0.1640619934 0.3174790144 ) )
-( ( -242.9645996094 502.4104003906 111 0.1874980032 0 ) ( -251.4149169922 518.3039550781 127.4393920898 0.1874980032 0.1961330026 ) ( -250.9455566406 517.4208984375 142 0.1874980032 0.3174790144 ) )
-)
-}
-}
-// brush 133
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 9 3 0 0 0 )
-(
-( ( -167.0526733398 523.7998046875 111 0 0 ) ( -174.2002868652 539.6649780273 127.4393920898 0 0.196134001 ) ( -173.8032836914 538.7835083008 142 0 0.3174790144 ) )
-( ( -167.0526733398 523.7998046875 111 0.0234379992 0 ) ( -177.3039550781 538.6496582031 127.4393920898 0.0234379992 0.196134001 ) ( -176.9066772461 537.7681884766 142 0.0234379992 0.3174790144 ) )
-( ( -167.0526733398 523.7998046875 111 0.0468729995 0 ) ( -176.1126098633 536.0057983398 127.4393920898 0.0468729995 0.196134001 ) ( -175.7153930664 535.1243896484 142 0.0468729995 0.3174790144 ) )
-( ( -167.0526733398 523.7998046875 111 0.0703110024 0 ) ( -174.9214630127 533.3612670898 127.4393920898 0.0703110024 0.196134001 ) ( -174.5241241455 532.4802856445 142 0.0703110024 0.3174790144 ) )
-( ( -167.0526733398 523.7998046875 111 0.0937480032 0 ) ( -171.8179321289 534.3768310547 127.4393920898 0.0937480032 0.196134001 ) ( -171.4207305908 533.495300293 142 0.0937480032 0.3174790144 ) )
-( ( -167.0526733398 523.7998046875 111 0.1171870008 0 ) ( -168.7139282227 535.391784668 127.4393920898 0.1171870008 0.196134001 ) ( -168.3170013428 534.5103759766 142 0.1171870008 0.3174790144 ) )
-( ( -167.0526733398 523.7998046875 111 0.1406259984 0 ) ( -169.9055480957 538.0360107422 127.4393920898 0.1406259984 0.196134001 ) ( -169.508682251 537.1545410156 142 0.1406259984 0.3174790144 ) )
-( ( -167.0526733398 523.7998046875 111 0.164060995 0 ) ( -171.0971069336 540.6798095703 127.4393920898 0.164060995 0.196134001 ) ( -170.6999664307 539.7983398438 142 0.164060995 0.3174790144 ) )
-( ( -167.0526733398 523.7998046875 111 0.1874970049 0 ) ( -174.2002868652 539.6649780273 127.4393920898 0.1874970049 0.196134001 ) ( -173.8032836914 538.7835083008 142 0.1874970049 0.3174790144 ) )
-)
-}
-}
-// brush 134
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 9 3 0 0 0 )
-(
-( ( -84.0526733398 542.7998046875 111 0 0 ) ( -90.5030517578 556.7852172852 127.4393920898 0 0.196134001 ) ( -90.1447753906 556.0082397461 142 0 0.3174790144 ) )
-( ( -84.0526733398 542.7998046875 111 0.0234379992 0 ) ( -93.3039550781 555.8901977539 127.4393920898 0.0234379992 0.196134001 ) ( -92.9454345703 555.1131591797 142 0.0234379992 0.3174790144 ) )
-( ( -84.0526733398 542.7998046875 111 0.0468729995 0 ) ( -92.2288208008 553.5596313477 127.4393920898 0.0468729995 0.196134001 ) ( -91.8703613281 552.7825927734 142 0.0468729995 0.3174790144 ) )
-( ( -84.0526733398 542.7998046875 111 0.0703110024 0 ) ( -91.1538696289 551.2283935547 127.4393920898 0.0703110024 0.196134001 ) ( -90.7952880859 550.4518432617 142 0.0703110024 0.3174790144 ) )
-( ( -84.0526733398 542.7998046875 111 0.0937480032 0 ) ( -88.3530883789 552.1236572266 127.4393920898 0.0937480032 0.196134001 ) ( -87.9946289062 551.346496582 142 0.0937480032 0.3174790144 ) )
-( ( -84.0526733398 542.7998046875 111 0.1171870008 0 ) ( -85.5518798828 553.018371582 127.4393920898 0.1171870008 0.196134001 ) ( -85.1936645508 552.2413330078 142 0.1171870008 0.3174790144 ) )
-( ( -84.0526733398 542.7998046875 111 0.1406259984 0 ) ( -86.6272583008 555.3492431641 127.4393920898 0.1406259984 0.196134001 ) ( -86.2691040039 554.572265625 142 0.1406259984 0.3174790144 ) )
-( ( -84.0526733398 542.7998046875 111 0.164060995 0 ) ( -87.7025756836 557.6798095703 127.4393920898 0.164060995 0.196134001 ) ( -87.3441772461 556.9028320312 142 0.164060995 0.3174790144 ) )
-( ( -84.0526733398 542.7998046875 111 0.1874970049 0 ) ( -90.5030517578 556.7852172852 127.4393920898 0.1874970049 0.196134001 ) ( -90.1447753906 556.0082397461 142 0.1874970049 0.3174790144 ) )
-)
-}
-}
-// brush 135
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 9 3 0 0 0 )
-(
-( ( 1.7929689884 549.3264160156 111 0 0 ) ( -2.5613400936 566.7922363281 127.4393920898 0 0.1961330026 ) ( -2.319519043 565.8217773438 142 0 0.3174790144 ) )
-( ( 1.7929689884 549.3264160156 111 0.0234370008 0 ) ( -5.4724121094 566.0661621094 127.4393920898 0.0234370008 0.1961330026 ) ( -5.2303471565 565.0958251953 142 0.0234370008 0.3174790144 ) )
-( ( 1.7929689884 549.3264160156 111 0.0468729995 0 ) ( -4.7465820312 563.1555175781 127.4393920898 0.0468729995 0.1961330026 ) ( -4.5045781136 562.1851806641 142 0.0468729995 0.3174790144 ) )
-( ( 1.7929689884 549.3264160156 111 0.0703110024 0 ) ( -4.0209960938 560.2442626953 127.4393920898 0.0703110024 0.1961330026 ) ( -3.7788701057 559.2742919922 142 0.0703110024 0.3174790144 ) )
-( ( 1.7929689884 549.3264160156 111 0.0937480032 0 ) ( -1.1100460291 560.970703125 127.4393920898 0.0937480032 0.1961330026 ) ( -0.8679810166 560.0001220703 142 0.0937480032 0.3174790144 ) )
-( ( 1.7929689884 549.3264160156 111 0.1171870008 0 ) ( 1.8013310432 561.6962890625 127.4393920898 0.1171870008 0.1961330026 ) ( 2.0430910587 560.7259521484 142 0.1171870008 0.3174790144 ) )
-( ( 1.7929689884 549.3264160156 111 0.1406259984 0 ) ( 1.0753170252 564.6072998047 127.4393920898 0.1406259984 0.1961330026 ) ( 1.3170169592 563.6369628906 142 0.1406259984 0.3174790144 ) )
-( ( 1.7929689884 549.3264160156 111 0.164060995 0 ) ( 0.3492429852 567.5179443359 127.4393920898 0.164060995 0.1961330026 ) ( 0.5911870003 566.5474853516 142 0.164060995 0.3174790144 ) )
-( ( 1.7929689884 549.3264160156 111 0.1874970049 0 ) ( -2.5613400936 566.7922363281 127.4393920898 0.1874970049 0.1961330026 ) ( -2.319519043 565.8217773438 142 0.1874970049 0.3174790144 ) )
-)
-}
-}
-// brush 136
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 9 3 0 0 0 )
-(
-( ( 93.4841918945 555.9575195312 111 0 0 ) ( 91.6030273438 573.8592529297 127.4393920898 0 0.1961330026 ) ( 91.7074584961 572.8646240234 142 0 0.3174780011 ) )
-( ( 93.4841918945 555.9575195312 111 0.0234370008 0 ) ( 88.6192626953 573.5452880859 127.4393920898 0.0234370008 0.1961330026 ) ( 88.7238769531 572.5509033203 142 0.0234370008 0.3174780011 ) )
-( ( 93.4841918945 555.9575195312 111 0.0468740016 0 ) ( 88.9329833984 570.5621337891 127.4393920898 0.0468740016 0.1961330026 ) ( 89.0375366211 569.5675048828 142 0.0468740016 0.3174780011 ) )
-( ( 93.4841918945 555.9575195312 111 0.0703110024 0 ) ( 89.2462768555 567.5782470703 127.4393920898 0.0703110024 0.1961330026 ) ( 89.3510742188 566.583984375 142 0.0703110024 0.3174780011 ) )
-( ( 93.4841918945 555.9575195312 111 0.0937480032 0 ) ( 92.2300415039 567.892578125 127.4393920898 0.0937480032 0.1961330026 ) ( 92.3345947266 566.8974609375 142 0.0937480032 0.3174780011 ) )
-( ( 93.4841918945 555.9575195312 111 0.1171870008 0 ) ( 95.214050293 568.2056884766 127.4393920898 0.1171870008 0.1961330026 ) ( 95.3184204102 567.2111816406 142 0.1171870008 0.3174780011 ) )
-( ( 93.4841918945 555.9575195312 111 0.1406279951 0 ) ( 94.9001464844 571.1893310547 127.4393920898 0.1406279951 0.1961330026 ) ( 95.0045166016 570.1950683594 142 0.1406279951 0.3174780011 ) )
-( ( 93.4841918945 555.9575195312 111 0.164060995 0 ) ( 94.5863037109 574.1727294922 127.4393920898 0.164060995 0.1961330026 ) ( 94.6908569336 573.1781005859 142 0.164060995 0.3174780011 ) )
-( ( 93.4841918945 555.9575195312 111 0.1874970049 0 ) ( 91.6030273438 573.8592529297 127.4393920898 0.1874970049 0.1961330026 ) ( 91.7074584961 572.8646240234 142 0.1874970049 0.3174780011 ) )
-)
-}
-}
-// brush 137
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 9 3 0 0 0 )
-(
-( ( 188.8498535156 557.8759765625 111 0 0 ) ( 188.2219848633 575.8653564453 127.4393920898 0 0.1961330026 ) ( 188.2567749023 574.8658447266 142 0 0.3174790144 ) )
-( ( 188.8498535156 557.8759765625 111 0.0234370008 0 ) ( 185.2236328125 575.7603759766 127.4393920898 0.0234370008 0.1961330026 ) ( 185.258605957 574.7611083984 142 0.0234370008 0.3174790144 ) )
-( ( 188.8498535156 557.8759765625 111 0.0468740016 0 ) ( 185.3284301758 572.7625732422 127.4393920898 0.0468740016 0.1961330026 ) ( 185.3633422852 571.7630615234 142 0.0468740016 0.3174790144 ) )
-( ( 188.8498535156 557.8759765625 111 0.0703110024 0 ) ( 185.4328613281 569.7639160156 127.4393920898 0.0703110024 0.1961330026 ) ( 185.4680175781 568.7648925781 142 0.0703110024 0.3174790144 ) )
-( ( 188.8498535156 557.8759765625 111 0.0937490016 0 ) ( 188.4312744141 569.8695068359 127.4393920898 0.0937490016 0.1961330026 ) ( 188.4661865234 568.8695068359 142 0.0937490016 0.3174790144 ) )
-( ( 188.8498535156 557.8759765625 111 0.1171879992 0 ) ( 191.4298095703 569.9736328125 127.4393920898 0.1171879992 0.1961330026 ) ( 191.4645996094 568.9742431641 142 0.1171879992 0.3174790144 ) )
-( ( 188.8498535156 557.8759765625 111 0.1406289935 0 ) ( 191.3248291016 572.9719238281 127.4393920898 0.1406289935 0.1961330026 ) ( 191.3596191406 571.9727783203 142 0.1406289935 0.3174790144 ) )
-( ( 188.8498535156 557.8759765625 111 0.1640630066 0 ) ( 191.219909668 575.9699707031 127.4393920898 0.1640630066 0.1961330026 ) ( 191.2547607422 574.9705810547 142 0.1640630066 0.3174790144 ) )
-( ( 188.8498535156 557.8759765625 111 0.1874990016 0 ) ( 188.2219848633 575.8653564453 127.4393920898 0.1874990016 0.1961330026 ) ( 188.2567749023 574.8658447266 142 0.1874990016 0.3174790144 ) )
-)
-}
-}
-// brush 138
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 9 3 0 0 0 )
-(
-( ( 3379 11 144 0 0.3174769878 ) ( 3380 11 129.4393920898 0 0.1961310059 ) ( 3362 11 113 0 0 ) )
-( ( 3379 8 144 0.0234379992 0.3174769878 ) ( 3380 8 129.4393920898 0.0234379992 0.1961310059 ) ( 3362 11 113 0.0234379992 0 ) )
-( ( 3376 8 144 0.046875 0.3174769878 ) ( 3377 8 129.4393920898 0.046875 0.1961310059 ) ( 3362 11 113 0.046875 0 ) )
-( ( 3373 8 144 0.0703129992 0.3174769878 ) ( 3374 8 129.4393920898 0.0703129992 0.1961310059 ) ( 3362 11 113 0.0703129992 0 ) )
-( ( 3373 11 144 0.09375 0.3174769878 ) ( 3374 11 129.4393920898 0.09375 0.1961310059 ) ( 3362 11 113 0.09375 0 ) )
-( ( 3373 14 144 0.1171879992 0.3174769878 ) ( 3374 14 129.4393920898 0.1171879992 0.1961310059 ) ( 3362 11 113 0.1171879992 0 ) )
-( ( 3376 14 144 0.140625 0.3174769878 ) ( 3377 14 129.4393920898 0.140625 0.1961310059 ) ( 3362 11 113 0.140625 0 ) )
-( ( 3379 14 144 0.1640630066 0.3174769878 ) ( 3380 14 129.4393920898 0.1640630066 0.1961310059 ) ( 3362 11 113 0.1640630066 0 ) )
-( ( 3379 11 144 0.1875 0.3174769878 ) ( 3380 11 129.4393920898 0.1875 0.1961310059 ) ( 3362 11 113 0.1875 0 ) )
-)
-}
-}
-// brush 139
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 9 3 0 0 0 )
-(
-( ( 3376.9221191406 65.1134033203 144 0 0.3174769878 ) ( 3377.9125976562 65.2526245117 129.4393920898 0 0.1961320043 ) ( 3360.0874023438 62.7473754883 113 0 0 ) )
-( ( 3377.33984375 62.142578125 144 0.0234379992 0.3174769878 ) ( 3378.3298339844 62.2817382812 129.4393920898 0.0234379992 0.1961320043 ) ( 3360.0874023438 62.7473754883 113 0.0234379992 0 ) )
-( ( 3374.3688964844 61.7250366211 144 0.0468759984 0.3174769878 ) ( 3375.3591308594 61.8643188477 129.4393920898 0.0468759984 0.1961320043 ) ( 3360.0874023438 62.7473754883 113 0.0468759984 0 ) )
-( ( 3371.3979492188 61.307434082 144 0.0703129992 0.3174769878 ) ( 3372.3884277344 61.4466552734 129.4393920898 0.0703129992 0.1961320043 ) ( 3360.0874023438 62.7473754883 113 0.0703129992 0 ) )
-( ( 3370.98046875 64.2783203125 144 0.0937509984 0.3174769878 ) ( 3371.9709472656 64.4175415039 129.4393920898 0.0937509984 0.1961320043 ) ( 3360.0874023438 62.7473754883 113 0.0937509984 0 ) )
-( ( 3370.5629882812 67.2490844727 144 0.1171889976 0.3174769878 ) ( 3371.5532226562 67.3883666992 129.4393920898 0.1171889976 0.1961320043 ) ( 3360.0874023438 62.7473754883 113 0.1171889976 0 ) )
-( ( 3373.5339355469 67.6666870117 144 0.1406269968 0.3174769878 ) ( 3374.5241699219 67.8059082031 129.4393920898 0.1406269968 0.1961320043 ) ( 3360.0874023438 62.7473754883 113 0.1406269968 0 ) )
-( ( 3376.5046386719 68.0841674805 144 0.164064005 0.3174769878 ) ( 3377.4948730469 68.2233886719 129.4393920898 0.164064005 0.1961320043 ) ( 3360.0874023438 62.7473754883 113 0.164064005 0 ) )
-( ( 3376.9221191406 65.1134033203 144 0.1875009984 0.3174769878 ) ( 3377.9125976562 65.2526245117 129.4393920898 0.1875009984 0.1961320043 ) ( 3360.0874023438 62.7473754883 113 0.1875009984 0 ) )
-)
-}
-}
-// brush 140
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 9 3 0 0 0 )
-(
-( ( 3366.814453125 131.9381713867 144 0 0.3174769878 ) ( 3367.7849121094 132.1801757812 129.4393920898 0 0.1961320043 ) ( 3350.3195800781 127.825378418 113 0 0 ) )
-( ( 3367.5402832031 129.0272216797 144 0.0234379992 0.3174769878 ) ( 3368.5107421875 129.2691040039 129.4393920898 0.0234379992 0.1961320043 ) ( 3350.3195800781 127.825378418 113 0.0234379992 0 ) )
-( ( 3364.6293945312 128.3013916016 144 0.046875 0.3174769878 ) ( 3365.5998535156 128.5435180664 129.4393920898 0.046875 0.1961320043 ) ( 3350.3195800781 127.825378418 113 0.046875 0 ) )
-( ( 3361.71875 127.5755615234 144 0.0703129992 0.3174769878 ) ( 3362.6889648438 127.8174438477 129.4393920898 0.0703129992 0.1961320043 ) ( 3350.3195800781 127.825378418 113 0.0703129992 0 ) )
-( ( 3360.9929199219 130.4866333008 144 0.0937519968 0.3174769878 ) ( 3361.9633789062 130.7285766602 129.4393920898 0.0937519968 0.1961320043 ) ( 3350.3195800781 127.825378418 113 0.0937519968 0 ) )
-( ( 3360.2670898438 133.3973999023 144 0.1171879992 0.3174769878 ) ( 3361.2373046875 133.6394042969 129.4393920898 0.1171879992 0.1961320043 ) ( 3350.3195800781 127.825378418 113 0.1171879992 0 ) )
-( ( 3363.1779785156 134.1232910156 144 0.1406269968 0.3174769878 ) ( 3364.1484375 134.365234375 129.4393920898 0.1406269968 0.1961320043 ) ( 3350.3195800781 127.825378418 113 0.1406269968 0 ) )
-( ( 3366.0888671875 134.8489379883 144 0.1640630066 0.3174769878 ) ( 3367.0590820312 135.0909423828 129.4393920898 0.1640630066 0.1961320043 ) ( 3350.3195800781 127.825378418 113 0.1640630066 0 ) )
-( ( 3366.814453125 131.9381713867 144 0.1875 0.3174769878 ) ( 3367.7849121094 132.1801757812 129.4393920898 0.1875 0.1961320043 ) ( 3350.3195800781 127.825378418 113 0.1875 0 ) )
-)
-}
-}
-// brush 141
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 9 3 0 0 0 )
-(
-( ( 3350.7287597656 192.7003173828 144 0 0.3174769878 ) ( 3351.6684570312 193.0424804688 129.4393920898 0 0.1961320043 ) ( 3334.75390625 186.8858642578 113 0 0 ) )
-( ( 3351.7548828125 189.8812255859 144 0.0234379992 0.3174769878 ) ( 3352.6943359375 190.2232055664 129.4393920898 0.0234379992 0.1961320043 ) ( 3334.75390625 186.8858642578 113 0.0234379992 0 ) )
-( ( 3348.9357910156 188.8551025391 144 0.0468740016 0.3174769878 ) ( 3349.8754882812 189.1973266602 129.4393920898 0.0468740016 0.1961320043 ) ( 3334.75390625 186.8858642578 113 0.0468740016 0 ) )
-( ( 3346.1166992188 187.8289794922 144 0.0703129992 0.3174769878 ) ( 3347.0563964844 188.1709594727 129.4393920898 0.0703129992 0.1961320043 ) ( 3334.75390625 186.8858642578 113 0.0703129992 0 ) )
-( ( 3345.0905761719 190.6481933594 144 0.0937509984 0.3174769878 ) ( 3346.0302734375 190.9902954102 129.4393920898 0.0937509984 0.1961320043 ) ( 3334.75390625 186.8858642578 113 0.0937509984 0 ) )
-( ( 3344.064453125 193.4671630859 144 0.1171879992 0.3174769878 ) ( 3345.0041503906 193.8093261719 129.4393920898 0.1171879992 0.1961320043 ) ( 3334.75390625 186.8858642578 113 0.1171879992 0 ) )
-( ( 3346.8837890625 194.4934082031 144 0.1406269968 0.3174769878 ) ( 3347.8232421875 194.8354492188 129.4393920898 0.1406269968 0.1961320043 ) ( 3334.75390625 186.8858642578 113 0.1406269968 0 ) )
-( ( 3349.7026367188 195.5193481445 144 0.1640619934 0.3174769878 ) ( 3350.6423339844 195.8614501953 129.4393920898 0.1640619934 0.1961320043 ) ( 3334.75390625 186.8858642578 113 0.1640619934 0 ) )
-( ( 3350.7287597656 192.7003173828 144 0.1875 0.3174769878 ) ( 3351.6684570312 193.0424804688 129.4393920898 0.1875 0.1961320043 ) ( 3334.75390625 186.8858642578 113 0.1875 0 ) )
-)
-}
-}
-// brush 142
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 9 3 0 0 0 )
-(
-( ( 3328.5322265625 249.5113525391 144 0 0.3174780011 ) ( 3329.4233398438 249.9655151367 129.4393920898 0 0.1961320043 ) ( 3313.3852539062 241.7935180664 113 0 0 ) )
-( ( 3329.8942871094 246.8383789062 144 0.0234370008 0.3174780011 ) ( 3330.78515625 247.2923583984 129.4393920898 0.0234370008 0.1961320043 ) ( 3313.3852539062 241.7935180664 113 0.0234370008 0 ) )
-( ( 3327.2214355469 245.4763183594 144 0.0468740016 0.3174780011 ) ( 3328.1123046875 245.9305419922 129.4393920898 0.0468740016 0.1961320043 ) ( 3313.3852539062 241.7935180664 113 0.0468740016 0 ) )
-( ( 3324.5483398438 244.1143188477 144 0.0703120008 0.3174780011 ) ( 3325.4392089844 244.5682373047 129.4393920898 0.0703120008 0.1961320043 ) ( 3313.3852539062 241.7935180664 113 0.0703120008 0 ) )
-( ( 3323.1862792969 246.7874145508 144 0.09375 0.3174780011 ) ( 3324.0773925781 247.2415161133 129.4393920898 0.09375 0.1961320043 ) ( 3313.3852539062 241.7935180664 113 0.09375 0 ) )
-( ( 3321.82421875 249.4603881836 144 0.1171870008 0.3174780011 ) ( 3322.7153320312 249.9144897461 129.4393920898 0.1171870008 0.1961320043 ) ( 3313.3852539062 241.7935180664 113 0.1171870008 0 ) )
-( ( 3324.4975585938 250.8225097656 144 0.1406269968 0.3174780011 ) ( 3325.3884277344 251.276550293 129.4393920898 0.1406269968 0.1961320043 ) ( 3313.3852539062 241.7935180664 113 0.1406269968 0 ) )
-( ( 3327.1701660156 252.1843261719 144 0.164060995 0.3174780011 ) ( 3328.0615234375 252.6384277344 129.4393920898 0.164060995 0.1961320043 ) ( 3313.3852539062 241.7935180664 113 0.164060995 0 ) )
-( ( 3328.5322265625 249.5113525391 144 0.1874990016 0.3174780011 ) ( 3329.4233398438 249.9655151367 129.4393920898 0.1874990016 0.1961320043 ) ( 3313.3852539062 241.7935180664 113 0.1874990016 0 ) )
-)
-}
-}
-// brush 143
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 9 3 0 0 0 )
-(
-( ( 3299.1889648438 302.4008789062 144 0 0.3174780011 ) ( 3300.0080566406 302.9747314453 129.4393920898 0 0.1961330026 ) ( 3285.2631835938 292.6499023438 113 0 0 ) )
-( ( 3300.9094238281 299.943359375 144 0.0234370008 0.3174780011 ) ( 3301.728515625 300.5169677734 129.4393920898 0.0234370008 0.1961330026 ) ( 3285.2631835938 292.6499023438 113 0.0234370008 0 ) )
-( ( 3298.4521484375 298.22265625 144 0.0468729995 0.3174780011 ) ( 3299.2712402344 298.7965087891 129.4393920898 0.0468729995 0.1961330026 ) ( 3285.2631835938 292.6499023438 113 0.0468729995 0 ) )
-( ( 3295.9946289062 296.5018310547 144 0.0703120008 0.3174780011 ) ( 3296.8139648438 297.0754394531 129.4393920898 0.0703120008 0.1961330026 ) ( 3285.2631835938 292.6499023438 113 0.0703120008 0 ) )
-( ( 3294.2739257812 298.9594726562 144 0.09375 0.3174780011 ) ( 3295.0932617188 299.5329589844 129.4393920898 0.09375 0.1961330026 ) ( 3285.2631835938 292.6499023438 113 0.09375 0 ) )
-( ( 3292.5532226562 301.4169921875 144 0.1171879992 0.3174780011 ) ( 3293.3720703125 301.9906005859 129.4393920898 0.1171879992 0.1961330026 ) ( 3285.2631835938 292.6499023438 113 0.1171879992 0 ) )
-( ( 3295.0107421875 303.1378173828 144 0.1406269968 0.3174780011 ) ( 3295.8298339844 303.7114257812 129.4393920898 0.1406269968 0.1961330026 ) ( 3285.2631835938 292.6499023438 113 0.1406269968 0 ) )
-( ( 3297.4680175781 304.8581542969 144 0.164060995 0.3174780011 ) ( 3298.2873535156 305.4320068359 129.4393920898 0.164060995 0.1961330026 ) ( 3285.2631835938 292.6499023438 113 0.164060995 0 ) )
-( ( 3299.1889648438 302.4008789062 144 0.1874980032 0.3174780011 ) ( 3300.0080566406 302.9747314453 129.4393920898 0.1874980032 0.1961330026 ) ( 3285.2631835938 292.6499023438 113 0.1874980032 0 ) )
-)
-}
-}
-// brush 144
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 9 3 0 0 0 )
-(
-( ( 3262.8022460938 349.9769287109 144 0 0.3174780011 ) ( 3263.5568847656 350.6331787109 129.4393920898 0 0.1961330026 ) ( 3249.9721679688 338.8237304688 113 0 0 ) )
-( ( 3264.7702636719 347.7127685547 144 0.0234370008 0.3174780011 ) ( 3265.5249023438 348.3687744141 129.4393920898 0.0234370008 0.1961330026 ) ( 3249.9721679688 338.8237304688 113 0.0234370008 0 ) )
-( ( 3262.5063476562 345.7446289062 144 0.0468729995 0.3174780011 ) ( 3263.2607421875 346.4007568359 129.4393920898 0.0468729995 0.1961330026 ) ( 3249.9721679688 338.8237304688 113 0.0468729995 0 ) )
-( ( 3260.2421875 343.7763671875 144 0.0703110024 0.3174780011 ) ( 3260.9968261719 344.4323730469 129.4393920898 0.0703110024 0.1961330026 ) ( 3249.9721679688 338.8237304688 113 0.0703110024 0 ) )
-( ( 3258.2739257812 346.0407714844 144 0.09375 0.3174780011 ) ( 3259.0288085938 346.6965332031 129.4393920898 0.09375 0.1961330026 ) ( 3249.9721679688 338.8237304688 113 0.09375 0 ) )
-( ( 3256.3056640625 348.3048095703 144 0.1171870008 0.3174780011 ) ( 3257.0603027344 348.9609375 129.4393920898 0.1171870008 0.1961330026 ) ( 3249.9721679688 338.8237304688 113 0.1171870008 0 ) )
-( ( 3258.5700683594 350.2729492188 144 0.1406259984 0.3174780011 ) ( 3259.3247070312 350.9290771484 129.4393920898 0.1406259984 0.1961330026 ) ( 3249.9721679688 338.8237304688 113 0.1406259984 0 ) )
-( ( 3260.833984375 352.2407226562 144 0.1640599966 0.3174780011 ) ( 3261.5888671875 352.8970947266 129.4393920898 0.1640599966 0.1961330026 ) ( 3249.9721679688 338.8237304688 113 0.1640599966 0 ) )
-( ( 3262.8022460938 349.9769287109 144 0.1874960065 0.3174780011 ) ( 3263.5568847656 350.6331787109 129.4393920898 0.1874960065 0.1961330026 ) ( 3249.9721679688 338.8237304688 113 0.1874960065 0 ) )
-)
-}
-}
-// brush 145
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 9 3 0 0 0 )
-(
-( ( 3220.2019042969 393.6066894531 144 0 0.3174780011 ) ( 3220.8579101562 394.3614501953 129.4393920898 0 0.1961330026 ) ( 3209.048828125 380.7762451172 113 0 0 ) )
-( ( 3222.4658203125 391.6383056641 144 0.0234379992 0.3174780011 ) ( 3223.1220703125 392.3929443359 129.4393920898 0.0234379992 0.1961330026 ) ( 3209.048828125 380.7762451172 113 0.0234379992 0 ) )
-( ( 3220.4978027344 389.3742675781 144 0.0468740016 0.3174780011 ) ( 3221.1538085938 390.12890625 129.4393920898 0.0468740016 0.1961330026 ) ( 3209.048828125 380.7762451172 113 0.0468740016 0 ) )
-( ( 3218.5297851562 387.1099853516 144 0.0703129992 0.3174780011 ) ( 3219.1860351562 387.8646240234 129.4393920898 0.0703129992 0.1961330026 ) ( 3209.048828125 380.7762451172 113 0.0703129992 0 ) )
-( ( 3216.265625 389.0784912109 144 0.0937509984 0.3174780011 ) ( 3216.921875 389.8330078125 129.4393920898 0.0937509984 0.1961330026 ) ( 3209.048828125 380.7762451172 113 0.0937509984 0 ) )
-( ( 3214.0014648438 391.0466308594 144 0.1171889976 0.3174780011 ) ( 3214.6572265625 391.8015136719 129.4393920898 0.1171889976 0.1961330026 ) ( 3209.048828125 380.7762451172 113 0.1171889976 0 ) )
-( ( 3215.9699707031 393.3106689453 144 0.1406279951 0.3174780011 ) ( 3216.6257324219 394.0654296875 129.4393920898 0.1406279951 0.1961330026 ) ( 3209.048828125 380.7762451172 113 0.1406279951 0 ) )
-( ( 3217.9379882812 395.5744628906 144 0.1640619934 0.3174780011 ) ( 3218.5939941406 396.3293457031 129.4393920898 0.1640619934 0.1961330026 ) ( 3209.048828125 380.7762451172 113 0.1640619934 0 ) )
-( ( 3220.2019042969 393.6066894531 144 0.1874970049 0.3174780011 ) ( 3220.8579101562 394.3614501953 129.4393920898 0.1874970049 0.1961330026 ) ( 3209.048828125 380.7762451172 113 0.1874970049 0 ) )
-)
-}
-}
-// brush 146
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 9 3 0 0 0 )
-(
-( ( 3171.2019042969 431.6066894531 144 0 0.3174780011 ) ( 3171.8579101562 432.3614501953 129.4393920898 0 0.1961330026 ) ( 3160.048828125 418.7762451172 113 0 0 ) )
-( ( 3173.4658203125 429.6383056641 144 0.0234379992 0.3174780011 ) ( 3174.1220703125 430.3929443359 129.4393920898 0.0234379992 0.1961330026 ) ( 3160.048828125 418.7762451172 113 0.0234379992 0 ) )
-( ( 3171.4978027344 427.3742675781 144 0.0468740016 0.3174780011 ) ( 3172.1538085938 428.12890625 129.4393920898 0.0468740016 0.1961330026 ) ( 3160.048828125 418.7762451172 113 0.0468740016 0 ) )
-( ( 3169.5297851562 425.1099853516 144 0.0703129992 0.3174780011 ) ( 3170.1860351562 425.8646240234 129.4393920898 0.0703129992 0.1961330026 ) ( 3160.048828125 418.7762451172 113 0.0703129992 0 ) )
-( ( 3167.265625 427.0784912109 144 0.0937509984 0.3174780011 ) ( 3167.921875 427.8330078125 129.4393920898 0.0937509984 0.1961330026 ) ( 3160.048828125 418.7762451172 113 0.0937509984 0 ) )
-( ( 3165.0014648438 429.0466308594 144 0.1171889976 0.3174780011 ) ( 3165.6572265625 429.8015136719 129.4393920898 0.1171889976 0.1961330026 ) ( 3160.048828125 418.7762451172 113 0.1171889976 0 ) )
-( ( 3166.9699707031 431.3106689453 144 0.1406279951 0.3174780011 ) ( 3167.6257324219 432.0654296875 129.4393920898 0.1406279951 0.1961330026 ) ( 3160.048828125 418.7762451172 113 0.1406279951 0 ) )
-( ( 3168.9379882812 433.5744628906 144 0.1640619934 0.3174780011 ) ( 3169.5939941406 434.3293457031 129.4393920898 0.1640619934 0.1961330026 ) ( 3160.048828125 418.7762451172 113 0.1640619934 0 ) )
-( ( 3171.2019042969 431.6066894531 144 0.1874970049 0.3174780011 ) ( 3171.8579101562 432.3614501953 129.4393920898 0.1874970049 0.1961330026 ) ( 3160.048828125 418.7762451172 113 0.1874970049 0 ) )
-)
-}
-}
-// brush 147
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 9 3 0 0 0 )
-(
-( ( 3115.2514648438 466.2585449219 144 0 0.3174780011 ) ( 3115.7663574219 467.1158447266 129.4393920898 0 0.1961330026 ) ( 3106.4958496094 451.6864013672 113 0 0 ) )
-( ( 3117.8227539062 464.7135009766 144 0.0234360006 0.3174780011 ) ( 3118.337890625 465.5704345703 129.4393920898 0.0234360006 0.1961330026 ) ( 3106.4958496094 451.6864013672 113 0.0234360006 0 ) )
-( ( 3116.2778320312 462.1420898438 144 0.0468729995 0.3174780011 ) ( 3116.79296875 462.9991455078 129.4393920898 0.0468729995 0.1961330026 ) ( 3106.4958496094 451.6864013672 113 0.0468729995 0 ) )
-( ( 3114.7326660156 459.5704345703 144 0.0703120008 0.3174780011 ) ( 3115.2478027344 460.4273681641 129.4393920898 0.0703120008 0.1961330026 ) ( 3106.4958496094 451.6864013672 113 0.0703120008 0 ) )
-( ( 3112.1611328125 461.1157226562 144 0.0937490016 0.3174780011 ) ( 3112.6762695312 461.9727783203 129.4393920898 0.0937490016 0.1961330026 ) ( 3106.4958496094 451.6864013672 113 0.0937490016 0 ) )
-( ( 3109.5895996094 462.6610107422 144 0.1171879992 0.3174780011 ) ( 3110.1044921875 463.5183105469 129.4393920898 0.1171879992 0.1961330026 ) ( 3106.4958496094 451.6864013672 113 0.1171879992 0 ) )
-( ( 3111.1350097656 465.2325439453 144 0.1406269968 0.3174780011 ) ( 3111.6499023438 466.08984375 129.4393920898 0.1406269968 0.1961330026 ) ( 3106.4958496094 451.6864013672 113 0.1406269968 0 ) )
-( ( 3112.6799316406 467.8035888672 144 0.164060995 0.3174780011 ) ( 3113.1950683594 468.6608886719 129.4393920898 0.164060995 0.1961330026 ) ( 3106.4958496094 451.6864013672 113 0.164060995 0 ) )
-( ( 3115.2514648438 466.2585449219 144 0.1874980032 0.3174780011 ) ( 3115.7663574219 467.1158447266 129.4393920898 0.1874980032 0.1961330026 ) ( 3106.4958496094 451.6864013672 113 0.1874980032 0 ) )
-)
-}
-}
-// brush 148
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 9 3 0 0 0 )
-(
-( ( 3054.2514648438 495.2585449219 144 0 0.3174780011 ) ( 3054.7663574219 496.1158447266 129.4393920898 0 0.1961330026 ) ( 3045.4958496094 480.6864013672 113 0 0 ) )
-( ( 3056.8227539062 493.7135009766 144 0.0234360006 0.3174780011 ) ( 3057.337890625 494.5704345703 129.4393920898 0.0234360006 0.1961330026 ) ( 3045.4958496094 480.6864013672 113 0.0234360006 0 ) )
-( ( 3055.2778320312 491.1420898438 144 0.0468729995 0.3174780011 ) ( 3055.79296875 491.9991455078 129.4393920898 0.0468729995 0.1961330026 ) ( 3045.4958496094 480.6864013672 113 0.0468729995 0 ) )
-( ( 3053.7326660156 488.5704345703 144 0.0703120008 0.3174780011 ) ( 3054.2478027344 489.4273681641 129.4393920898 0.0703120008 0.1961330026 ) ( 3045.4958496094 480.6864013672 113 0.0703120008 0 ) )
-( ( 3051.1611328125 490.1157226562 144 0.0937490016 0.3174780011 ) ( 3051.6762695312 490.9727783203 129.4393920898 0.0937490016 0.1961330026 ) ( 3045.4958496094 480.6864013672 113 0.0937490016 0 ) )
-( ( 3048.5895996094 491.6610107422 144 0.1171879992 0.3174780011 ) ( 3049.1044921875 492.5183105469 129.4393920898 0.1171879992 0.1961330026 ) ( 3045.4958496094 480.6864013672 113 0.1171879992 0 ) )
-( ( 3050.1350097656 494.2325439453 144 0.1406269968 0.3174780011 ) ( 3050.6499023438 495.08984375 129.4393920898 0.1406269968 0.1961330026 ) ( 3045.4958496094 480.6864013672 113 0.1406269968 0 ) )
-( ( 3051.6799316406 496.8035888672 144 0.164060995 0.3174780011 ) ( 3052.1950683594 497.6608886719 129.4393920898 0.164060995 0.1961330026 ) ( 3045.4958496094 480.6864013672 113 0.164060995 0 ) )
-( ( 3054.2514648438 495.2585449219 144 0.1874980032 0.3174780011 ) ( 3054.7663574219 496.1158447266 129.4393920898 0.1874980032 0.1961330026 ) ( 3045.4958496094 480.6864013672 113 0.1874980032 0 ) )
-)
-}
-}
-// brush 149
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 9 3 0 0 0 )
-(
-( ( 2987.9455566406 519.4208984375 144 0 0.3174790144 ) ( 2988.4150390625 520.3039550781 129.4393920898 0 0.1961330026 ) ( 2979.9645996094 504.4104003906 113 0 0 ) )
-( ( 2990.5942382812 518.0123291016 144 0.0234370008 0.3174790144 ) ( 2991.0639648438 518.8952636719 129.4393920898 0.0234370008 0.1961330026 ) ( 2979.9645996094 504.4104003906 113 0.0234370008 0 ) )
-( ( 2989.1860351562 515.3637695312 144 0.0468729995 0.3174790144 ) ( 2989.6555175781 516.2465820312 129.4393920898 0.0468729995 0.1961330026 ) ( 2979.9645996094 504.4104003906 113 0.0468729995 0 ) )
-( ( 2987.7775878906 512.7147216797 144 0.0703120008 0.3174790144 ) ( 2988.2470703125 513.5972900391 129.4393920898 0.0703120008 0.1961330026 ) ( 2979.9645996094 504.4104003906 113 0.0703120008 0 ) )
-( ( 2985.1286621094 514.1232910156 144 0.0937490016 0.3174790144 ) ( 2985.5983886719 515.0061035156 129.4393920898 0.0937490016 0.1961330026 ) ( 2979.9645996094 504.4104003906 113 0.0937490016 0 ) )
-( ( 2982.4797363281 515.5318603516 144 0.1171879992 0.3174790144 ) ( 2982.9489746094 516.4149169922 129.4393920898 0.1171879992 0.1961330026 ) ( 2979.9645996094 504.4104003906 113 0.1171879992 0 ) )
-( ( 2983.8884277344 518.1807861328 144 0.1406279951 0.3174790144 ) ( 2984.3576660156 519.0638427734 129.4393920898 0.1406279951 0.1961330026 ) ( 2979.9645996094 504.4104003906 113 0.1406279951 0 ) )
-( ( 2985.296875 520.8292236328 144 0.1640619934 0.3174790144 ) ( 2985.7663574219 521.7122802734 129.4393920898 0.1640619934 0.1961330026 ) ( 2979.9645996094 504.4104003906 113 0.1640619934 0 ) )
-( ( 2987.9455566406 519.4208984375 144 0.1874980032 0.3174790144 ) ( 2988.4150390625 520.3039550781 129.4393920898 0.1874980032 0.1961330026 ) ( 2979.9645996094 504.4104003906 113 0.1874980032 0 ) )
-)
-}
-}
-// brush 150
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 9 3 0 0 0 )
-(
-( ( 2912.1447753906 539.6711425781 144 0 0.3174790144 ) ( 2912.5029296875 540.6048583984 129.4393920898 0 0.196134001 ) ( 2906.052734375 523.7998046875 113 0 0 ) )
-( ( 2914.9453125 538.595703125 144 0.0234379992 0.3174790144 ) ( 2915.3039550781 539.5294189453 129.4393920898 0.0234379992 0.196134001 ) ( 2906.052734375 523.7998046875 113 0.0234379992 0 ) )
-( ( 2913.8703613281 535.7952880859 144 0.0468729995 0.3174790144 ) ( 2914.2287597656 536.7288818359 129.4393920898 0.0468729995 0.196134001 ) ( 2906.052734375 523.7998046875 113 0.0468729995 0 ) )
-( ( 2912.7954101562 532.9945068359 144 0.0703110024 0.3174790144 ) ( 2913.1538085938 533.927734375 129.4393920898 0.0703110024 0.196134001 ) ( 2906.052734375 523.7998046875 113 0.0703110024 0 ) )
-( ( 2909.9946289062 534.0697021484 144 0.0937480032 0.3174790144 ) ( 2910.3530273438 535.0034179688 129.4393920898 0.0937480032 0.196134001 ) ( 2906.052734375 523.7998046875 113 0.0937480032 0 ) )
-( ( 2907.1936035156 535.1448974609 144 0.1171870008 0.3174790144 ) ( 2907.5517578125 536.0784912109 129.4393920898 0.1171870008 0.196134001 ) ( 2906.052734375 523.7998046875 113 0.1171870008 0 ) )
-( ( 2908.2690429688 537.9456787109 144 0.1406259984 0.3174790144 ) ( 2908.6271972656 538.8793945312 129.4393920898 0.1406259984 0.196134001 ) ( 2906.052734375 523.7998046875 113 0.1406259984 0 ) )
-( ( 2909.3442382812 540.74609375 144 0.164060995 0.3174790144 ) ( 2909.7026367188 541.6798095703 129.4393920898 0.164060995 0.196134001 ) ( 2906.052734375 523.7998046875 113 0.164060995 0 ) )
-( ( 2912.1447753906 539.6711425781 144 0.1874970049 0.3174790144 ) ( 2912.5029296875 540.6048583984 129.4393920898 0.1874970049 0.196134001 ) ( 2906.052734375 523.7998046875 113 0.1874970049 0 ) )
-)
-}
-}
-// brush 151
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 9 3 0 0 0 )
-(
-( ( 2827.1447753906 555.6711425781 144 0 0.3174790144 ) ( 2827.5029296875 556.6048583984 128.5 0 0.196134001 ) ( 2821.052734375 539.7998046875 111 0 0 ) )
-( ( 2829.9453125 554.595703125 144 0.0234379992 0.3174790144 ) ( 2830.3039550781 555.5294189453 128.5 0.0234379992 0.196134001 ) ( 2821.052734375 539.7998046875 111 0.0234379992 0 ) )
-( ( 2828.8703613281 551.7952880859 144 0.0468729995 0.3174790144 ) ( 2829.2287597656 552.7288818359 128.5 0.0468729995 0.196134001 ) ( 2821.052734375 539.7998046875 111 0.0468729995 0 ) )
-( ( 2827.7954101562 548.9945068359 144 0.0703110024 0.3174790144 ) ( 2828.1538085938 549.927734375 128.5 0.0703110024 0.196134001 ) ( 2821.052734375 539.7998046875 111 0.0703110024 0 ) )
-( ( 2824.9946289062 550.0697021484 144 0.0937480032 0.3174790144 ) ( 2825.3530273438 551.0034179688 128.5 0.0937480032 0.196134001 ) ( 2821.052734375 539.7998046875 111 0.0937480032 0 ) )
-( ( 2822.1936035156 551.1448974609 144 0.1171870008 0.3174790144 ) ( 2822.5517578125 552.0784912109 128.5 0.1171870008 0.196134001 ) ( 2821.052734375 539.7998046875 111 0.1171870008 0 ) )
-( ( 2823.2690429688 553.9456787109 144 0.1406259984 0.3174790144 ) ( 2823.6271972656 554.8793945312 128.5 0.1406259984 0.196134001 ) ( 2821.052734375 539.7998046875 111 0.1406259984 0 ) )
-( ( 2824.3442382812 556.74609375 144 0.164060995 0.3174790144 ) ( 2824.7026367188 557.6798095703 128.5 0.164060995 0.196134001 ) ( 2821.052734375 539.7998046875 111 0.164060995 0 ) )
-( ( 2827.1447753906 555.6711425781 144 0.1874970049 0.3174790144 ) ( 2827.5029296875 556.6048583984 128.5 0.1874970049 0.196134001 ) ( 2821.052734375 539.7998046875 111 0.1874970049 0 ) )
-)
-}
-}
-// brush 152
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 9 3 0 0 0 )
-(
-( ( 2740.3195800781 566.8217773438 144 0 0.3174790144 ) ( 2740.5612792969 567.7922363281 128.5 0 0.1961330026 ) ( 2736.20703125 550.3264160156 111 0 0 ) )
-( ( 2743.23046875 566.0958251953 144 0.0234370008 0.3174790144 ) ( 2743.4724121094 567.0661621094 128.5 0.0234370008 0.1961330026 ) ( 2736.20703125 550.3264160156 111 0.0234370008 0 ) )
-( ( 2742.5046386719 563.1851806641 144 0.0468729995 0.3174790144 ) ( 2742.7465820312 564.1555175781 128.5 0.0468729995 0.1961330026 ) ( 2736.20703125 550.3264160156 111 0.0468729995 0 ) )
-( ( 2741.7788085938 560.2742919922 144 0.0703110024 0.3174790144 ) ( 2742.0209960938 561.2442626953 128.5 0.0703110024 0.1961330026 ) ( 2736.20703125 550.3264160156 111 0.0703110024 0 ) )
-( ( 2738.8679199219 561.0001220703 144 0.0937480032 0.3174790144 ) ( 2739.1101074219 561.970703125 128.5 0.0937480032 0.1961330026 ) ( 2736.20703125 550.3264160156 111 0.0937480032 0 ) )
-( ( 2735.95703125 561.7259521484 144 0.1171870008 0.3174790144 ) ( 2736.1987304688 562.6962890625 128.5 0.1171870008 0.1961330026 ) ( 2736.20703125 550.3264160156 111 0.1171870008 0 ) )
-( ( 2736.6831054688 564.6369628906 144 0.1406259984 0.3174790144 ) ( 2736.9248046875 565.6072998047 128.5 0.1406259984 0.1961330026 ) ( 2736.20703125 550.3264160156 111 0.1406259984 0 ) )
-( ( 2737.4086914062 567.5474853516 144 0.164060995 0.3174790144 ) ( 2737.6508789062 568.5179443359 128.5 0.164060995 0.1961330026 ) ( 2736.20703125 550.3264160156 111 0.164060995 0 ) )
-( ( 2740.3195800781 566.8217773438 144 0.1874970049 0.3174790144 ) ( 2740.5612792969 567.7922363281 128.5 0.1874970049 0.1961330026 ) ( 2736.20703125 550.3264160156 111 0.1874970049 0 ) )
-)
-}
-}
-// brush 153
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 9 3 0 0 0 )
-(
-( ( 2647.2924804688 573.8646240234 144 0 0.3174780011 ) ( 2647.3969726562 574.8592529297 128.5 0 0.1961330026 ) ( 2645.5158691406 556.9575195312 111 0 0 ) )
-( ( 2650.2761230469 573.5509033203 144 0.0234370008 0.3174780011 ) ( 2650.380859375 574.5452880859 128.5 0.0234370008 0.1961330026 ) ( 2645.5158691406 556.9575195312 111 0.0234370008 0 ) )
-( ( 2649.9624023438 570.5675048828 144 0.0468740016 0.3174780011 ) ( 2650.0668945312 571.5621337891 128.5 0.0468740016 0.1961330026 ) ( 2645.5158691406 556.9575195312 111 0.0468740016 0 ) )
-( ( 2649.6489257812 567.583984375 144 0.0703110024 0.3174780011 ) ( 2649.7536621094 568.5782470703 128.5 0.0703110024 0.1961330026 ) ( 2645.5158691406 556.9575195312 111 0.0703110024 0 ) )
-( ( 2646.6655273438 567.8974609375 144 0.0937480032 0.3174780011 ) ( 2646.7700195312 568.892578125 128.5 0.0937480032 0.1961330026 ) ( 2645.5158691406 556.9575195312 111 0.0937480032 0 ) )
-( ( 2643.681640625 568.2111816406 144 0.1171870008 0.3174780011 ) ( 2643.7858886719 569.2056884766 128.5 0.1171870008 0.1961330026 ) ( 2645.5158691406 556.9575195312 111 0.1171870008 0 ) )
-( ( 2643.9956054688 571.1950683594 144 0.1406279951 0.3174780011 ) ( 2644.0998535156 572.1893310547 128.5 0.1406279951 0.1961330026 ) ( 2645.5158691406 556.9575195312 111 0.1406279951 0 ) )
-( ( 2644.3090820312 574.1781005859 144 0.164060995 0.3174780011 ) ( 2644.4135742188 575.1727294922 128.5 0.164060995 0.1961330026 ) ( 2645.5158691406 556.9575195312 111 0.164060995 0 ) )
-( ( 2647.2924804688 573.8646240234 144 0.1874970049 0.3174780011 ) ( 2647.3969726562 574.8592529297 128.5 0.1874970049 0.1961330026 ) ( 2645.5158691406 556.9575195312 111 0.1874970049 0 ) )
-)
-}
-}
-// brush 154
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 9 3 0 0 0 )
-(
-( ( 2551.7431640625 575.8658447266 144 0 0.3174790144 ) ( 2551.7780761719 576.8653564453 128.5 0 0.1961330026 ) ( 2551.1501464844 558.8759765625 111 0 0 ) )
-( ( 2554.7414550781 575.7611083984 144 0.0234370008 0.3174790144 ) ( 2554.7763671875 576.7603759766 128.5 0.0234370008 0.1961330026 ) ( 2551.1501464844 558.8759765625 111 0.0234370008 0 ) )
-( ( 2554.63671875 572.7630615234 144 0.0468740016 0.3174790144 ) ( 2554.6716308594 573.7625732422 128.5 0.0468740016 0.1961330026 ) ( 2551.1501464844 558.8759765625 111 0.0468740016 0 ) )
-( ( 2554.5319824219 569.7648925781 144 0.0703110024 0.3174790144 ) ( 2554.5671386719 570.7639160156 128.5 0.0703110024 0.1961330026 ) ( 2551.1501464844 558.8759765625 111 0.0703110024 0 ) )
-( ( 2551.5336914062 569.8695068359 144 0.0937490016 0.3174790144 ) ( 2551.5688476562 570.8695068359 128.5 0.0937490016 0.1961330026 ) ( 2551.1501464844 558.8759765625 111 0.0937490016 0 ) )
-( ( 2548.5354003906 569.9742431641 144 0.1171879992 0.3174790144 ) ( 2548.5703125 570.9736328125 128.5 0.1171879992 0.1961330026 ) ( 2551.1501464844 558.8759765625 111 0.1171879992 0 ) )
-( ( 2548.6403808594 572.9727783203 144 0.1406289935 0.3174790144 ) ( 2548.6752929688 573.9719238281 128.5 0.1406289935 0.1961330026 ) ( 2551.1501464844 558.8759765625 111 0.1406289935 0 ) )
-( ( 2548.7451171875 575.9705810547 144 0.1640630066 0.3174790144 ) ( 2548.7800292969 576.9699707031 128.5 0.1640630066 0.1961330026 ) ( 2551.1501464844 558.8759765625 111 0.1640630066 0 ) )
-( ( 2551.7431640625 575.8658447266 144 0.1874990016 0.3174790144 ) ( 2551.7780761719 576.8653564453 128.5 0.1874990016 0.1961330026 ) ( 2551.1501464844 558.8759765625 111 0.1874990016 0 ) )
-)
-}
-}
-// brush 155
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 9 3 0 0 0 )
-(
-( ( 3362 -772 113 0 0 ) ( 3380 -772 129.4393920898 0 0.1961310059 ) ( 3379 -772 144 0 0.3174769878 ) )
-( ( 3362 -772 113 0.0234379992 0 ) ( 3380 -769 129.4393920898 0.0234379992 0.1961310059 ) ( 3379 -769 144 0.0234379992 0.3174769878 ) )
-( ( 3362 -772 113 0.046875 0 ) ( 3377 -769 129.4393920898 0.046875 0.1961310059 ) ( 3376 -769 144 0.046875 0.3174769878 ) )
-( ( 3362 -772 113 0.0703129992 0 ) ( 3374 -769 129.4393920898 0.0703129992 0.1961310059 ) ( 3373 -769 144 0.0703129992 0.3174769878 ) )
-( ( 3362 -772 113 0.09375 0 ) ( 3374 -772 129.4393920898 0.09375 0.1961310059 ) ( 3373 -772 144 0.09375 0.3174769878 ) )
-( ( 3362 -772 113 0.1171879992 0 ) ( 3374 -775 129.4393920898 0.1171879992 0.1961310059 ) ( 3373 -775 144 0.1171879992 0.3174769878 ) )
-( ( 3362 -772 113 0.140625 0 ) ( 3377 -775 129.4393920898 0.140625 0.1961310059 ) ( 3376 -775 144 0.140625 0.3174769878 ) )
-( ( 3362 -772 113 0.1640630066 0 ) ( 3380 -775 129.4393920898 0.1640630066 0.1961310059 ) ( 3379 -775 144 0.1640630066 0.3174769878 ) )
-( ( 3362 -772 113 0.1875 0 ) ( 3380 -772 129.4393920898 0.1875 0.1961310059 ) ( 3379 -772 144 0.1875 0.3174769878 ) )
-)
-}
-}
-// brush 156
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 9 3 0 0 0 )
-(
-( ( 3360.0874023438 -823.7473144531 113 0 0 ) ( 3377.9125976562 -826.2526855469 129.4393920898 0 0.1961320043 ) ( 3376.9221191406 -826.1134033203 144 0 0.3174769878 ) )
-( ( 3360.0874023438 -823.7473144531 113 0.0234379992 0 ) ( 3378.3298339844 -823.2817382812 129.4393920898 0.0234379992 0.1961320043 ) ( 3377.33984375 -823.142578125 144 0.0234379992 0.3174769878 ) )
-( ( 3360.0874023438 -823.7473144531 113 0.0468759984 0 ) ( 3375.3591308594 -822.8642578125 129.4393920898 0.0468759984 0.1961320043 ) ( 3374.3688964844 -822.7250976562 144 0.0468759984 0.3174769878 ) )
-( ( 3360.0874023438 -823.7473144531 113 0.0703129992 0 ) ( 3372.3884277344 -822.4466552734 129.4393920898 0.0703129992 0.1961320043 ) ( 3371.3979492188 -822.3073730469 144 0.0703129992 0.3174769878 ) )
-( ( 3360.0874023438 -823.7473144531 113 0.0937509984 0 ) ( 3371.9709472656 -825.4174804688 129.4393920898 0.0937509984 0.1961320043 ) ( 3370.98046875 -825.2783203125 144 0.0937509984 0.3174769878 ) )
-( ( 3360.0874023438 -823.7473144531 113 0.1171889976 0 ) ( 3371.5532226562 -828.3884277344 129.4393920898 0.1171889976 0.1961320043 ) ( 3370.5629882812 -828.2490234375 144 0.1171889976 0.3174769878 ) )
-( ( 3360.0874023438 -823.7473144531 113 0.1406269968 0 ) ( 3374.5241699219 -828.8059082031 129.4393920898 0.1406269968 0.1961320043 ) ( 3373.5339355469 -828.6667480469 144 0.1406269968 0.3174769878 ) )
-( ( 3360.0874023438 -823.7473144531 113 0.164064005 0 ) ( 3377.4948730469 -829.2233886719 129.4393920898 0.164064005 0.1961320043 ) ( 3376.5046386719 -829.0842285156 144 0.164064005 0.3174769878 ) )
-( ( 3360.0874023438 -823.7473144531 113 0.1875009984 0 ) ( 3377.9125976562 -826.2526855469 129.4393920898 0.1875009984 0.1961320043 ) ( 3376.9221191406 -826.1134033203 144 0.1875009984 0.3174769878 ) )
-)
-}
-}
-// brush 157
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 9 3 0 0 0 )
-(
-( ( 3351.3195800781 -888.8254394531 113 0 0 ) ( 3368.7849121094 -893.1801757812 129.4393920898 0 0.1961320043 ) ( 3367.814453125 -892.9382324219 144 0 0.3174769878 ) )
-( ( 3351.3195800781 -888.8254394531 113 0.0234379992 0 ) ( 3369.5107421875 -890.2690429688 129.4393920898 0.0234379992 0.1961320043 ) ( 3368.5402832031 -890.0272216797 144 0.0234379992 0.3174769878 ) )
-( ( 3351.3195800781 -888.8254394531 113 0.046875 0 ) ( 3366.5998535156 -889.5434570312 129.4393920898 0.046875 0.1961320043 ) ( 3365.6293945312 -889.3013916016 144 0.046875 0.3174769878 ) )
-( ( 3351.3195800781 -888.8254394531 113 0.0703129992 0 ) ( 3363.6889648438 -888.8173828125 129.4393920898 0.0703129992 0.1961320043 ) ( 3362.71875 -888.5755615234 144 0.0703129992 0.3174769878 ) )
-( ( 3351.3195800781 -888.8254394531 113 0.0937519968 0 ) ( 3362.9633789062 -891.728515625 129.4393920898 0.0937519968 0.1961320043 ) ( 3361.9929199219 -891.4865722656 144 0.0937519968 0.3174769878 ) )
-( ( 3351.3195800781 -888.8254394531 113 0.1171879992 0 ) ( 3362.2373046875 -894.6394042969 129.4393920898 0.1171879992 0.1961320043 ) ( 3361.2670898438 -894.3974609375 144 0.1171879992 0.3174769878 ) )
-( ( 3351.3195800781 -888.8254394531 113 0.1406269968 0 ) ( 3365.1484375 -895.365234375 129.4393920898 0.1406269968 0.1961320043 ) ( 3364.1779785156 -895.1232910156 144 0.1406269968 0.3174769878 ) )
-( ( 3351.3195800781 -888.8254394531 113 0.1640630066 0 ) ( 3368.0590820312 -896.0909423828 129.4393920898 0.1640630066 0.1961320043 ) ( 3367.0888671875 -895.8488769531 144 0.1640630066 0.3174769878 ) )
-( ( 3351.3195800781 -888.8254394531 113 0.1875 0 ) ( 3368.7849121094 -893.1801757812 129.4393920898 0.1875 0.1961320043 ) ( 3367.814453125 -892.9382324219 144 0.1875 0.3174769878 ) )
-)
-}
-}
-// brush 158
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 9 3 0 0 0 )
-(
-( ( 3336.75390625 -948.8858642578 113 0 0 ) ( 3353.6684570312 -955.0424804688 129.4393920898 0 0.1961320043 ) ( 3352.7287597656 -954.7003173828 144 0 0.3174769878 ) )
-( ( 3336.75390625 -948.8858642578 113 0.0234379992 0 ) ( 3354.6943359375 -952.2231445312 129.4393920898 0.0234379992 0.1961320043 ) ( 3353.7548828125 -951.8812255859 144 0.0234379992 0.3174769878 ) )
-( ( 3336.75390625 -948.8858642578 113 0.0468740016 0 ) ( 3351.8754882812 -951.197265625 129.4393920898 0.0468740016 0.1961320043 ) ( 3350.9357910156 -950.8551025391 144 0.0468740016 0.3174769878 ) )
-( ( 3336.75390625 -948.8858642578 113 0.0703129992 0 ) ( 3349.0563964844 -950.1708984375 129.4393920898 0.0703129992 0.1961320043 ) ( 3348.1166992188 -949.8289794922 144 0.0703129992 0.3174769878 ) )
-( ( 3336.75390625 -948.8858642578 113 0.0937509984 0 ) ( 3348.0302734375 -952.990234375 129.4393920898 0.0937509984 0.1961320043 ) ( 3347.0905761719 -952.6481933594 144 0.0937509984 0.3174769878 ) )
-( ( 3336.75390625 -948.8858642578 113 0.1171879992 0 ) ( 3347.0041503906 -955.8093261719 129.4393920898 0.1171879992 0.1961320043 ) ( 3346.064453125 -955.4671630859 144 0.1171879992 0.3174769878 ) )
-( ( 3336.75390625 -948.8858642578 113 0.1406269968 0 ) ( 3349.8232421875 -956.8354492188 129.4393920898 0.1406269968 0.1961320043 ) ( 3348.8837890625 -956.4934082031 144 0.1406269968 0.3174769878 ) )
-( ( 3336.75390625 -948.8858642578 113 0.1640619934 0 ) ( 3352.6423339844 -957.8614501953 129.4393920898 0.1640619934 0.1961320043 ) ( 3351.7026367188 -957.5192871094 144 0.1640619934 0.3174769878 ) )
-( ( 3336.75390625 -948.8858642578 113 0.1875 0 ) ( 3353.6684570312 -955.0424804688 129.4393920898 0.1875 0.1961320043 ) ( 3352.7287597656 -954.7003173828 144 0.1875 0.3174769878 ) )
-)
-}
-}
-// brush 159
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 9 3 0 0 0 )
-(
-( ( 3316.3852539062 -1003.7934570312 113 0 0 ) ( 3332.4233398438 -1011.9655761719 129.4393920898 0 0.1961320043 ) ( 3331.5322265625 -1011.5113525391 144 0 0.3174780011 ) )
-( ( 3316.3852539062 -1003.7934570312 113 0.0234370008 0 ) ( 3333.78515625 -1009.2923583984 129.4393920898 0.0234370008 0.1961320043 ) ( 3332.8942871094 -1008.8383789062 144 0.0234370008 0.3174780011 ) )
-( ( 3316.3852539062 -1003.7934570312 113 0.0468740016 0 ) ( 3331.1123046875 -1007.9305419922 129.4393920898 0.0468740016 0.1961320043 ) ( 3330.2214355469 -1007.4763183594 144 0.0468740016 0.3174780011 ) )
-( ( 3316.3852539062 -1003.7934570312 113 0.0703120008 0 ) ( 3328.4392089844 -1006.5682373047 129.4393920898 0.0703120008 0.1961320043 ) ( 3327.5483398438 -1006.1142578125 144 0.0703120008 0.3174780011 ) )
-( ( 3316.3852539062 -1003.7934570312 113 0.09375 0 ) ( 3327.0773925781 -1009.2414550781 129.4393920898 0.09375 0.1961320043 ) ( 3326.1862792969 -1008.7873535156 144 0.09375 0.3174780011 ) )
-( ( 3316.3852539062 -1003.7934570312 113 0.1171870008 0 ) ( 3325.7153320312 -1011.9145507812 129.4393920898 0.1171870008 0.1961320043 ) ( 3324.82421875 -1011.4604492188 144 0.1171870008 0.3174780011 ) )
-( ( 3316.3852539062 -1003.7934570312 113 0.1406269968 0 ) ( 3328.3884277344 -1013.2766113281 129.4393920898 0.1406269968 0.1961320043 ) ( 3327.4975585938 -1012.8225097656 144 0.1406269968 0.3174780011 ) )
-( ( 3316.3852539062 -1003.7934570312 113 0.164060995 0 ) ( 3331.0615234375 -1014.6384277344 129.4393920898 0.164060995 0.1961320043 ) ( 3330.1701660156 -1014.1843261719 144 0.164060995 0.3174780011 ) )
-( ( 3316.3852539062 -1003.7934570312 113 0.1874990016 0 ) ( 3332.4233398438 -1011.9655761719 129.4393920898 0.1874990016 0.1961320043 ) ( 3331.5322265625 -1011.5113525391 144 0.1874990016 0.3174780011 ) )
-)
-}
-}
-// brush 160
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 9 3 0 0 0 )
-(
-( ( 3287.2631835938 -1055.6499023438 113 0 0 ) ( 3302.0080566406 -1065.9747314453 129.4393920898 0 0.1961330026 ) ( 3301.1889648438 -1065.4008789062 144 0 0.3174780011 ) )
-( ( 3287.2631835938 -1055.6499023438 113 0.0234370008 0 ) ( 3303.728515625 -1063.5169677734 129.4393920898 0.0234370008 0.1961330026 ) ( 3302.9094238281 -1062.943359375 144 0.0234370008 0.3174780011 ) )
-( ( 3287.2631835938 -1055.6499023438 113 0.0468729995 0 ) ( 3301.2712402344 -1061.7965087891 129.4393920898 0.0468729995 0.1961330026 ) ( 3300.4521484375 -1061.22265625 144 0.0468729995 0.3174780011 ) )
-( ( 3287.2631835938 -1055.6499023438 113 0.0703120008 0 ) ( 3298.8139648438 -1060.0754394531 129.4393920898 0.0703120008 0.1961330026 ) ( 3297.9946289062 -1059.5018310547 144 0.0703120008 0.3174780011 ) )
-( ( 3287.2631835938 -1055.6499023438 113 0.09375 0 ) ( 3297.0932617188 -1062.5329589844 129.4393920898 0.09375 0.1961330026 ) ( 3296.2739257812 -1061.9594726562 144 0.09375 0.3174780011 ) )
-( ( 3287.2631835938 -1055.6499023438 113 0.1171879992 0 ) ( 3295.3720703125 -1064.9906005859 129.4393920898 0.1171879992 0.1961330026 ) ( 3294.5532226562 -1064.4169921875 144 0.1171879992 0.3174780011 ) )
-( ( 3287.2631835938 -1055.6499023438 113 0.1406269968 0 ) ( 3297.8298339844 -1066.7114257812 129.4393920898 0.1406269968 0.1961330026 ) ( 3297.0107421875 -1066.1378173828 144 0.1406269968 0.3174780011 ) )
-( ( 3287.2631835938 -1055.6499023438 113 0.164060995 0 ) ( 3300.2873535156 -1068.4320068359 129.4393920898 0.164060995 0.1961330026 ) ( 3299.4680175781 -1067.8581542969 144 0.164060995 0.3174780011 ) )
-( ( 3287.2631835938 -1055.6499023438 113 0.1874980032 0 ) ( 3302.0080566406 -1065.9747314453 129.4393920898 0.1874980032 0.1961330026 ) ( 3301.1889648438 -1065.4008789062 144 0.1874980032 0.3174780011 ) )
-)
-}
-}
-// brush 161
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 9 3 0 0 0 )
-(
-( ( 3253.9721679688 -1101.8237304688 113 0 0 ) ( 3267.5568847656 -1113.6331787109 129.4393920898 0 0.1961330026 ) ( 3266.8022460938 -1112.9769287109 144 0 0.3174780011 ) )
-( ( 3253.9721679688 -1101.8237304688 113 0.0234370008 0 ) ( 3269.5249023438 -1111.3687744141 129.4393920898 0.0234370008 0.1961330026 ) ( 3268.7702636719 -1110.7127685547 144 0.0234370008 0.3174780011 ) )
-( ( 3253.9721679688 -1101.8237304688 113 0.0468729995 0 ) ( 3267.2607421875 -1109.4007568359 129.4393920898 0.0468729995 0.1961330026 ) ( 3266.5063476562 -1108.7446289062 144 0.0468729995 0.3174780011 ) )
-( ( 3253.9721679688 -1101.8237304688 113 0.0703110024 0 ) ( 3264.9968261719 -1107.4323730469 129.4393920898 0.0703110024 0.1961330026 ) ( 3264.2421875 -1106.7763671875 144 0.0703110024 0.3174780011 ) )
-( ( 3253.9721679688 -1101.8237304688 113 0.09375 0 ) ( 3263.0288085938 -1109.6965332031 129.4393920898 0.09375 0.1961330026 ) ( 3262.2739257812 -1109.0407714844 144 0.09375 0.3174780011 ) )
-( ( 3253.9721679688 -1101.8237304688 113 0.1171870008 0 ) ( 3261.0603027344 -1111.9609375 129.4393920898 0.1171870008 0.1961330026 ) ( 3260.3056640625 -1111.3048095703 144 0.1171870008 0.3174780011 ) )
-( ( 3253.9721679688 -1101.8237304688 113 0.1406259984 0 ) ( 3263.3247070312 -1113.9290771484 129.4393920898 0.1406259984 0.1961330026 ) ( 3262.5700683594 -1113.2729492188 144 0.1406259984 0.3174780011 ) )
-( ( 3253.9721679688 -1101.8237304688 113 0.1640599966 0 ) ( 3265.5888671875 -1115.8970947266 129.4393920898 0.1640599966 0.1961330026 ) ( 3264.833984375 -1115.2407226562 144 0.1640599966 0.3174780011 ) )
-( ( 3253.9721679688 -1101.8237304688 113 0.1874960065 0 ) ( 3267.5568847656 -1113.6331787109 129.4393920898 0.1874960065 0.1961330026 ) ( 3266.8022460938 -1112.9769287109 144 0.1874960065 0.3174780011 ) )
-)
-}
-}
-// brush 162
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 9 3 0 0 0 )
-(
-( ( 3213.048828125 -1144.7762451172 113 0 0 ) ( 3224.8579101562 -1158.3614501953 129.4393920898 0 0.1961330026 ) ( 3224.2019042969 -1157.6066894531 144 0 0.3174780011 ) )
-( ( 3213.048828125 -1144.7762451172 113 0.0234379992 0 ) ( 3227.1220703125 -1156.3929443359 129.4393920898 0.0234379992 0.1961330026 ) ( 3226.4658203125 -1155.6383056641 144 0.0234379992 0.3174780011 ) )
-( ( 3213.048828125 -1144.7762451172 113 0.0468740016 0 ) ( 3225.1538085938 -1154.12890625 129.4393920898 0.0468740016 0.1961330026 ) ( 3224.4978027344 -1153.3742675781 144 0.0468740016 0.3174780011 ) )
-( ( 3213.048828125 -1144.7762451172 113 0.0703129992 0 ) ( 3223.1860351562 -1151.8646240234 129.4393920898 0.0703129992 0.1961330026 ) ( 3222.5297851562 -1151.1099853516 144 0.0703129992 0.3174780011 ) )
-( ( 3213.048828125 -1144.7762451172 113 0.0937509984 0 ) ( 3220.921875 -1153.8330078125 129.4393920898 0.0937509984 0.1961330026 ) ( 3220.265625 -1153.0784912109 144 0.0937509984 0.3174780011 ) )
-( ( 3213.048828125 -1144.7762451172 113 0.1171889976 0 ) ( 3218.6572265625 -1155.8015136719 129.4393920898 0.1171889976 0.1961330026 ) ( 3218.0014648438 -1155.0466308594 144 0.1171889976 0.3174780011 ) )
-( ( 3213.048828125 -1144.7762451172 113 0.1406279951 0 ) ( 3220.6257324219 -1158.0654296875 129.4393920898 0.1406279951 0.1961330026 ) ( 3219.9699707031 -1157.3106689453 144 0.1406279951 0.3174780011 ) )
-( ( 3213.048828125 -1144.7762451172 113 0.1640619934 0 ) ( 3222.5939941406 -1160.3293457031 129.4393920898 0.1640619934 0.1961330026 ) ( 3221.9379882812 -1159.5744628906 144 0.1640619934 0.3174780011 ) )
-( ( 3213.048828125 -1144.7762451172 113 0.1874970049 0 ) ( 3224.8579101562 -1158.3614501953 129.4393920898 0.1874970049 0.1961330026 ) ( 3224.2019042969 -1157.6066894531 144 0.1874970049 0.3174780011 ) )
-)
-}
-}
-// brush 163
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 9 3 0 0 0 )
-(
-( ( 3164.048828125 -1183.7762451172 113 0 0 ) ( 3175.8579101562 -1197.3614501953 129.4393920898 0 0.1961330026 ) ( 3175.2019042969 -1196.6066894531 144 0 0.3174780011 ) )
-( ( 3164.048828125 -1183.7762451172 113 0.0234379992 0 ) ( 3178.1220703125 -1195.3929443359 129.4393920898 0.0234379992 0.1961330026 ) ( 3177.4658203125 -1194.6383056641 144 0.0234379992 0.3174780011 ) )
-( ( 3164.048828125 -1183.7762451172 113 0.0468740016 0 ) ( 3176.1538085938 -1193.12890625 129.4393920898 0.0468740016 0.1961330026 ) ( 3175.4978027344 -1192.3742675781 144 0.0468740016 0.3174780011 ) )
-( ( 3164.048828125 -1183.7762451172 113 0.0703129992 0 ) ( 3174.1860351562 -1190.8646240234 129.4393920898 0.0703129992 0.1961330026 ) ( 3173.5297851562 -1190.1099853516 144 0.0703129992 0.3174780011 ) )
-( ( 3164.048828125 -1183.7762451172 113 0.0937509984 0 ) ( 3171.921875 -1192.8330078125 129.4393920898 0.0937509984 0.1961330026 ) ( 3171.265625 -1192.0784912109 144 0.0937509984 0.3174780011 ) )
-( ( 3164.048828125 -1183.7762451172 113 0.1171889976 0 ) ( 3169.6572265625 -1194.8015136719 129.4393920898 0.1171889976 0.1961330026 ) ( 3169.0014648438 -1194.0466308594 144 0.1171889976 0.3174780011 ) )
-( ( 3164.048828125 -1183.7762451172 113 0.1406279951 0 ) ( 3171.6257324219 -1197.0654296875 129.4393920898 0.1406279951 0.1961330026 ) ( 3170.9699707031 -1196.3106689453 144 0.1406279951 0.3174780011 ) )
-( ( 3164.048828125 -1183.7762451172 113 0.1640619934 0 ) ( 3173.5939941406 -1199.3293457031 129.4393920898 0.1640619934 0.1961330026 ) ( 3172.9379882812 -1198.5744628906 144 0.1640619934 0.3174780011 ) )
-( ( 3164.048828125 -1183.7762451172 113 0.1874970049 0 ) ( 3175.8579101562 -1197.3614501953 129.4393920898 0.1874970049 0.1961330026 ) ( 3175.2019042969 -1196.6066894531 144 0.1874970049 0.3174780011 ) )
-)
-}
-}
-// brush 164
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 9 3 0 0 0 )
-(
-( ( 3109.4958496094 -1217.6864013672 113 0 0 ) ( 3118.7663574219 -1233.1158447266 129.4393920898 0 0.1961330026 ) ( 3118.2514648438 -1232.2585449219 144 0 0.3174780011 ) )
-( ( 3109.4958496094 -1217.6864013672 113 0.0234360006 0 ) ( 3121.337890625 -1231.5704345703 129.4393920898 0.0234360006 0.1961330026 ) ( 3120.8227539062 -1230.7135009766 144 0.0234360006 0.3174780011 ) )
-( ( 3109.4958496094 -1217.6864013672 113 0.0468729995 0 ) ( 3119.79296875 -1228.9991455078 129.4393920898 0.0468729995 0.1961330026 ) ( 3119.2778320312 -1228.1420898438 144 0.0468729995 0.3174780011 ) )
-( ( 3109.4958496094 -1217.6864013672 113 0.0703120008 0 ) ( 3118.2478027344 -1226.4273681641 129.4393920898 0.0703120008 0.1961330026 ) ( 3117.7326660156 -1225.5704345703 144 0.0703120008 0.3174780011 ) )
-( ( 3109.4958496094 -1217.6864013672 113 0.0937490016 0 ) ( 3115.6762695312 -1227.9727783203 129.4393920898 0.0937490016 0.1961330026 ) ( 3115.1611328125 -1227.1157226562 144 0.0937490016 0.3174780011 ) )
-( ( 3109.4958496094 -1217.6864013672 113 0.1171879992 0 ) ( 3113.1044921875 -1229.5183105469 129.4393920898 0.1171879992 0.1961330026 ) ( 3112.5895996094 -1228.6610107422 144 0.1171879992 0.3174780011 ) )
-( ( 3109.4958496094 -1217.6864013672 113 0.1406269968 0 ) ( 3114.6499023438 -1232.08984375 129.4393920898 0.1406269968 0.1961330026 ) ( 3114.1350097656 -1231.2325439453 144 0.1406269968 0.3174780011 ) )
-( ( 3109.4958496094 -1217.6864013672 113 0.164060995 0 ) ( 3116.1950683594 -1234.6608886719 129.4393920898 0.164060995 0.1961330026 ) ( 3115.6799316406 -1233.8035888672 144 0.164060995 0.3174780011 ) )
-( ( 3109.4958496094 -1217.6864013672 113 0.1874980032 0 ) ( 3118.7663574219 -1233.1158447266 129.4393920898 0.1874980032 0.1961330026 ) ( 3118.2514648438 -1232.2585449219 144 0.1874980032 0.3174780011 ) )
-)
-}
-}
-// brush 165
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 9 3 0 0 0 )
-(
-( ( 3049.4958496094 -1246.6864013672 113 0 0 ) ( 3058.7663574219 -1262.1158447266 129.4393920898 0 0.1961330026 ) ( 3058.2514648438 -1261.2585449219 144 0 0.3174780011 ) )
-( ( 3049.4958496094 -1246.6864013672 113 0.0234360006 0 ) ( 3061.337890625 -1260.5704345703 129.4393920898 0.0234360006 0.1961330026 ) ( 3060.8227539062 -1259.7135009766 144 0.0234360006 0.3174780011 ) )
-( ( 3049.4958496094 -1246.6864013672 113 0.0468729995 0 ) ( 3059.79296875 -1257.9991455078 129.4393920898 0.0468729995 0.1961330026 ) ( 3059.2778320312 -1257.1420898438 144 0.0468729995 0.3174780011 ) )
-( ( 3049.4958496094 -1246.6864013672 113 0.0703120008 0 ) ( 3058.2478027344 -1255.4273681641 129.4393920898 0.0703120008 0.1961330026 ) ( 3057.7326660156 -1254.5704345703 144 0.0703120008 0.3174780011 ) )
-( ( 3049.4958496094 -1246.6864013672 113 0.0937490016 0 ) ( 3055.6762695312 -1256.9727783203 129.4393920898 0.0937490016 0.1961330026 ) ( 3055.1611328125 -1256.1157226562 144 0.0937490016 0.3174780011 ) )
-( ( 3049.4958496094 -1246.6864013672 113 0.1171879992 0 ) ( 3053.1044921875 -1258.5183105469 129.4393920898 0.1171879992 0.1961330026 ) ( 3052.5895996094 -1257.6610107422 144 0.1171879992 0.3174780011 ) )
-( ( 3049.4958496094 -1246.6864013672 113 0.1406269968 0 ) ( 3054.6499023438 -1261.08984375 129.4393920898 0.1406269968 0.1961330026 ) ( 3054.1350097656 -1260.2325439453 144 0.1406269968 0.3174780011 ) )
-( ( 3049.4958496094 -1246.6864013672 113 0.164060995 0 ) ( 3056.1950683594 -1263.6608886719 129.4393920898 0.164060995 0.1961330026 ) ( 3055.6799316406 -1262.8035888672 144 0.164060995 0.3174780011 ) )
-( ( 3049.4958496094 -1246.6864013672 113 0.1874980032 0 ) ( 3058.7663574219 -1262.1158447266 129.4393920898 0.1874980032 0.1961330026 ) ( 3058.2514648438 -1261.2585449219 144 0.1874980032 0.3174780011 ) )
-)
-}
-}
-// brush 166
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 9 3 0 0 0 )
-(
-( ( 2982.9645996094 -1270.4104003906 113 0 0 ) ( 2991.4150390625 -1286.3039550781 129.4393920898 0 0.1961330026 ) ( 2990.9455566406 -1285.4208984375 144 0 0.3174790144 ) )
-( ( 2982.9645996094 -1270.4104003906 113 0.0234370008 0 ) ( 2994.0639648438 -1284.8952636719 129.4393920898 0.0234370008 0.1961330026 ) ( 2993.5942382812 -1284.0123291016 144 0.0234370008 0.3174790144 ) )
-( ( 2982.9645996094 -1270.4104003906 113 0.0468729995 0 ) ( 2992.6555175781 -1282.2465820312 129.4393920898 0.0468729995 0.1961330026 ) ( 2992.1860351562 -1281.3637695312 144 0.0468729995 0.3174790144 ) )
-( ( 2982.9645996094 -1270.4104003906 113 0.0703120008 0 ) ( 2991.2470703125 -1279.5972900391 129.4393920898 0.0703120008 0.1961330026 ) ( 2990.77734375 -1278.7147216797 144 0.0703120008 0.3174790144 ) )
-( ( 2982.9645996094 -1270.4104003906 113 0.0937490016 0 ) ( 2988.5983886719 -1281.0061035156 129.4393920898 0.0937490016 0.1961330026 ) ( 2988.12890625 -1280.1232910156 144 0.0937490016 0.3174790144 ) )
-( ( 2982.9645996094 -1270.4104003906 113 0.1171879992 0 ) ( 2985.9489746094 -1282.4149169922 129.4393920898 0.1171879992 0.1961330026 ) ( 2985.4797363281 -1281.5318603516 144 0.1171879992 0.3174790144 ) )
-( ( 2982.9645996094 -1270.4104003906 113 0.1406279951 0 ) ( 2987.3579101562 -1285.0638427734 129.4393920898 0.1406279951 0.1961330026 ) ( 2986.8884277344 -1284.1807861328 144 0.1406279951 0.3174790144 ) )
-( ( 2982.9645996094 -1270.4104003906 113 0.1640619934 0 ) ( 2988.7663574219 -1287.7122802734 129.4393920898 0.1640619934 0.1961330026 ) ( 2988.296875 -1286.8292236328 144 0.1640619934 0.3174790144 ) )
-( ( 2982.9645996094 -1270.4104003906 113 0.1874980032 0 ) ( 2991.4150390625 -1286.3039550781 129.4393920898 0.1874980032 0.1961330026 ) ( 2990.9455566406 -1285.4208984375 144 0.1874980032 0.3174790144 ) )
-)
-}
-}
-// brush 167
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 9 3 0 0 0 )
-(
-( ( 2907.052734375 -1291.7998046875 113 0 0 ) ( 2914.2001953125 -1307.6650390625 129.4393920898 0 0.196134001 ) ( 2913.8032226562 -1306.7834472656 144 0 0.3174790144 ) )
-( ( 2907.052734375 -1291.7998046875 113 0.0234379992 0 ) ( 2917.3039550781 -1306.6496582031 129.4393920898 0.0234379992 0.196134001 ) ( 2916.9067382812 -1305.7681884766 144 0.0234379992 0.3174790144 ) )
-( ( 2907.052734375 -1291.7998046875 113 0.0468729995 0 ) ( 2916.1125488281 -1304.005859375 129.4393920898 0.0468729995 0.196134001 ) ( 2915.7153320312 -1303.1243896484 144 0.0468729995 0.3174790144 ) )
-( ( 2907.052734375 -1291.7998046875 113 0.0703110024 0 ) ( 2914.9213867188 -1301.361328125 129.4393920898 0.0703110024 0.196134001 ) ( 2914.5241699219 -1300.4802246094 144 0.0703110024 0.3174790144 ) )
-( ( 2907.052734375 -1291.7998046875 113 0.0937480032 0 ) ( 2911.8178710938 -1302.3768310547 129.4393920898 0.0937480032 0.196134001 ) ( 2911.4206542969 -1301.4953613281 144 0.0937480032 0.3174790144 ) )
-( ( 2907.052734375 -1291.7998046875 113 0.1171870008 0 ) ( 2908.7138671875 -1303.3918457031 129.4393920898 0.1171870008 0.196134001 ) ( 2908.3168945312 -1302.5103759766 144 0.1171870008 0.3174790144 ) )
-( ( 2907.052734375 -1291.7998046875 113 0.1406259984 0 ) ( 2909.9055175781 -1306.0360107422 129.4393920898 0.1406259984 0.196134001 ) ( 2909.5087890625 -1305.1545410156 144 0.1406259984 0.3174790144 ) )
-( ( 2907.052734375 -1291.7998046875 113 0.164060995 0 ) ( 2911.0971679688 -1308.6798095703 129.4393920898 0.164060995 0.196134001 ) ( 2910.6999511719 -1307.7983398438 144 0.164060995 0.3174790144 ) )
-( ( 2907.052734375 -1291.7998046875 113 0.1874970049 0 ) ( 2914.2001953125 -1307.6650390625 129.4393920898 0.1874970049 0.196134001 ) ( 2913.8032226562 -1306.7834472656 144 0.1874970049 0.3174790144 ) )
-)
-}
-}
-// brush 168
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 9 3 0 0 0 )
-(
-( ( 2824.052734375 -1310.7998046875 113 0 0 ) ( 2830.5029296875 -1324.78515625 129.4393920898 0 0.196134001 ) ( 2830.1447753906 -1324.0083007812 144 0 0.3174790144 ) )
-( ( 2824.052734375 -1310.7998046875 113 0.0234379992 0 ) ( 2833.3039550781 -1323.8901367188 129.4393920898 0.0234379992 0.196134001 ) ( 2832.9453125 -1323.1131591797 144 0.0234379992 0.3174790144 ) )
-( ( 2824.052734375 -1310.7998046875 113 0.0468729995 0 ) ( 2832.2287597656 -1321.5595703125 129.4393920898 0.0468729995 0.196134001 ) ( 2831.8703613281 -1320.7825927734 144 0.0468729995 0.3174790144 ) )
-( ( 2824.052734375 -1310.7998046875 113 0.0703110024 0 ) ( 2831.1538085938 -1319.2283935547 129.4393920898 0.0703110024 0.196134001 ) ( 2830.7954101562 -1318.4519042969 144 0.0703110024 0.3174790144 ) )
-( ( 2824.052734375 -1310.7998046875 113 0.0937480032 0 ) ( 2828.3530273438 -1320.1236572266 129.4393920898 0.0937480032 0.196134001 ) ( 2827.9946289062 -1319.3464355469 144 0.0937480032 0.3174790144 ) )
-( ( 2824.052734375 -1310.7998046875 113 0.1171870008 0 ) ( 2825.5517578125 -1321.0183105469 129.4393920898 0.1171870008 0.196134001 ) ( 2825.1936035156 -1320.2413330078 144 0.1171870008 0.3174790144 ) )
-( ( 2824.052734375 -1310.7998046875 113 0.1406259984 0 ) ( 2826.6271972656 -1323.3492431641 129.4393920898 0.1406259984 0.196134001 ) ( 2826.2690429688 -1322.572265625 144 0.1406259984 0.3174790144 ) )
-( ( 2824.052734375 -1310.7998046875 113 0.164060995 0 ) ( 2827.7026367188 -1325.6798095703 129.4393920898 0.164060995 0.196134001 ) ( 2827.3442382812 -1324.9028320312 144 0.164060995 0.3174790144 ) )
-( ( 2824.052734375 -1310.7998046875 113 0.1874970049 0 ) ( 2830.5029296875 -1324.78515625 129.4393920898 0.1874970049 0.196134001 ) ( 2830.1447753906 -1324.0083007812 144 0.1874970049 0.3174790144 ) )
-)
-}
-}
-// brush 169
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 9 3 0 0 0 )
-(
-( ( 2738.20703125 -1317.3264160156 113 0 0 ) ( 2742.5612792969 -1334.7922363281 129.4393920898 0 0.1961330026 ) ( 2742.3195800781 -1333.8217773438 144 0 0.3174790144 ) )
-( ( 2738.20703125 -1317.3264160156 113 0.0234370008 0 ) ( 2745.4724121094 -1334.0661621094 129.4393920898 0.0234370008 0.1961330026 ) ( 2745.23046875 -1333.0958251953 144 0.0234370008 0.3174790144 ) )
-( ( 2738.20703125 -1317.3264160156 113 0.0468729995 0 ) ( 2744.7465820312 -1331.1555175781 129.4393920898 0.0468729995 0.1961330026 ) ( 2744.5046386719 -1330.1851806641 144 0.0468729995 0.3174790144 ) )
-( ( 2738.20703125 -1317.3264160156 113 0.0703110024 0 ) ( 2744.0209960938 -1328.2442626953 129.4393920898 0.0703110024 0.1961330026 ) ( 2743.7788085938 -1327.2742919922 144 0.0703110024 0.3174790144 ) )
-( ( 2738.20703125 -1317.3264160156 113 0.0937480032 0 ) ( 2741.1101074219 -1328.970703125 129.4393920898 0.0937480032 0.1961330026 ) ( 2740.8679199219 -1328.0001220703 144 0.0937480032 0.3174790144 ) )
-( ( 2738.20703125 -1317.3264160156 113 0.1171870008 0 ) ( 2738.1987304688 -1329.6962890625 129.4393920898 0.1171870008 0.1961330026 ) ( 2737.95703125 -1328.7259521484 144 0.1171870008 0.3174790144 ) )
-( ( 2738.20703125 -1317.3264160156 113 0.1406259984 0 ) ( 2738.9248046875 -1332.6072998047 129.4393920898 0.1406259984 0.1961330026 ) ( 2738.6831054688 -1331.6369628906 144 0.1406259984 0.3174790144 ) )
-( ( 2738.20703125 -1317.3264160156 113 0.164060995 0 ) ( 2739.6508789062 -1335.5179443359 129.4393920898 0.164060995 0.1961330026 ) ( 2739.4086914062 -1334.5474853516 144 0.164060995 0.3174790144 ) )
-( ( 2738.20703125 -1317.3264160156 113 0.1874970049 0 ) ( 2742.5612792969 -1334.7922363281 129.4393920898 0.1874970049 0.1961330026 ) ( 2742.3195800781 -1333.8217773438 144 0.1874970049 0.3174790144 ) )
-)
-}
-}
-// brush 170
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 9 3 0 0 0 )
-(
-( ( 2646.5158691406 -1323.9575195312 113 0 0 ) ( 2648.3969726562 -1341.8592529297 129.4393920898 0 0.1961330026 ) ( 2648.2924804688 -1340.8646240234 144 0 0.3174780011 ) )
-( ( 2646.5158691406 -1323.9575195312 113 0.0234370008 0 ) ( 2651.380859375 -1341.5452880859 129.4393920898 0.0234370008 0.1961330026 ) ( 2651.2761230469 -1340.5509033203 144 0.0234370008 0.3174780011 ) )
-( ( 2646.5158691406 -1323.9575195312 113 0.0468740016 0 ) ( 2651.0668945312 -1338.5621337891 129.4393920898 0.0468740016 0.1961330026 ) ( 2650.9624023438 -1337.5675048828 144 0.0468740016 0.3174780011 ) )
-( ( 2646.5158691406 -1323.9575195312 113 0.0703110024 0 ) ( 2650.7536621094 -1335.5782470703 129.4393920898 0.0703110024 0.1961330026 ) ( 2650.6489257812 -1334.583984375 144 0.0703110024 0.3174780011 ) )
-( ( 2646.5158691406 -1323.9575195312 113 0.0937480032 0 ) ( 2647.7700195312 -1335.892578125 129.4393920898 0.0937480032 0.1961330026 ) ( 2647.6655273438 -1334.8974609375 144 0.0937480032 0.3174780011 ) )
-( ( 2646.5158691406 -1323.9575195312 113 0.1171870008 0 ) ( 2644.7858886719 -1336.2056884766 129.4393920898 0.1171870008 0.1961330026 ) ( 2644.681640625 -1335.2111816406 144 0.1171870008 0.3174780011 ) )
-( ( 2646.5158691406 -1323.9575195312 113 0.1406279951 0 ) ( 2645.0998535156 -1339.1893310547 129.4393920898 0.1406279951 0.1961330026 ) ( 2644.9956054688 -1338.1950683594 144 0.1406279951 0.3174780011 ) )
-( ( 2646.5158691406 -1323.9575195312 113 0.164060995 0 ) ( 2645.4135742188 -1342.1727294922 129.4393920898 0.164060995 0.1961330026 ) ( 2645.3090820312 -1341.1781005859 144 0.164060995 0.3174780011 ) )
-( ( 2646.5158691406 -1323.9575195312 113 0.1874970049 0 ) ( 2648.3969726562 -1341.8592529297 129.4393920898 0.1874970049 0.1961330026 ) ( 2648.2924804688 -1340.8646240234 144 0.1874970049 0.3174780011 ) )
-)
-}
-}
-// brush 171
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 9 3 0 0 0 )
-(
-( ( 2551.1501464844 -1325.8759765625 113 0 0 ) ( 2551.7780761719 -1343.8653564453 129.4393920898 0 0.1961330026 ) ( 2551.7431640625 -1342.8658447266 144 0 0.3174790144 ) )
-( ( 2551.1501464844 -1325.8759765625 113 0.0234370008 0 ) ( 2554.7763671875 -1343.7603759766 129.4393920898 0.0234370008 0.1961330026 ) ( 2554.7414550781 -1342.7611083984 144 0.0234370008 0.3174790144 ) )
-( ( 2551.1501464844 -1325.8759765625 113 0.0468740016 0 ) ( 2554.6716308594 -1340.7625732422 129.4393920898 0.0468740016 0.1961330026 ) ( 2554.63671875 -1339.7630615234 144 0.0468740016 0.3174790144 ) )
-( ( 2551.1501464844 -1325.8759765625 113 0.0703110024 0 ) ( 2554.5671386719 -1337.7639160156 129.4393920898 0.0703110024 0.1961330026 ) ( 2554.5319824219 -1336.7648925781 144 0.0703110024 0.3174790144 ) )
-( ( 2551.1501464844 -1325.8759765625 113 0.0937490016 0 ) ( 2551.5688476562 -1337.8695068359 129.4393920898 0.0937490016 0.1961330026 ) ( 2551.5336914062 -1336.8695068359 144 0.0937490016 0.3174790144 ) )
-( ( 2551.1501464844 -1325.8759765625 113 0.1171879992 0 ) ( 2548.5703125 -1337.9736328125 129.4393920898 0.1171879992 0.1961330026 ) ( 2548.5354003906 -1336.9742431641 144 0.1171879992 0.3174790144 ) )
-( ( 2551.1501464844 -1325.8759765625 113 0.1406289935 0 ) ( 2548.6752929688 -1340.9719238281 129.4393920898 0.1406289935 0.1961330026 ) ( 2548.6403808594 -1339.9727783203 144 0.1406289935 0.3174790144 ) )
-( ( 2551.1501464844 -1325.8759765625 113 0.1640630066 0 ) ( 2548.7800292969 -1343.9699707031 129.4393920898 0.1640630066 0.1961330026 ) ( 2548.7451171875 -1342.9705810547 144 0.1640630066 0.3174790144 ) )
-( ( 2551.1501464844 -1325.8759765625 113 0.1874990016 0 ) ( 2551.7780761719 -1343.8653564453 129.4393920898 0.1874990016 0.1961330026 ) ( 2551.7431640625 -1342.8658447266 144 0.1874990016 0.3174790144 ) )
-)
-}
-}
-// brush 172
-{
-( 1328 117 480 ) ( 1328 125 480 ) ( 1296 125 480 ) dsi_textures/cretebase4 0 0 0 0.5 0.5 0 0 0
-( 1296 -16 488 ) ( 1296 124 488 ) ( 1328 124 488 ) dsi_textures/cretebase4 0 0 0 0.5 0.5 0 0 0
-( 1328 125 480 ) ( 1328 117 480 ) ( 1328 -16 488 ) dsi_textures/cretebase4 0 0 0 0.5 0.5 0 0 0
-( 1304 -16 304 ) ( 1304 -16 488 ) ( 1328 -16 488 ) dsi_textures/cretebase4 0 0 0 0.5 0.5 0 0 0
-( 1296 8 304 ) ( 1296 8 488 ) ( 1296 -16 488 ) dsi_textures/cretebase4 0 0 0 0.5 0.5 0 0 0
-( 1328 124 479 ) ( 1328 131 487 ) ( 1296 131 487 ) dsi_textures/cretebase4 0 0 0 0.5 0.5 0 0 0
-}
-// brush 173
-{
-( -128 -192 -24 ) ( -128 -192 -16 ) ( 64 -251 -24 ) evil8_floor/e8clangfloor 0 0 0 0.5 0.5 0 0 0
-( -128 0 -16 ) ( -128 -320 -16 ) ( -128 -320 -24 ) common/caulk 0 0 0 0.5 0.5 0 4 0
-( 64 -344 -40 ) ( 64 -344 -32 ) ( 64 24 -32 ) evil8_floor/e8clangfloor 0 0 0 0.5 0.5 0 0 0
-( 332 0 -24 ) ( 332 0 -16 ) ( 192 0 -16 ) common/caulk 0 0 0 0.5 0.5 0 4 0
-( 328 -360 -16 ) ( 188 -360 -16 ) ( 188 8 -16 ) evil8_floor/e8clangfloor 0 0 0 0.5 0.5 0 0 0
-( -61 -212 -24 ) ( -61 -212 -10 ) ( 64 -129 -24 ) evil8_floor/e8clangfloor 0 0 0 0.5 0.5 0 0 0
-( 188 8 -40 ) ( 188 -360 -40 ) ( 328 -360 -40 ) evil8_floor/e8clangfloor 0 0 0 0.5 0.5 0 0 0
-}
-// brush 174
-{
-( 188 -776 -16 ) ( 188 -408 -16 ) ( 328 -408 -16 ) dsi_textures/cretebase -6 68 0 0.5 -0.5 0 0 0
-( -55 -554 -10 ) ( -55 -554 -24 ) ( 64 -634 -24 ) dsi_textures/cretebase -6 68 0 0.5 -0.5 0 0 0
-( -56 -554 -24 ) ( -56 -565 -24 ) ( -46 -565 -24 ) dsi_textures/cretebase -6 0 0 0.5 -0.5 0 0 0
-( -55 -554 -10 ) ( -55 -554 -24 ) ( -38 -548 -24 ) dsi_textures/cretebase -6 68 0 0.5 -0.5 0 0 0
-( -56 -554 -24 ) ( -56 -554 -10 ) ( -49 -558 -10 ) dsi_textures/cretebase -6 68 0 0.5 -0.5 0 0 0
-}
-// brush 175
-{
-( 2551 -776 -40 ) ( 2551 -408 -40 ) ( 2411 -408 -40 ) evil8_floor/e8clangfloor 102 0 -180 0.5 0.5 0 0 0
-( 2800 -555 -24 ) ( 2800 -555 -10 ) ( 2675 -639 -24 ) evil8_floor/e8clangfloor 102 0 -180 0.5 -0.5 0 0 0
-( 2411 -408 -16 ) ( 2551 -408 -16 ) ( 2551 -776 -16 ) evil8_floor/e8clangfloor 102 0 -180 0.5 0.5 0 0 0
-( 2407 -768 -24 ) ( 2407 -768 -16 ) ( 2547 -768 -16 ) common/caulk 0 0 0 0.5 0.5 0 4 0
-( 2675 -424 -40 ) ( 2675 -424 -32 ) ( 2675 -792 -32 ) evil8_floor/e8clangfloor 0 0 -180 0.5 -0.5 0 0 0
-( 2667 -644 -24 ) ( 2859 -516 -24 ) ( 2859 -516 -16 ) evil8_floor/e8clangfloor 102 0 -180 0.5 -0.5 0 0 0
-( 2867 -768 -16 ) ( 2867 -448 -16 ) ( 2867 -448 -24 ) common/caulk 0 0 0 0.5 0.5 0 4 0
-( 2867 -576 -24 ) ( 2867 -576 -16 ) ( 2675 -517 -24 ) common/caulk 0 0 0 0.5 0.5 0 4 0
-}
-// brush 176
-{
-( -288 -536 -16 ) ( -296 -536 -16 ) ( -296 -380 -16 ) evil8_floor/e8clangfloor 0 0 0 0.5 0.5 134217728 0 0
-( -296 -380 -24 ) ( -296 -536 -24 ) ( -288 -536 -24 ) common/caulk 0 0 0 0.5 0.5 134217728 4 0
-( -292 -460 -16 ) ( -292 -460 -24 ) ( -288 -384 -24 ) common/caulk 0 0 0 0.5 0.5 134217728 4 0
-( -288 -380 -24 ) ( -288 -536 -24 ) ( -288 -536 -16 ) common/caulk 0 0 0 0.5 0.5 134217728 4 0
-( -288 -536 -24 ) ( -296 -536 -24 ) ( -296 -536 -16 ) evil8_floor/e8clangfloor 0 0 0 0.5 0.5 134217728 0 0
-}
-// brush 177
-{
-( 1088 -256 324 ) ( 1088 -267 324 ) ( 1088 -267 316 ) common/caulk 0 0 0 0.5 0.5 0 4 0
-( 1096 -256 324 ) ( 1088 -256 324 ) ( 1088 -256 316 ) common/caulk 0 0 0 0.5 0.5 0 4 0
-( 1536 -507 324 ) ( 1536 -495 324 ) ( 1536 -495 316 ) dsi_textures/cretebase4 -12 0 0 0.5 0.5 0 0 0
-( 1088 -267 320 ) ( 1088 -256 320 ) ( 1096 -256 320 ) dsi_textures/cretebase4 9 12 0 0.5 0.5 0 0 0
-( 1096 -256 296 ) ( 1088 -256 296 ) ( 1088 -267 296 ) dsi_textures/cretebase4 9 12 0 0.5 0.5 0 0 0
-( 1472 -512 296 ) ( 1456 -512 296 ) ( 1472 -512 320 ) dsi_textures/cretebase4 9 12 0 0.5 0.5 0 0 0
-}
-// brush 178
-{
-( -288 -232 -24 ) ( -296 -232 -24 ) ( -296 -388 -24 ) common/caulk 0 0 0 0.5 0.5 134217728 4 0
-( -296 -388 -16 ) ( -296 -232 -16 ) ( -288 -232 -16 ) evil8_floor/e8clangfloor 0 0 0 0.5 0.5 134217728 0 0
-( -288 -388 -16 ) ( -288 -232 -16 ) ( -288 -232 -24 ) common/caulk 0 0 0 0.5 0.5 134217728 4 0
-( -288 -232 -16 ) ( -296 -232 -16 ) ( -296 -232 -24 ) evil8_floor/e8clangfloor 0 0 0 0.5 0.5 134217728 0 0
-( -292 -308 -16 ) ( -292 -308 -24 ) ( -296 -232 -24 ) common/caulk 0 0 0 0.5 0.5 134217728 4 0
-}
-// brush 179
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 3051.25 -384 32 0 0.5 ) ( 3051.25 -384 8 0 0.3125 ) ( 3027.25 -384 -16 0 0 ) )
-( ( 3051.25 -248 32 1 0.5 ) ( 3051.25 -248 8 1 0.3125 ) ( 3035.25 -232 -16 1 0 ) )
-( ( 3187.25 -248 32 2 0.5 ) ( 3187.25 -248 8 2 0.3125 ) ( 3187.25 -224 -16 2 0 ) )
-)
-}
-}
-// brush 180
-{
-( 3047 -652 -40 ) ( 3187 -652 -40 ) ( 3187 -544 -40 ) evil8_floor/e8clangfloor 102 0 -180 0.5 0.5 0 0 0
-( 3187 -544 -16 ) ( 3187 -652 -16 ) ( 3047 -652 -16 ) evil8_floor/e8clangfloor 102 0 -180 0.5 0.5 0 0 0
-( 3187 -544 -16 ) ( 3047 -544 -16 ) ( 3047 -544 -24 ) common/caulk 0 0 0 0.5 0.5 0 4 0
-( 3027 -544 -16 ) ( 3027 -652 -16 ) ( 3027 -652 -24 ) common/caulk 0 0 0 0.5 0.5 0 4 0
-( 3043 -768 -16 ) ( 3183 -768 -16 ) ( 3183 -768 -24 ) common/caulk 0 0 0 0.5 0.5 0 4 0
-( 3187.25 -652 -16 ) ( 3187.25 -544 -16 ) ( 3187.25 -544 -24 ) common/caulk 0 0 0 0.5 0.5 0 4 0
-}
-// brush 181
-{
-( 3187.25 -108 -16 ) ( 3187.25 0 -16 ) ( 3187.25 0 -24 ) common/caulk 0 0 0 0.5 0.5 0 4 0
-( 3043 -224 -16 ) ( 3183 -224 -16 ) ( 3183 -224 -24 ) common/caulk 0 0 0 0.5 0.5 0 4 0
-( 3027 0 -16 ) ( 3027 -108 -16 ) ( 3027 -108 -24 ) common/caulk 0 0 0 0.5 0.5 0 4 0
-( 3187 0 -16 ) ( 3047 0 -16 ) ( 3047 0 -24 ) common/caulk 0 0 0 0.5 0.5 0 4 0
-( 3187 0 -16 ) ( 3187 -108 -16 ) ( 3047 -108 -16 ) evil8_floor/e8clangfloor 102 0 -180 0.5 0.5 0 0 0
-( 3047 -108 -40 ) ( 3187 -108 -40 ) ( 3187 0 -40 ) evil8_floor/e8clangfloor 102 0 -180 0.5 0.5 0 0 0
-}
-// brush 182
-{
-( 2315 12 -40 ) ( 2539 12 -40 ) ( 2539 240 -40 ) evil8_floor/e8clangfloor 108 0 -180 0.5 0.5 0 0 0
-( 2539 240 -16 ) ( 2539 12 -16 ) ( 2315 12 -16 ) evil8_floor/e8clangfloor 108 0 -180 0.5 0.5 0 0 0
-( 2523.25 192 -16 ) ( 2299.25 192 -16 ) ( 2299.25 192 -24 ) common/caulk 0 0 0 0.5 0.5 0 4 0
-( 2483 0 -16 ) ( 2483 0 -24 ) ( 2291 192 -24 ) evil8_floor/e8clangfloor 6 0 -180 0.5 -0.5 0 0 0
-( 2483 0 -24 ) ( 2483 0 -16 ) ( 2547 0 -16 ) evil8_floor/e8clangfloor 108 0 -180 0.5 -0.5 0 0 0
-( 2547.25 12 -16 ) ( 2547.25 240 -16 ) ( 2547.25 240 -24 ) common/caulk 0 0 0 0.5 0.5 0 4 0
-}
-// brush 183
-{
-( 2547.25 192 -16 ) ( 2547.25 224 -16 ) ( 2547.25 224 -24 ) common/caulk 0 0 0 0.5 0.5 0 4 0
-( 2503.25 192 -16 ) ( 2547.25 192 -16 ) ( 2547.25 192 -24 ) common/caulk 0 0 0 0.5 0.5 0 4 0
-( 2483 384 -32 ) ( 2483 352 -32 ) ( 2483 352 -40 ) common/caulk 0 0 0 0.5 0.5 0 4 0
-( 2527.25 384 -16 ) ( 2483.25 384 -16 ) ( 2483.25 384 -24 ) common/caulk 0 0 0 0.5 0.5 0 4 0
-( 2547 224 -16 ) ( 2547 192 -16 ) ( 2503 192 -16 ) evil8_floor/e8clangfloor 109 0 -180 0.5 0.5 0 0 0
-( 2503 192 -40 ) ( 2547 192 -40 ) ( 2547 224 -40 ) evil8_floor/e8clangfloor 109 0 -180 0.5 0.5 0 0 0
-}
-// brush 184
-{
-( 2547.25 336 -24 ) ( 2547.25 336 -16 ) ( 2547.25 564 -16 ) evil8_floor/e8clangfloor -5 0 -180 0.5 -0.5 0 0 0
-( 2451 552 -24 ) ( 2547 552 -24 ) ( 2547 544 -16 ) evil8_floor/e8clangfloor 97 0 -180 0.5 0.5 0 0 0
-( 2291 384 -24 ) ( 2483 576 -24 ) ( 2483 576 -16 ) evil8_floor/e8clangfloor -5 0 -180 0.5 -0.5 0 0 0
-( 2299.25 384 -24 ) ( 2299.25 384 -16 ) ( 2523.25 384 -16 ) common/caulk 0 0 0 0.5 0.5 0 4 0
-( 2315 564 -16 ) ( 2539 564 -16 ) ( 2539 336 -16 ) evil8_floor/e8clangfloor 109 0 -180 0.5 0.5 0 0 0
-( 2547 552 -24 ) ( 2451 552 -24 ) ( 2291 384 -24 ) evil8_floor/e8clangfloor 97 0 -180 0.5 0.5 0 0 0
-}
-// brush 185
-{
-( 2547.25 -992 -24 ) ( 2547.25 -992 -16 ) ( 2547.25 -960 -16 ) common/caulk 0 0 0 0.5 0.5 0 4 0
-( 2547.25 -960 -24 ) ( 2547.25 -960 -16 ) ( 2503.25 -960 -16 ) evil8_floor/e8clangfloor 102 0 -180 0.5 -0.5 0 0 0
-( 2483 -1120 -24 ) ( 2483 -1120 -16 ) ( 2483 -1152 -16 ) common/caulk 0 0 0 0.5 0.5 0 4 0
-( 2483.25 -1152 -24 ) ( 2483.25 -1152 -16 ) ( 2527.25 -1152 -16 ) common/caulk 0 0 0 0.5 0.5 0 4 0
-( 2503 -960 -16 ) ( 2547 -960 -16 ) ( 2547 -992 -16 ) evil8_floor/e8clangfloor 102 0 -180 0.5 0.5 0 0 0
-( 2547 -992 -40 ) ( 2547 -960 -40 ) ( 2503 -960 -40 ) evil8_floor/e8clangfloor 102 0 -180 0.5 0.5 0 0 0
-}
-// brush 186
-{
-( 2547.25 -1332 -16 ) ( 2547.25 -1104 -16 ) ( 2547.25 -1104 -24 ) common/caulk 0 0 0 0.5 0.5 0 4 0
-( 2547 -1312 -16 ) ( 2547 -1320 -24 ) ( 2451 -1320 -24 ) evil8_floor/e8clangfloor 102 0 -180 0.5 0.5 0 0 0
-( 2483 -1344 -16 ) ( 2483 -1344 -24 ) ( 2291 -1152 -24 ) evil8_floor/e8clangfloor 0 0 -180 0.5 -0.5 0 0 0
-( 2523.25 -1152 -16 ) ( 2299.25 -1152 -16 ) ( 2299.25 -1152 -24 ) common/caulk 0 0 0 0.5 0.5 0 4 0
-( 2539 -1104 -16 ) ( 2539 -1332 -16 ) ( 2315 -1332 -16 ) evil8_floor/e8clangfloor 102 0 -180 0.5 0.5 0 0 0
-( 2291 -1152 -24 ) ( 2451 -1320 -24 ) ( 2547 -1320 -24 ) common/caulk 0 0 0 0.5 0.5 0 4 0
-}
-// brush 187
-{
-( 2547.25 -1008 -24 ) ( 2547.25 -1008 -16 ) ( 2547.25 -780 -16 ) common/caulk 0 0 0 0.5 0.5 0 4 0
-( 2547 -768 -16 ) ( 2483 -768 -16 ) ( 2483 -768 -24 ) evil8_floor/e8clangfloor 102 0 -180 0.5 -0.5 0 0 0
-( 2291 -960 -24 ) ( 2483 -768 -24 ) ( 2483 -768 -16 ) evil8_floor/e8clangfloor 0 0 -180 0.5 -0.5 0 0 0
-( 2299.25 -960 -24 ) ( 2299.25 -960 -16 ) ( 2523.25 -960 -16 ) common/caulk 0 0 0 0.5 0.5 0 4 0
-( 2315 -780 -16 ) ( 2539 -780 -16 ) ( 2539 -1008 -16 ) evil8_floor/e8clangfloor 102 0 -180 0.5 0.5 0 0 0
-( 2539 -1008 -40 ) ( 2539 -780 -40 ) ( 2315 -780 -40 ) evil8_floor/e8clangfloor 102 0 -180 0.5 0.5 0 0 0
-}
-// brush 188
-{
-( 3035 -232 -20 ) ( 3027 -232 -20 ) ( 3027 -243 -20 ) common/caulk 102 0 -180 0.5 0.5 0 0 0
-( 3027 -243 -16 ) ( 3027 -232 -16 ) ( 3035 -232 -16 ) evil8_floor/e8clangfloor 102 0 -180 0.5 0.5 0 0 0
-( 3036 -536 -12 ) ( 3044 -536 -12 ) ( 3044 -536 -20 ) common/caulk 102 0 -180 0.5 0.5 0 0 0
-( 3035 -243 -16 ) ( 3035 -232 -16 ) ( 3035 -232 -24 ) common/caulk 102 0 -180 0.5 0.5 0 0 0
-( 3035 -232 -12 ) ( 3027 -232 -12 ) ( 3027 -232 -20 ) common/caulk 102 0 -180 0.5 0.5 0 0 0
-( 3027 -232 -12 ) ( 3027 -243 -12 ) ( 3027 -243 -20 ) common/caulk 102 0 -180 0.5 0.5 0 0 0
-}
-// brush 189
-{
-( -632 656 640 ) ( -632 -1424 640 ) ( 3528 656 640 ) harlequin_sky/jf-nebula_sky 0 0 0 0.5 0.5 0 0 0
-( -688 656 8 ) ( -688 -1424 8 ) ( -688 -1424 0 ) common/caulk 0 0 0 0.5 0.5 0 0 0
-( 3472 656 8 ) ( -688 656 8 ) ( -688 656 0 ) common/caulk 0 0 0 0.5 0.5 0 0 0
-( 3472 -1424 8 ) ( 3472 656 8 ) ( 3472 656 0 ) common/caulk 0 0 0 0.5 0.5 0 0 0
-( -688 -1424 8 ) ( 3472 -1424 8 ) ( 3472 -1424 0 ) common/caulk 0 0 0 0.5 0.5 0 0 0
-( -632 -1424 648 ) ( -632 656 648 ) ( 3528 656 648 ) common/caulk 0 0 0 0.5 0.5 0 0 0
-}
-// brush 190
-{
-( 3528 656 -664 ) ( -632 656 -664 ) ( -632 -1424 -664 ) common/caulk 0 0 0 0.5 0.5 0 0 0
-( -632 -1424 648 ) ( -632 656 648 ) ( 3528 656 648 ) common/caulk 0 0 0 0.5 0.5 0 0 0
-( -688 -1424 8 ) ( 3472 -1424 8 ) ( 3472 -1424 0 ) common/caulk 0 0 0 0.5 0.5 0 0 0
-( 3472 656 8 ) ( -688 656 8 ) ( -688 656 0 ) common/caulk 0 0 0 0.5 0.5 0 0 0
-( -688 656 8 ) ( -688 -1424 8 ) ( -688 -1424 0 ) common/caulk 0 0 0 0.5 0.5 0 0 0
-( -680 -1424 8 ) ( -680 656 8 ) ( -680 -1424 0 ) harlequin_sky/jf-nebula_sky 0 0 0 0.5 0.5 0 0 0
-}
-// brush 191
-{
-( 3528 656 -664 ) ( -632 656 -664 ) ( -632 -1424 -664 ) common/caulk 0 0 0 0.5 0.5 0 0 0
-( -632 -1424 648 ) ( -632 656 648 ) ( 3528 656 648 ) common/caulk 0 0 0 0.5 0.5 0 0 0
-( -688 -1424 8 ) ( 3472 -1424 8 ) ( 3472 -1424 0 ) common/caulk 0 0 0 0.5 0.5 0 0 0
-( 3472 -1424 8 ) ( 3472 656 8 ) ( 3472 656 0 ) common/caulk 0 0 0 0.5 0.5 0 0 0
-( -688 656 8 ) ( -688 -1424 8 ) ( -688 -1424 0 ) common/caulk 0 0 0 0.5 0.5 0 0 0
-( 3472 -1416 8 ) ( -688 -1416 8 ) ( 3472 -1416 0 ) harlequin_sky/jf-nebula_sky 0 0 0 0.5 0.5 0 0 0
-}
-// brush 192
-{
-( 3528 656 -664 ) ( -632 656 -664 ) ( -632 -1424 -664 ) common/caulk 0 0 0 0.5 0.5 0 0 0
-( -632 -1424 648 ) ( -632 656 648 ) ( 3528 656 648 ) common/caulk 0 0 0 0.5 0.5 0 0 0
-( -688 -1424 8 ) ( 3472 -1424 8 ) ( 3472 -1424 0 ) common/caulk 0 0 0 0.5 0.5 0 0 0
-( 3472 -1424 8 ) ( 3472 656 8 ) ( 3472 656 0 ) common/caulk 0 0 0 0.5 0.5 0 0 0
-( 3472 656 8 ) ( -688 656 8 ) ( -688 656 0 ) common/caulk 0 0 0 0.5 0.5 0 0 0
-( 3464 656 8 ) ( 3464 -1424 8 ) ( 3464 656 0 ) harlequin_sky/jf-nebula_sky 0 0 0 0.5 0.5 0 0 0
-}
-// brush 193
-{
-( 3528 656 -664 ) ( -632 656 -664 ) ( -632 -1424 -664 ) common/caulk 0 0 0 0.5 0.5 0 0 0
-( -632 -1424 648 ) ( -632 656 648 ) ( 3528 656 648 ) common/caulk 0 0 0 0.5 0.5 0 0 0
-( 3472 -1424 8 ) ( 3472 656 8 ) ( 3472 656 0 ) common/caulk 0 0 0 0.5 0.5 0 0 0
-( 3472 656 8 ) ( -688 656 8 ) ( -688 656 0 ) common/caulk 0 0 0 0.5 0.5 0 0 0
-( -688 656 8 ) ( -688 -1424 8 ) ( -688 -1424 0 ) common/caulk 0 0 0 0.5 0.5 0 0 0
-( -688 648 8 ) ( 3472 648 8 ) ( -688 648 0 ) harlequin_sky/jf-nebula_sky 0 0 0 0.5 0.5 0 0 0
-}
-// brush 194
-{
-( 3528 656 -664 ) ( -632 656 -664 ) ( -632 -1424 -664 ) common/caulk 0 0 0 0.5 0.5 0 0 0
-( -688 -1424 8 ) ( 3472 -1424 8 ) ( 3472 -1424 0 ) common/caulk 0 0 0 0.5 0.5 0 0 0
-( 3472 -1424 8 ) ( 3472 656 8 ) ( 3472 656 0 ) common/caulk 0 0 0 0.5 0.5 0 0 0
-( 3472 656 8 ) ( -688 656 8 ) ( -688 656 0 ) common/caulk 0 0 0 0.5 0.5 0 0 0
-( -688 656 8 ) ( -688 -1424 8 ) ( -688 -1424 0 ) common/caulk 0 0 0 0.5 0.5 0 0 0
-( -632 656 -656 ) ( 3528 656 -656 ) ( -632 -1424 -656 ) harlequin_sky/jf-nebula_sky 0 0 0 0.5 0.5 0 0 0
-}
-// brush 195
-{
-( 3187 -536 -24 ) ( 3176 -536 -24 ) ( 3176 -544 -24 ) common/caulk 0 0 0 0.5 0.5 0 4 0
-( 3176 -544 -16 ) ( 3176 -536 -16 ) ( 3187 -536 -16 ) evil8_floor/e8clangfloor 102 0 -180 0.5 0.5 0 0 0
-( 3187 -544 -16 ) ( 3187 -536 -16 ) ( 3187 -536 -24 ) common/caulk 0 0 0 0.5 0.5 0 4 0
-( 3187 -536 -16 ) ( 3176 -536 -16 ) ( 3176 -536 -24 ) common/caulk 0 0 0 0.5 0.5 0 4 0
-( 3187 -544 -24 ) ( 3035 -536 -24 ) ( 3035 -536 -16 ) common/caulk 0 0 0 0.5 0.5 0 4 0
-}
-// brush 196
-{
-( 3188 -226 -20 ) ( 3177 -226 -20 ) ( 3177 -232 -20 ) common/caulk 102 0 -180 0.5 0.5 0 0 0
-( 3177 -232 -16 ) ( 3177 -226 -16 ) ( 3187 -226 -16 ) evil8_floor/e8clangfloor 102 0 -180 0.5 0.5 0 0 0
-( 3177 -232 -12 ) ( 3188 -232 -12 ) ( 3188 -232 -20 ) common/caulk 102 0 -180 0.5 0.5 0 0 0
-( 3187 -232 -12 ) ( 3187 -226 -12 ) ( 3187 -226 -20 ) common/caulk 102 0 -180 0.5 0.5 0 0 0
-( 3035 -232 -20 ) ( 3187 -224 -20 ) ( 3035 -232 -12 ) common/caulk 102 0 -180 0.5 0.5 0 0 0
-}
-}
-// entity 1
-{
-"classname" "item_rockets"
-"origin" "-405.000000 356.000000 2.000000"
-}
-// entity 2
-{
-"classname" "item_armor_large"
-"origin" "-488.000000 -768.000000 2.000000"
-}
-// entity 3
-{
-"classname" "weapon_hagar"
-"origin" "-209.000000 -385.000000 2.000000"
-}
-// entity 4
-{
-"classname" "item_strength"
-"origin" "259.000000 -399.000000 15.000000"
-}
-// entity 5
-{
-"classname" "item_rockets"
-"origin" "-383.000000 -1161.000000 2.000000"
-}
-// entity 6
-{
-"classname" "item_health_medium"
-"angle" "-90"
-"origin" "192.000000 520.000000 2.000000"
-}
-// entity 7
-{
-"classname" "item_health_medium"
-"angle" "90"
-"origin" "191.000000 -1278.000000 2.000000"
-}
-// entity 8
-{
-"classname" "item_rockets"
-"origin" "840.000000 0.000000 352.000000"
-}
-// entity 9
-{
-"classname" "item_cells"
-"origin" "832.000000 -40.000000 352.000000"
-}
-// entity 10
-{
-"classname" "item_cells"
-"origin" "832.000000 -728.000000 352.000000"
-}
-// entity 11
-{
-"classname" "item_rockets"
-"origin" "840.000000 -768.000000 352.000000"
-}
-// entity 12
-{
-"classname" "weapon_nex"
-"origin" "1312.000000 -384.000000 352.000000"
-}
-// entity 13
-{
-"classname" "item_health_mega"
-"origin" "2480.000000 -400.000000 -72.000000"
-}
-// entity 14
-{
-"classname" "item_health_medium"
-"angle" "90"
-"origin" "2544.000000 -1268.000000 8.000000"
-}
-// entity 15
-{
-"classname" "item_cells"
-"origin" "3120.000000 -1160.000000 8.000000"
-}
-// entity 16
-{
-"classname" "item_armor_large"
-"origin" "3224.000000 0.000000 8.000000"
-}
-// entity 17
-{
-"classname" "item_cells"
-"origin" "3120.000000 392.000000 8.000000"
-}
-// entity 18
-{
-"classname" "item_health_medium"
-"angle" "-90"
-"origin" "2544.000000 508.000000 0.000000"
-}
-// entity 19
-{
-"classname" "info_notnull"
-"origin" "2760.000000 -384.000000 120.000000"
-"targetname" "t9"
-}
-// entity 20
-{
-"classname" "trigger_hurt"
-"dmg" "400"
-"spawnflags" "4"
-// brush 0
-{
-( -680 472 832 ) ( -680 360 832 ) ( -680 360 -664 ) common/trigger 16 0 0 0.5 0.5 0 7 0
-( -512 648 832 ) ( -624 648 832 ) ( -624 648 -664 ) common/trigger 0 0 0 0.5 0.5 0 7 0
-( 3464 -1776 832 ) ( 3464 -1664 832 ) ( 3464 -1664 -664 ) common/trigger 16 0 0 0.5 0.5 0 7 0
-( 3232 -1416 832 ) ( 3344 -1416 832 ) ( 3344 -1416 -664 ) common/trigger 0 0 0 0.5 0.5 0 7 0
-( -704 352 -504 ) ( -704 464 -504 ) ( -592 464 -504 ) common/trigger 0 -16 0 0.5 0.5 0 7 0
-( -664 464 -552 ) ( -776 464 -552 ) ( -776 352 -552 ) common/trigger 0 -16 0 0.5 0.5 0 7 0
-}
-}
-// entity 21
-{
-"classname" "trigger_multiple"
-"target" "t98"
-// brush 0
-{
-( -680 472 136 ) ( -680 -1720 136 ) ( -680 -1720 120 ) common/trigger 16 0 0 0.5 0.5 0 7 0
-( 3616 648 136 ) ( -640 648 136 ) ( -640 648 120 ) common/trigger 0 0 0 0.5 0.5 0 7 0
-( 3464 -1744 136 ) ( 3464 448 136 ) ( 3464 448 120 ) common/trigger 16 0 0 0.5 0.5 0 7 0
-( -520 -1416 136 ) ( 3736 -1416 136 ) ( 3736 -1416 120 ) common/trigger 0 0 0 0.5 0.5 0 7 0
-( -712 -1728 -240 ) ( -712 464 -240 ) ( 3544 464 -240 ) common/trigger 0 -16 0 0.5 0.5 0 7 0
-( 3504 464 -296 ) ( -752 464 -296 ) ( -752 -1728 -296 ) common/trigger 0 -16 0 0.5 0.5 0 7 0
-}
-}
-// entity 22
-{
-"classname" "misc_teleporter_dest"
-"angle" "180"
-"origin" "3282.000000 2.000000 23.000000"
-"targetname" "t8"
-}
-// entity 23
-{
-"classname" "trigger_push"
-"target" "t12"
-// brush 0
-{
-( 2855 -415 -4 ) ( 2855 -355 -4 ) ( 2855 -355 -60 ) common/trigger -60 0 -180 0.5 -0.5 0 7 0
-( 2662 -475 -4 ) ( 2796 -475 -4 ) ( 2796 -475 -60 ) common/trigger -25 0 -180 0.5 -0.5 0 7 0
-( 2672 -288 -8 ) ( 2672 -472 -8 ) ( 2672 -472 -32 ) common/trigger -60 0 -180 0.5 -0.5 0 7 0
-( 2828 -291 -4 ) ( 2694 -291 -4 ) ( 2694 -291 -60 ) common/trigger -25 0 -180 0.5 -0.5 0 7 0
-( 2672 -472 -8 ) ( 2672 -288 -8 ) ( 2744 -288 -16 ) common/trigger -25 60 -180 0.5 0.5 0 7 0
-( 2681 -415 -34 ) ( 2815 -415 -34 ) ( 2815 -355 -34 ) common/trigger -25 60 -180 0.5 0.5 0 7 0
-( 2848 -408 -34 ) ( 2744 -480 -34 ) ( 2848 -408 -19 ) common/trigger -25 60 -180 0.5 0.5 0 7 0
-( 2752 -296 -34 ) ( 2856 -368 -34 ) ( 2856 -368 -19 ) common/trigger -25 60 -180 0.5 0.5 0 7 0
-}
-}
-// entity 24
-{
-"classname" "trigger_push"
-"target" "t11"
-// brush 0
-{
-( 2415 244 -34 ) ( 2452 244 -34 ) ( 2452 326 -34 ) common/trigger 14 -61 -180 0.5 0.5 0 7 0
-( 2288 192 -8 ) ( 2288 384 -8 ) ( 2392 384 -16 ) common/trigger 14 -61 -180 0.5 0.5 0 7 0
-( 2443 380 -19 ) ( 2406 380 -19 ) ( 2406 380 -34 ) common/trigger 14 0 -180 0.5 -0.5 0 7 0
-( 2288 384 -8 ) ( 2288 192 -8 ) ( 2288 192 -32 ) common/trigger 61 0 -180 0.5 -0.5 0 7 0
-( 2423 188 -19 ) ( 2460 188 -19 ) ( 2460 188 -34 ) common/trigger 14 0 -180 0.5 -0.5 0 7 0
-( 2452 244 -19 ) ( 2452 326 -19 ) ( 2452 326 -34 ) common/trigger 61 0 -180 0.5 -0.5 0 7 0
-( 2448 240 -34 ) ( 2416 216 -34 ) ( 2448 240 -19 ) common/trigger 61 0 -180 0.5 -0.5 0 7 0
-( 2416 360 -34 ) ( 2448 336 -34 ) ( 2448 336 -19 ) common/trigger 61 0 -180 0.5 -0.5 0 7 0
-}
-}
-// entity 25
-{
-"classname" "trigger_push"
-"target" "t10"
-// brush 0
-{
-( 2395 -1101 -34 ) ( 2432 -1101 -34 ) ( 2432 -1019 -34 ) common/trigger -26 4 -180 0.5 0.5 0 7 0
-( 2288 -1152 -8 ) ( 2288 -968 -8 ) ( 2384 -968 -16 ) common/trigger -26 4 -180 0.5 0.5 0 7 0
-( 2431 -965 -19 ) ( 2394 -965 -19 ) ( 2394 -965 -34 ) common/trigger -26 0 -180 0.5 -0.5 0 7 0
-( 2288 -968 -8 ) ( 2288 -1152 -8 ) ( 2288 -1152 -32 ) common/trigger -4 0 -180 0.5 -0.5 0 7 0
-( 2395 -1149 -19 ) ( 2432 -1149 -19 ) ( 2432 -1149 -34 ) common/trigger -26 0 -180 0.5 -0.5 0 7 0
-( 2464 -1101 -19 ) ( 2464 -1019 -19 ) ( 2464 -1019 -34 ) common/trigger -4 0 -180 0.5 -0.5 0 7 0
-( 2464 -1096 -34 ) ( 2392 -1144 -34 ) ( 2464 -1096 -19 ) common/trigger -4 0 -180 0.5 -0.5 0 7 0
-( 2408 -984 -34 ) ( 2464 -1024 -34 ) ( 2464 -1024 -19 ) common/trigger -4 0 -180 0.5 -0.5 0 7 0
-}
-}
-// entity 26
-{
-"classname" "info_player_deathmatch"
-"angle" "180"
-"origin" "3035.000000 -848.000000 32.000000"
-}
-// entity 27
-{
-"classname" "weapon_electro"
-"origin" "2947.000000 -384.000000 8.000000"
-}
-// entity 28
-{
-"classname" "info_player_deathmatch"
-"angle" "180"
-"origin" "3003.000000 256.000000 32.000000"
-}
-// entity 29
-{
-"classname" "info_player_deathmatch"
-"angle" "180"
-"origin" "1464.000000 -1080.000000 352.000000"
-}
-// entity 30
-{
-"classname" "info_player_deathmatch"
-"angle" "180"
-"origin" "1464.000000 320.000000 352.000000"
-}
-// entity 31
-{
-"classname" "info_player_deathmatch"
-"origin" "-264.000000 -1024.000000 32.000000"
-}
-// entity 32
-{
-"classname" "trigger_push"
-"target" "t9"
-// brush 0
-{
-( 2504 -371 -120 ) ( 2456 -371 -120 ) ( 2456 -419 -120 ) common/trigger -32 -21 0 0.5 0.5 0 7 0
-( 2456 -419 -96 ) ( 2456 -371 -96 ) ( 2504 -371 -96 ) common/trigger -32 -21 0 0.5 0.5 0 7 0
-( 2456 -451 -104 ) ( 2504 -451 -104 ) ( 2504 -451 -216 ) common/trigger -32 0 0 0.5 0.5 0 7 0
-( 2527 -419 -104 ) ( 2527 -371 -104 ) ( 2527 -371 -216 ) common/trigger 21 0 0 0.5 0.5 0 7 0
-( 2503 -339 -104 ) ( 2455 -339 -104 ) ( 2455 -339 -216 ) common/trigger -32 0 0 0.5 0.5 0 7 0
-( 2432 -371 -104 ) ( 2432 -419 -104 ) ( 2432 -419 -216 ) common/trigger 21 0 0 0.5 0.5 0 7 0
-( 2512 -440 -120 ) ( 2504 -448 -120 ) ( 2504 -448 -96 ) common/trigger 21 0 0 0.5 0.5 0 7 0
-( 2456 -448 -120 ) ( 2448 -440 -120 ) ( 2456 -448 -96 ) common/trigger 21 0 0 0.5 0.5 0 7 0
-( 2432 -360 -120 ) ( 2440 -352 -120 ) ( 2432 -360 -96 ) common/trigger 21 0 0 0.5 0.5 0 7 0
-( 2504 -336 -120 ) ( 2512 -344 -120 ) ( 2504 -336 -96 ) common/trigger 21 0 0 0.5 0.5 0 7 0
-}
-}
-// entity 33
-{
-"classname" "trigger_teleport"
-"target" "t8"
-// brush 0
-{
-( 1281 -1152 320 ) ( 1345 -1152 320 ) ( 1345 -1089 320 ) common/trigger 0 0 -180 0.5 0.5 0 7 0
-( 1349 -1089 428 ) ( 1349 -1152 428 ) ( 1285 -1152 428 ) common/trigger 0 0 -180 0.5 0.5 0 7 0
-( 1338 -1068 448 ) ( 1274 -1068 448 ) ( 1274 -1068 320 ) common/trigger 0 0 -180 0.5 -0.5 0 7 0
-( 1260 -1073 448 ) ( 1260 -1136 448 ) ( 1260 -1136 320 ) common/trigger 0 0 -180 0.5 -0.5 0 7 0
-( 1313 -1180 448 ) ( 1377 -1180 448 ) ( 1377 -1180 320 ) common/trigger 0 0 -180 0.5 -0.5 0 7 0
-( 1364 -1192 448 ) ( 1364 -1129 448 ) ( 1364 -1129 320 ) common/trigger 0 0 -180 0.5 -0.5 0 7 0
-( 1344 -1072 320 ) ( 1352 -1080 320 ) ( 1344 -1072 412 ) common/trigger 0 0 -180 0.5 -0.5 0 7 0
-( 1352 -1168 320 ) ( 1344 -1176 320 ) ( 1344 -1176 412 ) common/trigger 0 0 -180 0.5 -0.5 0 7 0
-( 1288 -1176 320 ) ( 1280 -1168 320 ) ( 1288 -1176 412 ) common/trigger 0 0 -180 0.5 -0.5 0 7 0
-( 1264 -1096 320 ) ( 1272 -1088 320 ) ( 1264 -1096 412 ) common/trigger 0 0 -180 0.5 -0.5 0 7 0
-}
-}
-// entity 34
-{
-"classname" "misc_teleporter_dest"
-"origin" "-545.000000 -770.000000 36.000000"
-"targetname" "t7"
-}
-// entity 35
-{
-"classname" "trigger_teleport"
-"target" "t7"
-// brush 0
-{
-( 1259 384 448 ) ( 1259 321 448 ) ( 1259 321 320 ) common/trigger 0 0 0 0.5 0.5 0 7 0
-( 1341 398 448 ) ( 1277 398 448 ) ( 1277 398 320 ) common/trigger 0 0 0 0.5 0.5 0 7 0
-( 1365 319 448 ) ( 1365 382 448 ) ( 1365 382 320 ) common/trigger 0 0 0 0.5 0.5 0 7 0
-( 1279 290 448 ) ( 1343 290 448 ) ( 1343 290 320 ) common/trigger 0 0 0 0.5 0.5 0 7 0
-( 1279 321 427 ) ( 1279 384 427 ) ( 1343 384 427 ) common/trigger 0 0 0 0.5 0.5 0 7 0
-( 1343 384 320 ) ( 1279 384 320 ) ( 1279 321 320 ) common/trigger 0 0 0 0.5 0.5 0 7 0
-( 1344 400 320 ) ( 1360 384 320 ) ( 1344 400 427 ) common/trigger 0 0 0 0.5 0.5 0 7 0
-( 1272 384 320 ) ( 1288 400 320 ) ( 1288 400 427 ) common/trigger 0 0 0 0.5 0.5 0 7 0
-( 1296 288 320 ) ( 1288 296 320 ) ( 1296 288 427 ) common/trigger 0 0 0 0.5 0.5 0 7 0
-( 1344 296 320 ) ( 1336 288 320 ) ( 1336 288 427 ) common/trigger 0 0 0 0.5 0.5 0 7 0
-}
-}
-// entity 36
-{
-"classname" "trigger_push"
-"target" "t4"
-// brush 0
-{
-( 295 332 -19 ) ( 295 250 -19 ) ( 295 250 -34 ) common/trigger -2 0 0 0.5 0.5 0 7 0
-( 356 380 -19 ) ( 319 380 -19 ) ( 319 380 -34 ) common/trigger 40 0 0 0.5 0.5 0 7 0
-( 456 200 0 ) ( 456 384 0 ) ( 456 384 -32 ) common/trigger -2 0 0 0.5 0.5 0 7 0
-( 320 196 -19 ) ( 357 196 -19 ) ( 357 196 -34 ) common/trigger 40 0 0 0.5 0.5 0 7 0
-( 456 384 0 ) ( 456 200 0 ) ( 320 200 -16 ) common/trigger 40 2 0 0.5 0.5 0 7 0
-( 356 332 -34 ) ( 319 332 -34 ) ( 319 250 -34 ) common/trigger 40 2 0 0.5 0.5 0 7 0
-( 296 344 -34 ) ( 312 352 -34 ) ( 296 344 0 ) common/trigger 40 2 0 0.5 0.5 0 7 0
-( 312 216 -34 ) ( 296 224 -34 ) ( 296 224 0 ) common/trigger 40 2 0 0.5 0.5 0 7 0
-}
-}
-// entity 37
-{
-"classname" "trigger_push"
-"target" "t3"
-// brush 0
-{
-( 307 -1013 -19 ) ( 307 -1095 -19 ) ( 307 -1095 -34 ) common/trigger 0 0 0 0.5 0.5 0 7 0
-( 336 -965 -19 ) ( 299 -965 -19 ) ( 299 -965 -34 ) common/trigger 0 0 0 0.5 0.5 0 7 0
-( 448 -1104 0 ) ( 448 -1016 0 ) ( 448 -1016 -32 ) common/trigger 0 0 0 0.5 0.5 0 7 0
-( 316 -1149 -19 ) ( 353 -1149 -19 ) ( 353 -1149 -34 ) common/trigger 0 0 0 0.5 0.5 0 7 0
-( 448 -1016 0 ) ( 448 -1104 0 ) ( 304 -1104 -16 ) common/trigger 0 0 0 0.5 0.5 0 7 0
-( 344 -1013 -34 ) ( 307 -1013 -34 ) ( 307 -1095 -34 ) common/trigger 0 0 0 0.5 0.5 0 7 0
-( 344 -1152 -34 ) ( 336 -1144 -34 ) ( 344 -1152 0 ) common/trigger 0 0 0 0.5 0.5 0 7 0
-( 328 -976 -34 ) ( 336 -968 -34 ) ( 336 -968 0 ) common/trigger 0 0 0 0.5 0.5 0 7 0
-}
-}
-// entity 38
-{
-"classname" "info_player_deathmatch"
-"origin" "-296.000000 80.000000 32.000000"
-}
-// entity 39
-{
-"classname" "trigger_push"
-"target" "t1"
-// brush 0
-{
-( 58 -351 -34 ) ( -76 -351 -34 ) ( -76 -411 -34 ) common/trigger 0 0 0 0.5 0.5 0 7 0
-( -88 -440 -24 ) ( -88 -328 -24 ) ( 64 -288 -8 ) common/trigger 0 0 0 0.5 0.5 0 7 0
-( 64 -480 -16 ) ( 64 -480 -32 ) ( -88 -440 -32 ) common/trigger 0 0 0 0.5 0.5 0 7 0
-( 64 -480 -8 ) ( 64 -288 -8 ) ( 64 -288 -32 ) common/trigger 0 0 0 0.5 0.5 0 7 0
-( -88 -328 -16 ) ( -88 -328 -32 ) ( 64 -288 -32 ) common/trigger 0 0 0 0.5 0.5 0 7 0
-( -88 -328 -24 ) ( -88 -440 -24 ) ( -88 -440 -32 ) common/trigger 0 0 0 0.5 0.5 0 7 0
-}
-}
-// entity 40
-{
-"classname" "target_speaker"
-"noise" "*falling1.wav"
-"origin" "597.000000 -1166.000000 133.000000"
-"spawnflags" "8"
-"targetname" "t98"
-}
-// entity 41
-{
-"classname" "info_notnull"
-"origin" "702.000000 -384.000000 434.000000"
-"targetname" "t1"
-}
-// entity 42
-{
-"classname" "info_notnull"
-"origin" "1236.000000 254.000000 190.000000"
-"targetname" "t11"
-}
-// entity 43
-{
-"classname" "info_notnull"
-"origin" "1536.000000 322.000000 190.000000"
-"targetname" "t4"
-}
-// entity 44
-{
-"classname" "info_notnull"
-"origin" "1538.000000 -1088.000000 190.000000"
-"targetname" "t3"
-}
-// entity 45
-{
-"classname" "info_notnull"
-"origin" "1208.000000 -1028.000000 190.000000"
-"targetname" "t10"
-}
-// entity 46
-{
-"classname" "info_notnull"
-"origin" "2034.000000 -382.000000 434.000000"
-"targetname" "t12"
-}
-// entity 47
-{
-"classname" "info_notnull"
-"origin" "-23.000000 -406.000000 120.000000"
-"targetname" "t99"
-}
-// entity 48
-{
-"classname" "trigger_push"
-"target" "t99"
-// brush 0
-{
-( 305 -419 -104 ) ( 305 -371 -104 ) ( 305 -371 -216 ) common/trigger 41 0 -180 0.5 -0.5 0 7 0
-( 234 -443 -104 ) ( 282 -443 -104 ) ( 282 -443 -216 ) common/trigger 2 0 -180 0.5 -0.5 0 7 0
-( 210 -371 -104 ) ( 210 -419 -104 ) ( 210 -419 -216 ) common/trigger 41 0 -180 0.5 -0.5 0 7 0
-( 281 -347 -104 ) ( 233 -347 -104 ) ( 233 -347 -216 ) common/trigger 2 0 -180 0.5 -0.5 0 7 0
-( 281 -371 -96 ) ( 281 -419 -96 ) ( 233 -419 -96 ) common/trigger 2 -41 -180 0.5 0.5 0 7 0
-( 233 -419 -120 ) ( 281 -419 -120 ) ( 281 -371 -120 ) common/trigger 2 -41 -180 0.5 0.5 0 7 0
-( 216 -352 -120 ) ( 224 -344 -120 ) ( 224 -344 -96 ) common/trigger 2 -41 -180 0.5 0.5 0 7 0
-( 288 -344 -120 ) ( 296 -352 -120 ) ( 288 -344 -96 ) common/trigger 2 -41 -180 0.5 0.5 0 7 0
-( 304 -432 -120 ) ( 296 -440 -120 ) ( 304 -432 -96 ) common/trigger 2 -41 -180 0.5 0.5 0 7 0
-( 224 -440 -120 ) ( 216 -432 -120 ) ( 224 -440 -96 ) common/trigger 2 -41 -180 0.5 0.5 0 7 0
-}
-}
-// entity 49
-{
-"classname" "dom_team"
-"model" "models/domination/dom_unclaimed.md3"
-}
-// entity 50
-{
-"classname" "dom_team"
-"cnt" "13"
-"message" "Blue team has captured a control point"
-"model" "models/domination/dom_blue.md3"
-"netname" "^4Blue Team^3"
-"noise" "domination/claim.wav"
-"noise1" "domination/claim.wav"
-}
-// entity 51
-{
-"classname" "dom_team"
-"cnt" "4"
-"message" "Red team has captured a control point"
-"model" "models/domination/dom_red.md3"
-"netname" "^1Red Team^3"
-"noise" "domination/claim.wav"
-"noise1" "domination/claim.wav"
-}
-// entity 52
-{
-"classname" "dom_controlpoint"
-"origin" "-400.000000 110.000000 8.000000"
-}
-// entity 53
-{
-"classname" "dom_controlpoint"
-"origin" "-400.000000 -870.000000 8.000000"
-}
-// entity 54
-{
-"classname" "dom_controlpoint"
-"origin" "3150.000000 -870.000000 8.000000"
-}
-// entity 55
-{
-"classname" "dom_controlpoint"
-"origin" "3150.000000 110.000000 8.000000"
-}
-// entity 56
-{
-"classname" "dom_controlpoint"
-"origin" "1016.000000 -380.000000 344.000000"
-}
-// entity 57
-{
-"classname" "item_flag_team1"
-"origin" "3260.000000 -670.000000 8.000000"
-}
-// entity 58
-{
-"classname" "item_flag_team2"
-"origin" "-520.000000 -120.000000 8.000000"
-}
-// entity 59
-{
-"classname" "info_player_team1"
-"angle" "180"
-"origin" "2850.000000 400.000000 10.000000"
-}
-// entity 60
-{
-"classname" "info_player_team1"
-"angle" "180"
-"origin" "3250.000000 200.000000 10.000000"
-}
-// entity 61
-{
-"classname" "info_player_team1"
-"angle" "180"
-"origin" "3200.000000 -150.000000 10.000000"
-}
-// entity 62
-{
-"classname" "info_player_team1"
-"angle" "180"
-"origin" "3000.000000 -250.000000 10.000000"
-}
-// entity 63
-{
-"classname" "info_player_team1"
-"angle" "180"
-"origin" "3000.000000 -550.000000 10.000000"
-}
-// entity 64
-{
-"classname" "info_player_team1"
-"angle" "180"
-"origin" "3200.000000 -1050.000000 10.000000"
-}
-// entity 65
-{
-"classname" "info_player_team1"
-"angle" "180"
-"origin" "2900.000000 -1200.000000 10.000000"
-}
-// entity 66
-{
-"classname" "info_player_team2"
-"angle" "0"
-"origin" "-500.000000 -1000.000000 10.000000"
-}
-// entity 67
-{
-"classname" "info_player_team2"
-"angle" "0"
-"origin" "-500.000000 -700.000000 10.000000"
-}
-// entity 68
-{
-"classname" "info_player_team2"
-"angle" "0"
-"origin" "0.000000 -1200.000000 10.000000"
-}
-// entity 69
-{
-"classname" "info_player_team2"
-"angle" "0"
-"origin" "-250.000000 -500.000000 10.000000"
-}
-// entity 70
-{
-"classname" "info_player_team2"
-"angle" "0"
-"origin" "-250.000000 -200.000000 10.000000"
-}
-// entity 71
-{
-"classname" "info_player_team2"
-"angle" "0"
-"origin" "-500.000000 200.000000 10.000000"
-}
-// entity 72
-{
-"classname" "info_player_team2"
-"angle" "0"
-"origin" "-100.000000 450.000000 10.000000"
-}
-// entity 73
-{
-"classname" "light"
-"_color" "1.000000 0.930311 0.704394"
-"light" "100"
-"origin" "2931 -1040 202"
-}
-// entity 74
-{
-"classname" "light"
-"_color" "1.000000 0.930311 0.704394"
-"light" "100"
-"origin" "2737 -887 202"
-}
-// entity 75
-{
-"classname" "light"
-"_color" "1.000000 0.930311 0.704394"
-"light" "100"
-"origin" "2881 -685 202"
-}
-// entity 76
-{
-"classname" "light"
-"_color" "0.668241 0.881508 1.000000"
-"light" "50"
-"origin" "3020 -718 153"
-}
-// entity 77
-{
-"classname" "light"
-"_color" "0.668241 0.881508 1.000000"
-"light" "50"
-"origin" "2819 -1012 153"
-}
-// entity 78
-{
-"classname" "light"
-"_color" "0.668241 0.881508 1.000000"
-"light" "50"
-"origin" "2771 -757 153"
-}
-// entity 79
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-evil8_lights/e8minitrimlight
-( 9 3 0 0 0 )
-(
-( ( 2920.75 -1033.25 209 0 0.125 ) ( 2920.75 -1032.75 209 0 0.0625 ) ( 2920.75 -1032.25 209 0 0 ) )
-( ( 3096.5 -1033.25 209 1.3730469942 0.125 ) ( 3096.146484375 -1032.896484375 209 1.3730469942 0.0625 ) ( 3095.79296875 -1032.5428466797 209 1.3730469942 0 ) )
-( ( 3096.5 -861.5 209 2.7148439884 0.125 ) ( 3096 -861.5 209 2.7148439884 0.0625 ) ( 3095.5 -861.5 209 2.7148439884 0 ) )
-( ( 3096.5 -689.75 209 4.0566411018 0.125 ) ( 3096.146484375 -690.103515625 209 4.0566411018 0.0625 ) ( 3095.79296875 -690.4571533203 209 4.0566411018 0 ) )
-( ( 2920.75 -689.75 209 5.4296879768 0.125 ) ( 2920.75 -690.25 209 5.4296879768 0.0625 ) ( 2920.75 -690.75 209 5.4296879768 0 ) )
-( ( 2745 -689.75 209 6.8027338982 0.125 ) ( 2745.353515625 -690.103515625 209 6.8027338982 0.0625 ) ( 2745.70703125 -690.4571533203 209 6.8027338982 0 ) )
-( ( 2745 -861.5 209 8.14453125 0.125 ) ( 2745.5 -861.5 209 8.14453125 0.0625 ) ( 2746 -861.5 209 8.14453125 0 ) )
-( ( 2745 -1033.25 209 9.486328125 0.125 ) ( 2745.353515625 -1032.896484375 209 9.486328125 0.0625 ) ( 2745.70703125 -1032.5428466797 209 9.486328125 0 ) )
-( ( 2920.75 -1033.25 209 10.859375 0.125 ) ( 2920.75 -1032.75 209 10.859375 0.0625 ) ( 2920.75 -1032.25 209 10.859375 0 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-evil8_lights/e8minitrimlight
-( 9 3 0 0 0 )
-(
-( ( 2920.75 -1032.25 196 0 0 ) ( 2920.75 -1032.75 196 0 0.0625 ) ( 2920.75 -1033.25 196 0 0.125 ) )
-( ( 3095.79296875 -1032.5428466797 196 1.3730469942 0 ) ( 3096.146484375 -1032.896484375 196 1.3730469942 0.0625 ) ( 3096.5 -1033.25 196 1.3730469942 0.125 ) )
-( ( 3095.5 -861.5 196 2.7148439884 0 ) ( 3096 -861.5 196 2.7148439884 0.0625 ) ( 3096.5 -861.5 196 2.7148439884 0.125 ) )
-( ( 3095.79296875 -690.4571533203 196 4.0566411018 0 ) ( 3096.146484375 -690.103515625 196 4.0566411018 0.0625 ) ( 3096.5 -689.75 196 4.0566411018 0.125 ) )
-( ( 2920.75 -690.75 196 5.4296879768 0 ) ( 2920.75 -690.25 196 5.4296879768 0.0625 ) ( 2920.75 -689.75 196 5.4296879768 0.125 ) )
-( ( 2745.70703125 -690.4571533203 196 6.8027338982 0 ) ( 2745.353515625 -690.103515625 196 6.8027338982 0.0625 ) ( 2745 -689.75 196 6.8027338982 0.125 ) )
-( ( 2746 -861.5 196 8.14453125 0 ) ( 2745.5 -861.5 196 8.14453125 0.0625 ) ( 2745 -861.5 196 8.14453125 0.125 ) )
-( ( 2745.70703125 -1032.5428466797 196 9.486328125 0 ) ( 2745.353515625 -1032.896484375 196 9.486328125 0.0625 ) ( 2745 -1033.25 196 9.486328125 0.125 ) )
-( ( 2920.75 -1032.25 196 10.859375 0 ) ( 2920.75 -1032.75 196 10.859375 0.0625 ) ( 2920.75 -1033.25 196 10.859375 0.125 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-evil8_lights/e8minitrimlight
-( 9 3 0 0 0 )
-(
-( ( 2920.75 -1032.25 209 0.0039059999 -0.25 ) ( 2920.75 -1032.25 202.5 0.0039059999 0.5625 ) ( 2920.75 -1032.25 196 0.0039059999 1.375 ) )
-( ( 3095.79296875 -1032.5428466797 209 1.3769530058 -0.25 ) ( 3095.79296875 -1032.5428466797 202.5 1.3769530058 0.5625 ) ( 3095.79296875 -1032.5428466797 196 1.3769530058 1.375 ) )
-( ( 3095.5 -861.5 209 2.71875 -0.25 ) ( 3095.5 -861.5 202.5 2.71875 0.5625 ) ( 3095.5 -861.5 196 2.71875 1.375 ) )
-( ( 3095.79296875 -690.4571533203 209 4.060546875 -0.25 ) ( 3095.79296875 -690.4571533203 202.5 4.060546875 0.5625 ) ( 3095.79296875 -690.4571533203 196 4.060546875 1.375 ) )
-( ( 2920.75 -690.75 209 5.4335942268 -0.25 ) ( 2920.75 -690.75 202.5 5.4335942268 0.5625 ) ( 2920.75 -690.75 196 5.4335942268 1.375 ) )
-( ( 2745.70703125 -690.4571533203 209 6.8066411018 -0.25 ) ( 2745.70703125 -690.4571533203 202.5 6.8066411018 0.5625 ) ( 2745.70703125 -690.4571533203 196 6.8066411018 1.375 ) )
-( ( 2746 -861.5 209 8.1484384537 -0.25 ) ( 2746 -861.5 202.5 8.1484384537 0.5625 ) ( 2746 -861.5 196 8.1484384537 1.375 ) )
-( ( 2745.70703125 -1032.5428466797 209 9.490234375 -0.25 ) ( 2745.70703125 -1032.5428466797 202.5 9.490234375 0.5625 ) ( 2745.70703125 -1032.5428466797 196 9.490234375 1.375 ) )
-( ( 2920.75 -1032.25 209 10.86328125 -0.25 ) ( 2920.75 -1032.25 202.5 10.86328125 0.5625 ) ( 2920.75 -1032.25 196 10.86328125 1.375 ) )
-)
-}
-}
-// brush 3
-{
-patchDef2
-{
-evil8_lights/e8minitrimlight
-( 9 3 0 0 0 )
-(
-( ( 2920.75 -1033.25 196 0.0039059999 1.375 ) ( 2920.75 -1033.25 202.5 0.0039059999 0.5625 ) ( 2920.75 -1033.25 209 0.0039059999 -0.25 ) )
-( ( 3096.5 -1033.25 196 1.3769530058 1.375 ) ( 3096.5 -1033.25 202.5 1.3769530058 0.5625 ) ( 3096.5 -1033.25 209 1.3769530058 -0.25 ) )
-( ( 3096.5 -861.5 196 2.71875 1.375 ) ( 3096.5 -861.5 202.5 2.71875 0.5625 ) ( 3096.5 -861.5 209 2.71875 -0.25 ) )
-( ( 3096.5 -689.75 196 4.060546875 1.375 ) ( 3096.5 -689.75 202.5 4.060546875 0.5625 ) ( 3096.5 -689.75 209 4.060546875 -0.25 ) )
-( ( 2920.75 -689.75 196 5.4335942268 1.375 ) ( 2920.75 -689.75 202.5 5.4335942268 0.5625 ) ( 2920.75 -689.75 209 5.4335942268 -0.25 ) )
-( ( 2745 -689.75 196 6.8066411018 1.375 ) ( 2745 -689.75 202.5 6.8066411018 0.5625 ) ( 2745 -689.75 209 6.8066411018 -0.25 ) )
-( ( 2745 -861.5 196 8.1484384537 1.375 ) ( 2745 -861.5 202.5 8.1484384537 0.5625 ) ( 2745 -861.5 209 8.1484384537 -0.25 ) )
-( ( 2745 -1033.25 196 9.490234375 1.375 ) ( 2745 -1033.25 202.5 9.490234375 0.5625 ) ( 2745 -1033.25 209 9.490234375 -0.25 ) )
-( ( 2920.75 -1033.25 196 10.86328125 1.375 ) ( 2920.75 -1033.25 202.5 10.86328125 0.5625 ) ( 2920.75 -1033.25 209 10.86328125 -0.25 ) )
-)
-}
-}
-}
-// entity 80
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 2805.9694824219 -977.0665283203 165.1057739258 0 0.1406240016 ) ( 2806.283203125 -976.5170898438 156.1280822754 0 0.0703120008 ) ( 2806.5961914062 -975.9676513672 147.1504211426 0 0 ) )
-( ( 2824.0083007812 -999.3370361328 164.3728637695 0.2239760011 0.1406240016 ) ( 2824.3215332031 -998.7875976562 155.3950805664 0.2239760011 0.0703120008 ) ( 2824.6350097656 -998.2381591797 146.4172668457 0.2239760011 0 ) )
-( ( 2854.390625 -1006.0732421875 165.0215454102 0.4671550095 0.1406240016 ) ( 2854.7043457031 -1005.5238037109 156.0437316895 0.4671550095 0.0703120008 ) ( 2855.0180664062 -1004.9743652344 147.0660400391 0.4671550095 0 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 2804.4213867188 -978.3260498047 164.9746398926 0 0.140625 ) ( 2804.7351074219 -977.7766113281 155.9968261719 0 0.0703120008 ) ( 2805.0483398438 -977.2271728516 147.0191955566 0 0 ) )
-( ( 2805.1953125 -977.6962890625 165.0401306152 0.0078110001 0.140625 ) ( 2805.5090332031 -977.1468505859 156.0625610352 0.0078110001 0.0703120008 ) ( 2805.8225097656 -976.5974121094 147.0848083496 0.0078110001 0 ) )
-( ( 2805.9694824219 -977.0665283203 165.1057739258 0.015625 0.140625 ) ( 2806.283203125 -976.5170898438 156.1280822754 0.015625 0.0703120008 ) ( 2806.5961914062 -975.9676513672 147.1504211426 0.015625 0 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 2854.5817871094 -1006.9216308594 146.9315795898 0 0.1406259984 ) ( 2854.2680664062 -1007.4710693359 155.9093322754 0 0.0703129992 ) ( 2853.9545898438 -1008.0205078125 164.8871765137 0 0 ) )
-( ( 2854.7993164062 -1005.9479980469 146.9987792969 0.0078119999 0.1406259984 ) ( 2854.4860839844 -1006.4974365234 155.9765014648 0.0078119999 0.0703129992 ) ( 2854.1723632812 -1007.046875 164.9542236328 0.0078119999 0 ) )
-( ( 2855.0180664062 -1004.9743652344 147.0660400391 0.015625 0.1406259984 ) ( 2854.7043457031 -1005.5238037109 156.0437316895 0.015625 0.0703129992 ) ( 2854.390625 -1006.0732421875 165.0215454102 0.015625 0 ) )
-)
-}
-}
-// brush 3
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 2806.5961914062 -975.9676513672 147.1504211426 0 0.0156239998 ) ( 2805.8225097656 -976.5974121094 147.0848083496 0 0.0078140004 ) ( 2805.0483398438 -977.2271728516 147.0191955566 0 0 ) )
-( ( 2824.6350097656 -998.2381591797 146.4172668457 0.2239760011 0.0156239998 ) ( 2824.1105957031 -999.0864257812 146.3471679688 0.2239760011 0.0078140004 ) ( 2823.5854492188 -999.9346923828 146.2768554688 0.2239760011 0 ) )
-( ( 2855.0180664062 -1004.9743652344 147.0660400391 0.4671599865 0.0156239998 ) ( 2854.7993164062 -1005.9479980469 146.9987792969 0.4671599865 0.0078140004 ) ( 2854.5817871094 -1006.9216308594 146.9315795898 0.4671599865 0 ) )
-)
-}
-}
-// brush 4
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 2804.4213867188 -978.3260498047 164.9746398926 0 0.015625 ) ( 2805.1953125 -977.6962890625 165.0401306152 0 0.0078140004 ) ( 2805.9694824219 -977.0665283203 165.1057739258 0 0 ) )
-( ( 2822.9587402344 -1001.0335693359 164.2322998047 0.2290830016 0.015625 ) ( 2823.4833984375 -1000.1853027344 164.3024902344 0.2290830016 0.0078140004 ) ( 2824.0083007812 -999.3370361328 164.3728637695 0.2290830016 0 ) )
-( ( 2853.9545898438 -1008.0205078125 164.8871765137 0.4773679972 0.015625 ) ( 2854.1723632812 -1007.046875 164.9542236328 0.4773679972 0.0078140004 ) ( 2854.390625 -1006.0732421875 165.0215454102 0.4773679972 0 ) )
-)
-}
-}
-// brush 5
-{
-patchDef2
-{
-evil_lights/s_bluelight
-( 3 3 0 0 0 )
-(
-( ( 2805.0483398438 -977.2271728516 147.0191955566 0 1 ) ( 2804.7351074219 -977.7766113281 155.9968261719 0 0.5 ) ( 2804.4213867188 -978.3260498047 164.9746398926 0 0 ) )
-( ( 2823.5854492188 -999.9346923828 146.2768554688 0.5 1 ) ( 2823.2722167969 -1000.4841308594 155.2545471191 0.5 0.5 ) ( 2822.9587402344 -1001.0335693359 164.2322998047 0.5 0 ) )
-( ( 2854.5817871094 -1006.9216308594 146.9315795898 1 1 ) ( 2854.2680664062 -1007.4710693359 155.9093322754 1 0.5 ) ( 2853.9545898438 -1008.0205078125 164.8871765137 1 0 ) )
-)
-}
-}
-}
-// entity 81
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 2806.93359375 -748.2194824219 165.1057739258 0 0.1406240016 ) ( 2807.4829101562 -748.5330810547 156.1280822754 0 0.0703120008 ) ( 2808.0322265625 -748.8461914062 147.1504211426 0 0 ) )
-( ( 2784.6630859375 -766.2583007812 164.3728637695 0.2239760011 0.1406240016 ) ( 2785.2124023438 -766.5715332031 155.3950805664 0.2239760011 0.0703120008 ) ( 2785.76171875 -766.8850097656 146.4172668457 0.2239760011 0 ) )
-( ( 2777.9267578125 -796.640625 165.0215454102 0.4671550095 0.1406240016 ) ( 2778.4760742188 -796.9543457031 156.0437316895 0.4671550095 0.0703120008 ) ( 2779.0256347656 -797.2679443359 147.0660400391 0.4671550095 0 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 2805.673828125 -746.6713867188 164.9746398926 0 0.140625 ) ( 2806.2233886719 -746.9851074219 155.9968261719 0 0.0703120008 ) ( 2806.7729492188 -747.2982177734 147.0191955566 0 0 ) )
-( ( 2806.3037109375 -747.4451904297 165.0401306152 0.0078110001 0.140625 ) ( 2806.8530273438 -747.7590332031 156.0625610352 0.0078110001 0.0703120008 ) ( 2807.4025878906 -748.0725097656 147.0848083496 0.0078110001 0 ) )
-( ( 2806.93359375 -748.2194824219 165.1057739258 0.015625 0.140625 ) ( 2807.4829101562 -748.5330810547 156.1280822754 0.015625 0.0703120008 ) ( 2808.0322265625 -748.8461914062 147.1504211426 0.015625 0 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 2777.0783691406 -796.8317871094 146.9315795898 0 0.1406259984 ) ( 2776.5288085938 -796.5179443359 155.9093322754 0 0.0703129992 ) ( 2775.9794921875 -796.2047119141 164.8871765137 0 0 ) )
-( ( 2778.0520019531 -797.0494384766 146.9987792969 0.0078119999 0.1406259984 ) ( 2777.5024414062 -796.7360839844 155.9765014648 0.0078119999 0.0703129992 ) ( 2776.953125 -796.4224853516 164.9542236328 0.0078119999 0 ) )
-( ( 2779.0256347656 -797.2679443359 147.0660400391 0.015625 0.1406259984 ) ( 2778.4760742188 -796.9543457031 156.0437316895 0.015625 0.0703129992 ) ( 2777.9267578125 -796.640625 165.0215454102 0.015625 0 ) )
-)
-}
-}
-// brush 3
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 2808.0322265625 -748.8461914062 147.1504211426 0 0.0156239998 ) ( 2807.4025878906 -748.0725097656 147.0848083496 0 0.0078140004 ) ( 2806.7729492188 -747.2982177734 147.0191955566 0 0 ) )
-( ( 2785.76171875 -766.8850097656 146.4172668457 0.2239760011 0.0156239998 ) ( 2784.9135742188 -766.3605957031 146.3471679688 0.2239760011 0.0078140004 ) ( 2784.0654296875 -765.8355712891 146.2768554688 0.2239760011 0 ) )
-( ( 2779.0256347656 -797.2679443359 147.0660400391 0.4671599865 0.0156239998 ) ( 2778.0520019531 -797.0494384766 146.9987792969 0.4671599865 0.0078140004 ) ( 2777.0783691406 -796.8317871094 146.9315795898 0.4671599865 0 ) )
-)
-}
-}
-// brush 4
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 2805.673828125 -746.6713867188 164.9746398926 0 0.015625 ) ( 2806.3037109375 -747.4451904297 165.0401306152 0 0.0078140004 ) ( 2806.93359375 -748.2194824219 165.1057739258 0 0 ) )
-( ( 2782.9663085938 -765.2087402344 164.2322998047 0.2290830016 0.015625 ) ( 2783.8146972656 -765.7333984375 164.3024902344 0.2290830016 0.0078140004 ) ( 2784.6630859375 -766.2583007812 164.3728637695 0.2290830016 0 ) )
-( ( 2775.9794921875 -796.2047119141 164.8871765137 0.4773679972 0.015625 ) ( 2776.953125 -796.4224853516 164.9542236328 0.4773679972 0.0078140004 ) ( 2777.9267578125 -796.640625 165.0215454102 0.4773679972 0 ) )
-)
-}
-}
-// brush 5
-{
-patchDef2
-{
-evil_lights/s_bluelight
-( 3 3 0 0 0 )
-(
-( ( 2806.7729492188 -747.2982177734 147.0191955566 0 1 ) ( 2806.2233886719 -746.9851074219 155.9968261719 0 0.5 ) ( 2805.673828125 -746.6713867188 164.9746398926 0 0 ) )
-( ( 2784.0654296875 -765.8355712891 146.2768554688 0.5 1 ) ( 2783.5158691406 -765.5222167969 155.2545471191 0.5 0.5 ) ( 2782.9663085938 -765.2087402344 164.2322998047 0.5 0 ) )
-( ( 2777.0783691406 -796.8317871094 146.9315795898 1 1 ) ( 2776.5288085938 -796.5179443359 155.9093322754 1 0.5 ) ( 2775.9794921875 -796.2047119141 164.8871765137 1 0 ) )
-)
-}
-}
-}
-// entity 82
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 3030.0305175781 -748.6834716797 165.1057739258 0 0.1406240016 ) ( 3029.716796875 -749.2329101562 156.1280822754 0 0.0703120008 ) ( 3029.4038085938 -749.7823486328 147.1504211426 0 0 ) )
-( ( 3011.9916992188 -726.4129638672 164.3728637695 0.2239760011 0.1406240016 ) ( 3011.6784667969 -726.9624023438 155.3950805664 0.2239760011 0.0703120008 ) ( 3011.3649902344 -727.5118408203 146.4172668457 0.2239760011 0 ) )
-( ( 2981.609375 -719.6767578125 165.0215454102 0.4671550095 0.1406240016 ) ( 2981.2956542969 -720.2261962891 156.0437316895 0.4671550095 0.0703120008 ) ( 2980.9819335938 -720.7756347656 147.0660400391 0.4671550095 0 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 3031.5786132812 -747.4239501953 164.9746398926 0 0.140625 ) ( 3031.2648925781 -747.9733886719 155.9968261719 0 0.0703120008 ) ( 3030.9516601562 -748.5228271484 147.0191955566 0 0 ) )
-( ( 3030.8046875 -748.0537109375 165.0401306152 0.0078110001 0.140625 ) ( 3030.4909667969 -748.6031494141 156.0625610352 0.0078110001 0.0703120008 ) ( 3030.1774902344 -749.1525878906 147.0848083496 0.0078110001 0 ) )
-( ( 3030.0305175781 -748.6834716797 165.1057739258 0.015625 0.140625 ) ( 3029.716796875 -749.2329101562 156.1280822754 0.015625 0.0703120008 ) ( 3029.4038085938 -749.7823486328 147.1504211426 0.015625 0 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 2981.4182128906 -718.8283691406 146.9315795898 0 0.1406259984 ) ( 2981.7319335938 -718.2789306641 155.9093322754 0 0.0703129992 ) ( 2982.0454101562 -717.7294921875 164.8871765137 0 0 ) )
-( ( 2981.2006835938 -719.8020019531 146.9987792969 0.0078119999 0.1406259984 ) ( 2981.5139160156 -719.2525634766 155.9765014648 0.0078119999 0.0703129992 ) ( 2981.8276367188 -718.703125 164.9542236328 0.0078119999 0 ) )
-( ( 2980.9819335938 -720.7756347656 147.0660400391 0.015625 0.1406259984 ) ( 2981.2956542969 -720.2261962891 156.0437316895 0.015625 0.0703129992 ) ( 2981.609375 -719.6767578125 165.0215454102 0.015625 0 ) )
-)
-}
-}
-// brush 3
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 3029.4038085938 -749.7823486328 147.1504211426 0 0.0156239998 ) ( 3030.1774902344 -749.1525878906 147.0848083496 0 0.0078140004 ) ( 3030.9516601562 -748.5228271484 147.0191955566 0 0 ) )
-( ( 3011.3649902344 -727.5118408203 146.4172668457 0.2239760011 0.0156239998 ) ( 3011.8894042969 -726.6635742188 146.3471679688 0.2239760011 0.0078140004 ) ( 3012.4145507812 -725.8153076172 146.2768554688 0.2239760011 0 ) )
-( ( 2980.9819335938 -720.7756347656 147.0660400391 0.4671599865 0.0156239998 ) ( 2981.2006835938 -719.8020019531 146.9987792969 0.4671599865 0.0078140004 ) ( 2981.4182128906 -718.8283691406 146.9315795898 0.4671599865 0 ) )
-)
-}
-}
-// brush 4
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 3031.5786132812 -747.4239501953 164.9746398926 0 0.015625 ) ( 3030.8046875 -748.0537109375 165.0401306152 0 0.0078140004 ) ( 3030.0305175781 -748.6834716797 165.1057739258 0 0 ) )
-( ( 3013.0412597656 -724.7164306641 164.2322998047 0.2290830016 0.015625 ) ( 3012.5166015625 -725.5646972656 164.3024902344 0.2290830016 0.0078140004 ) ( 3011.9916992188 -726.4129638672 164.3728637695 0.2290830016 0 ) )
-( ( 2982.0454101562 -717.7294921875 164.8871765137 0.4773679972 0.015625 ) ( 2981.8276367188 -718.703125 164.9542236328 0.4773679972 0.0078140004 ) ( 2981.609375 -719.6767578125 165.0215454102 0.4773679972 0 ) )
-)
-}
-}
-// brush 5
-{
-patchDef2
-{
-evil_lights/s_bluelight
-( 3 3 0 0 0 )
-(
-( ( 3030.9516601562 -748.5228271484 147.0191955566 0 1 ) ( 3031.2648925781 -747.9733886719 155.9968261719 0 0.5 ) ( 3031.5786132812 -747.4239501953 164.9746398926 0 0 ) )
-( ( 3012.4145507812 -725.8153076172 146.2768554688 0.5 1 ) ( 3012.7277832031 -725.2658691406 155.2545471191 0.5 0.5 ) ( 3013.0412597656 -724.7164306641 164.2322998047 0.5 0 ) )
-( ( 2981.4182128906 -718.8283691406 146.9315795898 1 1 ) ( 2981.7319335938 -718.2789306641 155.9093322754 1 0.5 ) ( 2982.0454101562 -717.7294921875 164.8871765137 1 0 ) )
-)
-}
-}
-}
-// entity 83
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 9 3 0 0 0 )
-(
-( ( 2917 -1037.5 190 0 0.0625 ) ( 2917 -1035.3800048828 193.391998291 0 0.03125 ) ( 2917 -1033.2600097656 196.783996582 0 0 ) )
-( ( 3101 -1037.5 190 1.4375 0.0625 ) ( 3099.8566894531 -1036.3566894531 193.6586303711 1.4375 0.03125 ) ( 3098.7133789062 -1035.2133789062 197.3172607422 1.4375 0 ) )
-( ( 3101 -861.5 190 2.8125 0.0625 ) ( 3098.8798828125 -861.5 193.391998291 2.8125 0.03125 ) ( 3096.7600097656 -861.5 196.783996582 2.8125 0 ) )
-( ( 3101 -685.5 190 4.1875 0.0625 ) ( 3099.8566894531 -686.6433105469 193.6586303711 4.1875 0.03125 ) ( 3098.7133789062 -687.7866210938 197.3172607422 4.1875 0 ) )
-( ( 2917 -685.5 190 5.625 0.0625 ) ( 2917 -687.6199951172 193.391998291 5.625 0.03125 ) ( 2917 -689.7399902344 196.783996582 5.625 0 ) )
-( ( 2741 -685.5 190 7 0.0625 ) ( 2742.1433105469 -686.6433105469 193.6586303711 7 0.03125 ) ( 2743.2866210938 -687.7866210938 197.3172607422 7 0 ) )
-( ( 2741 -861.5 190 8.375 0.0625 ) ( 2743.1201171875 -861.5 193.391998291 8.375 0.03125 ) ( 2745.2399902344 -861.5 196.783996582 8.375 0 ) )
-( ( 2741 -1037.5 190 9.75 0.0625 ) ( 2742.1433105469 -1036.3566894531 193.6586303711 9.75 0.03125 ) ( 2743.2866210938 -1035.2133789062 197.3172607422 9.75 0 ) )
-( ( 2917 -1037.5 190 11.125 0.0625 ) ( 2917 -1035.3800048828 193.391998291 11.125 0.03125 ) ( 2917 -1033.2600097656 196.783996582 11.125 0 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 9 3 0 0 0 )
-(
-( ( 2917 -1006.7618408203 135.6875610352 0 0 ) ( 2917 -1010.130859375 137.8437805176 0 0.03125 ) ( 2917 -1013.5 140 0 0.0625 ) )
-( ( 3064.0068359375 -1009.0843505859 135.576171875 1.1875 0 ) ( 3066.5034179688 -1011.2922363281 137.7880859375 1.1875 0.03125 ) ( 3069 -1013.5 140 1.1875 0.0625 ) )
-( ( 3061.3806152344 -861.5 137.5617980957 2.375 0 ) ( 3065.1904296875 -861.5 138.7808837891 2.375 0.03125 ) ( 3069 -861.5 140 2.375 0.0625 ) )
-( ( 3064.0068359375 -713.9156494141 135.576171875 3.5625 0 ) ( 3066.5034179688 -711.7077636719 137.7880859375 3.5625 0.03125 ) ( 3069 -709.5 140 3.5625 0.0625 ) )
-( ( 2917 -716.2381591797 135.6875610352 4.75 0 ) ( 2917 -712.869140625 137.8437805176 4.75 0.03125 ) ( 2917 -709.5 140 4.75 0.0625 ) )
-( ( 2769.1940917969 -713.6940917969 134.6315917969 5.9375 0 ) ( 2767.0971679688 -711.5970458984 137.3157958984 5.9375 0.03125 ) ( 2765 -709.5 140 5.9375 0.0625 ) )
-( ( 2771.73828125 -861.5 135.6875610352 7.125 0 ) ( 2768.369140625 -861.5 137.8437805176 7.125 0.03125 ) ( 2765 -861.5 140 7.125 0.0625 ) )
-( ( 2769.1940917969 -1009.3059082031 134.6315917969 8.3125 0 ) ( 2767.0971679688 -1011.4029541016 137.3157958984 8.3125 0.03125 ) ( 2765 -1013.5 140 8.3125 0.0625 ) )
-( ( 2917 -1006.7618408203 135.6875610352 9.5 0 ) ( 2917 -1010.130859375 137.8437805176 9.5 0.03125 ) ( 2917 -1013.5 140 9.5 0.0625 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 9 3 0 0 0 )
-(
-( ( 2917 -1033.2600097656 196.783996582 0 0 ) ( 2917 -989.6953125 166.7570800781 0 0.3685150146 ) ( 2917 -1006.7618408203 135.6875610352 0 0.6004030108 ) )
-( ( 3098.7133789062 -1035.2133789062 197.3172607422 1.1875 0 ) ( 3055.5908203125 -992.4927978516 168.1094360352 1.1875 0.3685150146 ) ( 3064.0068359375 -1009.0843505859 135.576171875 1.1875 0.6004030108 ) )
-( ( 3096.7600097656 -861.5 196.783996582 2.375 0 ) ( 3053.4885253906 -861.5 167.7525634766 2.375 0.3685150146 ) ( 3061.3806152344 -861.5 137.5617980957 2.375 0.6004030108 ) )
-( ( 3098.7133789062 -687.7866210938 197.3172607422 3.5625 0 ) ( 3055.5908203125 -730.5072021484 168.1094360352 3.5625 0.3685150146 ) ( 3064.0068359375 -713.9156494141 135.576171875 3.5625 0.6004030108 ) )
-( ( 2917 -689.7399902344 196.783996582 4.75 0 ) ( 2917 -733.3046875 166.7570800781 4.75 0.3685150146 ) ( 2917 -716.2381591797 135.6875610352 4.75 0.6004030108 ) )
-( ( 2743.2866210938 -687.7866210938 197.3172607422 5.9375 0 ) ( 2786.3901367188 -730.8902587891 167.4270629883 5.9375 0.3685150146 ) ( 2769.1940917969 -713.6940917969 134.6315917969 5.9375 0.6004030108 ) )
-( ( 2745.2399902344 -861.5 196.783996582 7.125 0 ) ( 2788.8046875 -861.5 166.7570800781 7.125 0.3685150146 ) ( 2771.73828125 -861.5 135.6875610352 7.125 0.6004030108 ) )
-( ( 2743.2866210938 -1035.2133789062 197.3172607422 8.3125 0 ) ( 2786.3901367188 -992.1097412109 167.4270629883 8.3125 0.3685150146 ) ( 2769.1940917969 -1009.3059082031 134.6315917969 8.3125 0.6004030108 ) )
-( ( 2917 -1033.2600097656 196.783996582 9.5 0 ) ( 2917 -989.6953125 166.7570800781 9.5 0.3685150146 ) ( 2917 -1006.7618408203 135.6875610352 9.5 0.6004030108 ) )
-)
-}
-}
-// brush 3
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 9 3 0 0 0 )
-(
-( ( 2917 -1013.5 140 0 0.6004030108 ) ( 2917 -997.5 165 0 0.3685150146 ) ( 2917 -1037.5 190 0 0 ) )
-( ( 3069 -1013.5 140 1.1875 0.6004030108 ) ( 3061 -997.5 165 1.1875 0.3685150146 ) ( 3101 -1037.5 190 1.1875 0 ) )
-( ( 3069 -861.5 140 2.375 0.6004030108 ) ( 3061 -861.5 165 2.375 0.3685150146 ) ( 3101 -861.5 190 2.375 0 ) )
-( ( 3069 -709.5 140 3.5625 0.6004030108 ) ( 3061 -725.5 165 3.5625 0.3685150146 ) ( 3101 -685.5 190 3.5625 0 ) )
-( ( 2917 -709.5 140 4.75 0.6004030108 ) ( 2917 -725.5 165 4.75 0.3685150146 ) ( 2917 -685.5 190 4.75 0 ) )
-( ( 2765 -709.5 140 5.9375 0.6004030108 ) ( 2781 -725.5 165 5.9375 0.3685150146 ) ( 2741 -685.5 190 5.9375 0 ) )
-( ( 2765 -861.5 140 7.125 0.6004030108 ) ( 2781 -861.5 165 7.125 0.3685150146 ) ( 2741 -861.5 190 7.125 0 ) )
-( ( 2765 -1013.5 140 8.3125 0.6004030108 ) ( 2781 -997.5 165 8.3125 0.3685150146 ) ( 2741 -1037.5 190 8.3125 0 ) )
-( ( 2917 -1013.5 140 9.5 0.6004030108 ) ( 2917 -997.5 165 9.5 0.3685150146 ) ( 2917 -1037.5 190 9.5 0 ) )
-)
-}
-}
-}
-// entity 84
-{
-"classname" "func_group"
-"type" "patchCapped"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( 2967.5 -849 176 -1.2890629768 7.125 ) ( 2934.5 -849 176 -1.2890629768 6.8671879768 ) ( 2934.5 -816 176 -1.03125 6.8671879768 ) )
-( ( 2934.5 -849 176 -1.2890629768 6.8671879768 ) ( 2934.5 -849 176 -1.2890629768 6.8671879768 ) ( 2934.5 -849 176 -1.2890629768 6.8671879768 ) )
-( ( 2934.5 -849 176 -1.2890629768 6.8671879768 ) ( 2934.5 -849 176 -1.2890629768 6.8671879768 ) ( 2934.5 -849 176 -1.2890629768 6.8671879768 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( 2934.5 -816 184 -1.03125 6.8671879768 ) ( 2934.5 -849 184 -1.2890629768 6.8671879768 ) ( 2967.5 -849 184 -1.2890629768 7.125 ) )
-( ( 2934.5 -849 184 -1.2890629768 6.8671879768 ) ( 2934.5 -849 184 -1.2890629768 6.8671879768 ) ( 2934.5 -849 184 -1.2890629768 6.8671879768 ) )
-( ( 2934.5 -849 184 -1.2890629768 6.8671879768 ) ( 2934.5 -849 184 -1.2890629768 6.8671879768 ) ( 2934.5 -849 184 -1.2890629768 6.8671879768 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( 2934.5 -816 184 0 0.0625 ) ( 2934.5 -816 180 0 0.03125 ) ( 2934.5 -816 176 0 0 ) )
-( ( 2934.5 -849 184 0.2578130066 0.0625 ) ( 2934.5 -849 180 0.2578130066 0.03125 ) ( 2934.5 -849 176 0.2578130066 0 ) )
-( ( 2967.5 -849 184 0.515625 0.0625 ) ( 2967.5 -849 180 0.515625 0.03125 ) ( 2967.5 -849 176 0.515625 0 ) )
-)
-}
-}
-}
-// entity 85
-{
-"classname" "func_group"
-"type" "patchCapped"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( 2934.5 -912 176 -1.78125 6.8671879768 ) ( 2934.5 -879 176 -1.5234379768 6.8671879768 ) ( 2967.5 -879 176 -1.5234379768 7.125 ) )
-( ( 2934.5 -879 176 -1.5234379768 6.8671879768 ) ( 2934.5 -879 176 -1.5234379768 6.8671879768 ) ( 2934.5 -879 176 -1.5234379768 6.8671879768 ) )
-( ( 2934.5 -879 176 -1.5234379768 6.8671879768 ) ( 2934.5 -879 176 -1.5234379768 6.8671879768 ) ( 2934.5 -879 176 -1.5234379768 6.8671879768 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( 2967.5 -879 184 -1.5234379768 7.125 ) ( 2934.5 -879 184 -1.5234379768 6.8671879768 ) ( 2934.5 -912 184 -1.78125 6.8671879768 ) )
-( ( 2934.5 -879 184 -1.5234379768 6.8671879768 ) ( 2934.5 -879 184 -1.5234379768 6.8671879768 ) ( 2934.5 -879 184 -1.5234379768 6.8671879768 ) )
-( ( 2934.5 -879 184 -1.5234379768 6.8671879768 ) ( 2934.5 -879 184 -1.5234379768 6.8671879768 ) ( 2934.5 -879 184 -1.5234379768 6.8671879768 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( 2967.5 -879 184 0 0.0625 ) ( 2967.5 -879 180 0 0.03125 ) ( 2967.5 -879 176 0 0 ) )
-( ( 2934.5 -879 184 0.2578130066 0.0625 ) ( 2934.5 -879 180 0.2578130066 0.03125 ) ( 2934.5 -879 176 0.2578130066 0 ) )
-( ( 2934.5 -912 184 0.515625 0.0625 ) ( 2934.5 -912 180 0.515625 0.03125 ) ( 2934.5 -912 176 0.515625 0 ) )
-)
-}
-}
-}
-// entity 86
-{
-"classname" "func_group"
-"type" "patchCapped"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( 2872 -879 176 -1.5234379768 6.375 ) ( 2905 -879 176 -1.5234379768 6.6328129768 ) ( 2905 -912 176 -1.78125 6.6328129768 ) )
-( ( 2905 -879 176 -1.5234379768 6.6328129768 ) ( 2905 -879 176 -1.5234379768 6.6328129768 ) ( 2905 -879 176 -1.5234379768 6.6328129768 ) )
-( ( 2905 -879 176 -1.5234379768 6.6328129768 ) ( 2905 -879 176 -1.5234379768 6.6328129768 ) ( 2905 -879 176 -1.5234379768 6.6328129768 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( 2905 -912 184 -1.78125 6.6328129768 ) ( 2905 -879 184 -1.5234379768 6.6328129768 ) ( 2872 -879 184 -1.5234379768 6.375 ) )
-( ( 2905 -879 184 -1.5234379768 6.6328129768 ) ( 2905 -879 184 -1.5234379768 6.6328129768 ) ( 2905 -879 184 -1.5234379768 6.6328129768 ) )
-( ( 2905 -879 184 -1.5234379768 6.6328129768 ) ( 2905 -879 184 -1.5234379768 6.6328129768 ) ( 2905 -879 184 -1.5234379768 6.6328129768 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( 2905 -912 184 0 0.0625 ) ( 2905 -912 180 0 0.03125 ) ( 2905 -912 176 0 0 ) )
-( ( 2905 -879 184 0.2578130066 0.0625 ) ( 2905 -879 180 0.2578130066 0.03125 ) ( 2905 -879 176 0.2578130066 0 ) )
-( ( 2872 -879 184 0.515625 0.0625 ) ( 2872 -879 180 0.515625 0.03125 ) ( 2872 -879 176 0.515625 0 ) )
-)
-}
-}
-}
-// entity 87
-{
-"classname" "func_group"
-"type" "patchCapped"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( 2905 -816 176 -1.03125 6.6328129768 ) ( 2905 -849 176 -1.2890629768 6.6328129768 ) ( 2872 -849 176 -1.2890629768 6.375 ) )
-( ( 2905 -849 176 -1.2890629768 6.6328129768 ) ( 2905 -849 176 -1.2890629768 6.6328129768 ) ( 2905 -849 176 -1.2890629768 6.6328129768 ) )
-( ( 2905 -849 176 -1.2890629768 6.6328129768 ) ( 2905 -849 176 -1.2890629768 6.6328129768 ) ( 2905 -849 176 -1.2890629768 6.6328129768 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( 2872 -849 184 -1.2890629768 6.375 ) ( 2905 -849 184 -1.2890629768 6.6328129768 ) ( 2905 -816 184 -1.03125 6.6328129768 ) )
-( ( 2905 -849 184 -1.2890629768 6.6328129768 ) ( 2905 -849 184 -1.2890629768 6.6328129768 ) ( 2905 -849 184 -1.2890629768 6.6328129768 ) )
-( ( 2905 -849 184 -1.2890629768 6.6328129768 ) ( 2905 -849 184 -1.2890629768 6.6328129768 ) ( 2905 -849 184 -1.2890629768 6.6328129768 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( 2872 -849 184 0 0.0625 ) ( 2872 -849 180 0 0.03125 ) ( 2872 -849 176 0 0 ) )
-( ( 2905 -849 184 0.2578130066 0.0625 ) ( 2905 -849 180 0.2578130066 0.03125 ) ( 2905 -849 176 0.2578130066 0 ) )
-( ( 2905 -816 184 0.515625 0.0625 ) ( 2905 -816 180 0.515625 0.03125 ) ( 2905 -816 176 0.515625 0 ) )
-)
-}
-}
-}
-// entity 88
-{
-"classname" "func_group"
-"type" "patchCapped"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 9 3 0 0 0 )
-(
-( ( 2919.5 -900 -16 0 0.420065999 ) ( 2919.5 -895 -0.0999979973 0 0.2898499966 ) ( 2919.5 -895.25 37.0000076294 0 0 ) )
-( ( 2955.5 -900 -16 0.28125 0.420065999 ) ( 2950.5 -895 -0.0999979973 0.28125 0.2898499966 ) ( 2950.75 -895.25 37.0000076294 0.28125 0 ) )
-( ( 2955.5 -864 -16 0.5625 0.420065999 ) ( 2950.5 -864 -0.0999979973 0.5625 0.2898499966 ) ( 2950.75 -864 37.0000076294 0.5625 0 ) )
-( ( 2955.5 -828 -16 0.84375 0.420065999 ) ( 2950.5 -833 -0.0999979973 0.84375 0.2898499966 ) ( 2950.75 -832.75 37.0000076294 0.84375 0 ) )
-( ( 2919.5 -828 -16 1.125 0.420065999 ) ( 2919.5 -833 -0.0999979973 1.125 0.2898499966 ) ( 2919.5 -832.75 37.0000076294 1.125 0 ) )
-( ( 2883.5 -828 -16 1.40625 0.420065999 ) ( 2888.5 -833 -0.0999979973 1.40625 0.2898499966 ) ( 2888.25 -832.75 37.0000076294 1.40625 0 ) )
-( ( 2883.5 -864 -16 1.6875 0.420065999 ) ( 2888.5 -864 -0.0999979973 1.6875 0.2898499966 ) ( 2888.25 -864 37.0000076294 1.6875 0 ) )
-( ( 2883.5 -900 -16 1.96875 0.420065999 ) ( 2888.5 -895 -0.0999979973 1.96875 0.2898499966 ) ( 2888.25 -895.25 37.0000076294 1.96875 0 ) )
-( ( 2919.5 -900 -16 2.25 0.420065999 ) ( 2919.5 -895 -0.0999979973 2.25 0.2898499966 ) ( 2919.5 -895.25 37.0000076294 2.25 0 ) )
-)
-}
-}
-}
-// entity 89
-{
-"classname" "func_group"
-"type" "patchCapped"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 9 3 0 0 0 )
-(
-( ( 2919.5 62.25 -16 0 0.420065999 ) ( 2919.5 67.25 -0.0999979973 0 0.2898499966 ) ( 2919.5 67 37.0000076294 0 0 ) )
-( ( 2955.5 62.25 -16 0.28125 0.420065999 ) ( 2950.5 67.25 -0.0999979973 0.28125 0.2898499966 ) ( 2950.75 67 37.0000076294 0.28125 0 ) )
-( ( 2955.5 98.25 -16 0.5625 0.420065999 ) ( 2950.5 98.25 -0.0999979973 0.5625 0.2898499966 ) ( 2950.75 98.25 37.0000076294 0.5625 0 ) )
-( ( 2955.5 134.25 -16 0.84375 0.420065999 ) ( 2950.5 129.25 -0.0999979973 0.84375 0.2898499966 ) ( 2950.75 129.5 37.0000076294 0.84375 0 ) )
-( ( 2919.5 134.25 -16 1.125 0.420065999 ) ( 2919.5 129.25 -0.0999979973 1.125 0.2898499966 ) ( 2919.5 129.5 37.0000076294 1.125 0 ) )
-( ( 2883.5 134.25 -16 1.40625 0.420065999 ) ( 2888.5 129.25 -0.0999979973 1.40625 0.2898499966 ) ( 2888.25 129.5 37.0000076294 1.40625 0 ) )
-( ( 2883.5 98.25 -16 1.6875 0.420065999 ) ( 2888.5 98.25 -0.0999979973 1.6875 0.2898499966 ) ( 2888.25 98.25 37.0000076294 1.6875 0 ) )
-( ( 2883.5 62.25 -16 1.96875 0.420065999 ) ( 2888.5 67.25 -0.0999979973 1.96875 0.2898499966 ) ( 2888.25 67 37.0000076294 1.96875 0 ) )
-( ( 2919.5 62.25 -16 2.25 0.420065999 ) ( 2919.5 67.25 -0.0999979973 2.25 0.2898499966 ) ( 2919.5 67 37.0000076294 2.25 0 ) )
-)
-}
-}
-}
-// entity 90
-{
-"classname" "func_group"
-"type" "patchCapped"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( 2905 146 176 -1.03125 6.6328129768 ) ( 2905 113 176 -1.2890629768 6.6328129768 ) ( 2872 113 176 -1.2890629768 6.375 ) )
-( ( 2905 113 176 -1.2890629768 6.6328129768 ) ( 2905 113 176 -1.2890629768 6.6328129768 ) ( 2905 113 176 -1.2890629768 6.6328129768 ) )
-( ( 2905 113 176 -1.2890629768 6.6328129768 ) ( 2905 113 176 -1.2890629768 6.6328129768 ) ( 2905 113 176 -1.2890629768 6.6328129768 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( 2872 113 184 -1.2890629768 6.375 ) ( 2905 113 184 -1.2890629768 6.6328129768 ) ( 2905 146 184 -1.03125 6.6328129768 ) )
-( ( 2905 113 184 -1.2890629768 6.6328129768 ) ( 2905 113 184 -1.2890629768 6.6328129768 ) ( 2905 113 184 -1.2890629768 6.6328129768 ) )
-( ( 2905 113 184 -1.2890629768 6.6328129768 ) ( 2905 113 184 -1.2890629768 6.6328129768 ) ( 2905 113 184 -1.2890629768 6.6328129768 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( 2872 113 184 0 0.0625 ) ( 2872 113 180 0 0.03125 ) ( 2872 113 176 0 0 ) )
-( ( 2905 113 184 0.2578130066 0.0625 ) ( 2905 113 180 0.2578130066 0.03125 ) ( 2905 113 176 0.2578130066 0 ) )
-( ( 2905 146 184 0.515625 0.0625 ) ( 2905 146 180 0.515625 0.03125 ) ( 2905 146 176 0.515625 0 ) )
-)
-}
-}
-}
-// entity 91
-{
-"classname" "func_group"
-"type" "patchCapped"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( 2872 83 176 -1.5234379768 6.375 ) ( 2905 83 176 -1.5234379768 6.6328129768 ) ( 2905 50 176 -1.78125 6.6328129768 ) )
-( ( 2905 83 176 -1.5234379768 6.6328129768 ) ( 2905 83 176 -1.5234379768 6.6328129768 ) ( 2905 83 176 -1.5234379768 6.6328129768 ) )
-( ( 2905 83 176 -1.5234379768 6.6328129768 ) ( 2905 83 176 -1.5234379768 6.6328129768 ) ( 2905 83 176 -1.5234379768 6.6328129768 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( 2905 50 184 -1.78125 6.6328129768 ) ( 2905 83 184 -1.5234379768 6.6328129768 ) ( 2872 83 184 -1.5234379768 6.375 ) )
-( ( 2905 83 184 -1.5234379768 6.6328129768 ) ( 2905 83 184 -1.5234379768 6.6328129768 ) ( 2905 83 184 -1.5234379768 6.6328129768 ) )
-( ( 2905 83 184 -1.5234379768 6.6328129768 ) ( 2905 83 184 -1.5234379768 6.6328129768 ) ( 2905 83 184 -1.5234379768 6.6328129768 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( 2905 50 184 0 0.0625 ) ( 2905 50 180 0 0.03125 ) ( 2905 50 176 0 0 ) )
-( ( 2905 83 184 0.2578130066 0.0625 ) ( 2905 83 180 0.2578130066 0.03125 ) ( 2905 83 176 0.2578130066 0 ) )
-( ( 2872 83 184 0.515625 0.0625 ) ( 2872 83 180 0.515625 0.03125 ) ( 2872 83 176 0.515625 0 ) )
-)
-}
-}
-}
-// entity 92
-{
-"classname" "func_group"
-"type" "patchCapped"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( 2935 50 176 -1.78125 6.8671879768 ) ( 2935 83 176 -1.5234379768 6.8671879768 ) ( 2968 83 176 -1.5234379768 7.125 ) )
-( ( 2935 83 176 -1.5234379768 6.8671879768 ) ( 2935 83 176 -1.5234379768 6.8671879768 ) ( 2935 83 176 -1.5234379768 6.8671879768 ) )
-( ( 2935 83 176 -1.5234379768 6.8671879768 ) ( 2935 83 176 -1.5234379768 6.8671879768 ) ( 2935 83 176 -1.5234379768 6.8671879768 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( 2968 83 184 -1.5234379768 7.125 ) ( 2935 83 184 -1.5234379768 6.8671879768 ) ( 2935 50 184 -1.78125 6.8671879768 ) )
-( ( 2935 83 184 -1.5234379768 6.8671879768 ) ( 2935 83 184 -1.5234379768 6.8671879768 ) ( 2935 83 184 -1.5234379768 6.8671879768 ) )
-( ( 2935 83 184 -1.5234379768 6.8671879768 ) ( 2935 83 184 -1.5234379768 6.8671879768 ) ( 2935 83 184 -1.5234379768 6.8671879768 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( 2968 83 184 0 0.0625 ) ( 2968 83 180 0 0.03125 ) ( 2968 83 176 0 0 ) )
-( ( 2935 83 184 0.2578130066 0.0625 ) ( 2935 83 180 0.2578130066 0.03125 ) ( 2935 83 176 0.2578130066 0 ) )
-( ( 2935 50 184 0.515625 0.0625 ) ( 2935 50 180 0.515625 0.03125 ) ( 2935 50 176 0.515625 0 ) )
-)
-}
-}
-}
-// entity 93
-{
-"classname" "func_group"
-"type" "patchCapped"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( 2968 113 176 -1.2890629768 7.125 ) ( 2935 113 176 -1.2890629768 6.8671879768 ) ( 2935 146 176 -1.03125 6.8671879768 ) )
-( ( 2935 113 176 -1.2890629768 6.8671879768 ) ( 2935 113 176 -1.2890629768 6.8671879768 ) ( 2935 113 176 -1.2890629768 6.8671879768 ) )
-( ( 2935 113 176 -1.2890629768 6.8671879768 ) ( 2935 113 176 -1.2890629768 6.8671879768 ) ( 2935 113 176 -1.2890629768 6.8671879768 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( 2935 146 184 -1.03125 6.8671879768 ) ( 2935 113 184 -1.2890629768 6.8671879768 ) ( 2968 113 184 -1.2890629768 7.125 ) )
-( ( 2935 113 184 -1.2890629768 6.8671879768 ) ( 2935 113 184 -1.2890629768 6.8671879768 ) ( 2935 113 184 -1.2890629768 6.8671879768 ) )
-( ( 2935 113 184 -1.2890629768 6.8671879768 ) ( 2935 113 184 -1.2890629768 6.8671879768 ) ( 2935 113 184 -1.2890629768 6.8671879768 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( 2935 146 184 0 0.0625 ) ( 2935 146 180 0 0.03125 ) ( 2935 146 176 0 0 ) )
-( ( 2935 113 184 0.2578130066 0.0625 ) ( 2935 113 180 0.2578130066 0.03125 ) ( 2935 113 176 0.2578130066 0 ) )
-( ( 2968 113 184 0.515625 0.0625 ) ( 2968 113 180 0.515625 0.03125 ) ( 2968 113 176 0.515625 0 ) )
-)
-}
-}
-}
-// entity 94
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 9 3 0 0 0 )
-(
-( ( 2917 -75.25 190 0 0.0625 ) ( 2917 -73.1300048828 193.391998291 0 0.03125 ) ( 2917 -71.0100097656 196.783996582 0 0 ) )
-( ( 3101 -75.25 190 1.4375 0.0625 ) ( 3099.8566894531 -74.1066894531 193.6586303711 1.4375 0.03125 ) ( 3098.7133789062 -72.9633789062 197.3172607422 1.4375 0 ) )
-( ( 3101 100.75 190 2.8125 0.0625 ) ( 3098.8798828125 100.75 193.391998291 2.8125 0.03125 ) ( 3096.7600097656 100.75 196.783996582 2.8125 0 ) )
-( ( 3101 276.75 190 4.1875 0.0625 ) ( 3099.8566894531 275.6066894531 193.6586303711 4.1875 0.03125 ) ( 3098.7133789062 274.4633789062 197.3172607422 4.1875 0 ) )
-( ( 2917 276.75 190 5.625 0.0625 ) ( 2917 274.6300048828 193.391998291 5.625 0.03125 ) ( 2917 272.5100097656 196.783996582 5.625 0 ) )
-( ( 2741 276.75 190 7 0.0625 ) ( 2742.1433105469 275.6066894531 193.6586303711 7 0.03125 ) ( 2743.2866210938 274.4633789062 197.3172607422 7 0 ) )
-( ( 2741 100.75 190 8.375 0.0625 ) ( 2743.1201171875 100.75 193.391998291 8.375 0.03125 ) ( 2745.2399902344 100.75 196.783996582 8.375 0 ) )
-( ( 2741 -75.25 190 9.75 0.0625 ) ( 2742.1433105469 -74.1066894531 193.6586303711 9.75 0.03125 ) ( 2743.2866210938 -72.9633789062 197.3172607422 9.75 0 ) )
-( ( 2917 -75.25 190 11.125 0.0625 ) ( 2917 -73.1300048828 193.391998291 11.125 0.03125 ) ( 2917 -71.0100097656 196.783996582 11.125 0 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 9 3 0 0 0 )
-(
-( ( 2917 -44.5118408203 135.6875610352 0 0 ) ( 2917 -47.880859375 137.8437805176 0 0.03125 ) ( 2917 -51.25 140 0 0.0625 ) )
-( ( 3064.0068359375 -46.8343505859 135.576171875 1.1875 0 ) ( 3066.5034179688 -49.0422363281 137.7880859375 1.1875 0.03125 ) ( 3069 -51.25 140 1.1875 0.0625 ) )
-( ( 3061.3806152344 100.75 137.5617980957 2.375 0 ) ( 3065.1904296875 100.75 138.7808837891 2.375 0.03125 ) ( 3069 100.75 140 2.375 0.0625 ) )
-( ( 3064.0068359375 248.3343505859 135.576171875 3.5625 0 ) ( 3066.5034179688 250.5422363281 137.7880859375 3.5625 0.03125 ) ( 3069 252.75 140 3.5625 0.0625 ) )
-( ( 2917 246.0118408203 135.6875610352 4.75 0 ) ( 2917 249.380859375 137.8437805176 4.75 0.03125 ) ( 2917 252.75 140 4.75 0.0625 ) )
-( ( 2769.1940917969 248.5559082031 134.6315917969 5.9375 0 ) ( 2767.0971679688 250.6529541016 137.3157958984 5.9375 0.03125 ) ( 2765 252.75 140 5.9375 0.0625 ) )
-( ( 2771.73828125 100.75 135.6875610352 7.125 0 ) ( 2768.369140625 100.75 137.8437805176 7.125 0.03125 ) ( 2765 100.75 140 7.125 0.0625 ) )
-( ( 2769.1940917969 -47.0559082031 134.6315917969 8.3125 0 ) ( 2767.0971679688 -49.1529541016 137.3157958984 8.3125 0.03125 ) ( 2765 -51.25 140 8.3125 0.0625 ) )
-( ( 2917 -44.5118408203 135.6875610352 9.5 0 ) ( 2917 -47.880859375 137.8437805176 9.5 0.03125 ) ( 2917 -51.25 140 9.5 0.0625 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 9 3 0 0 0 )
-(
-( ( 2917 -71.0100097656 196.783996582 0 0 ) ( 2917 -27.4453125 166.7570800781 0 0.3685150146 ) ( 2917 -44.5118408203 135.6875610352 0 0.6004030108 ) )
-( ( 3098.7133789062 -72.9633789062 197.3172607422 1.1875 0 ) ( 3055.5908203125 -30.2427978516 168.1094360352 1.1875 0.3685150146 ) ( 3064.0068359375 -46.8343505859 135.576171875 1.1875 0.6004030108 ) )
-( ( 3096.7600097656 100.75 196.783996582 2.375 0 ) ( 3053.4885253906 100.75 167.7525634766 2.375 0.3685150146 ) ( 3061.3806152344 100.75 137.5617980957 2.375 0.6004030108 ) )
-( ( 3098.7133789062 274.4633789062 197.3172607422 3.5625 0 ) ( 3055.5908203125 231.7427978516 168.1094360352 3.5625 0.3685150146 ) ( 3064.0068359375 248.3343505859 135.576171875 3.5625 0.6004030108 ) )
-( ( 2917 272.5100097656 196.783996582 4.75 0 ) ( 2917 228.9453125 166.7570800781 4.75 0.3685150146 ) ( 2917 246.0118408203 135.6875610352 4.75 0.6004030108 ) )
-( ( 2743.2866210938 274.4633789062 197.3172607422 5.9375 0 ) ( 2786.3901367188 231.3597412109 167.4270629883 5.9375 0.3685150146 ) ( 2769.1940917969 248.5559082031 134.6315917969 5.9375 0.6004030108 ) )
-( ( 2745.2399902344 100.75 196.783996582 7.125 0 ) ( 2788.8046875 100.75 166.7570800781 7.125 0.3685150146 ) ( 2771.73828125 100.75 135.6875610352 7.125 0.6004030108 ) )
-( ( 2743.2866210938 -72.9633789062 197.3172607422 8.3125 0 ) ( 2786.3901367188 -29.8597412109 167.4270629883 8.3125 0.3685150146 ) ( 2769.1940917969 -47.0559082031 134.6315917969 8.3125 0.6004030108 ) )
-( ( 2917 -71.0100097656 196.783996582 9.5 0 ) ( 2917 -27.4453125 166.7570800781 9.5 0.3685150146 ) ( 2917 -44.5118408203 135.6875610352 9.5 0.6004030108 ) )
-)
-}
-}
-// brush 3
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 9 3 0 0 0 )
-(
-( ( 2917 -51.25 140 0 0.6004030108 ) ( 2917 -35.25 165 0 0.3685150146 ) ( 2917 -75.25 190 0 0 ) )
-( ( 3069 -51.25 140 1.1875 0.6004030108 ) ( 3061 -35.25 165 1.1875 0.3685150146 ) ( 3101 -75.25 190 1.1875 0 ) )
-( ( 3069 100.75 140 2.375 0.6004030108 ) ( 3061 100.75 165 2.375 0.3685150146 ) ( 3101 100.75 190 2.375 0 ) )
-( ( 3069 252.75 140 3.5625 0.6004030108 ) ( 3061 236.75 165 3.5625 0.3685150146 ) ( 3101 276.75 190 3.5625 0 ) )
-( ( 2917 252.75 140 4.75 0.6004030108 ) ( 2917 236.75 165 4.75 0.3685150146 ) ( 2917 276.75 190 4.75 0 ) )
-( ( 2765 252.75 140 5.9375 0.6004030108 ) ( 2781 236.75 165 5.9375 0.3685150146 ) ( 2741 276.75 190 5.9375 0 ) )
-( ( 2765 100.75 140 7.125 0.6004030108 ) ( 2781 100.75 165 7.125 0.3685150146 ) ( 2741 100.75 190 7.125 0 ) )
-( ( 2765 -51.25 140 8.3125 0.6004030108 ) ( 2781 -35.25 165 8.3125 0.3685150146 ) ( 2741 -75.25 190 8.3125 0 ) )
-( ( 2917 -51.25 140 9.5 0.6004030108 ) ( 2917 -35.25 165 9.5 0.3685150146 ) ( 2917 -75.25 190 9.5 0 ) )
-)
-}
-}
-}
-// entity 95
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 3030.0305175781 213.5665283203 165.1057739258 0 0.1406240016 ) ( 3029.716796875 213.0170898438 156.1280822754 0 0.0703120008 ) ( 3029.4038085938 212.4676513672 147.1504211426 0 0 ) )
-( ( 3011.9916992188 235.8370361328 164.3728637695 0.2239760011 0.1406240016 ) ( 3011.6784667969 235.2875976562 155.3950805664 0.2239760011 0.0703120008 ) ( 3011.3649902344 234.7381591797 146.4172668457 0.2239760011 0 ) )
-( ( 2981.609375 242.5732421875 165.0215454102 0.4671550095 0.1406240016 ) ( 2981.2956542969 242.0238037109 156.0437316895 0.4671550095 0.0703120008 ) ( 2980.9819335938 241.4743652344 147.0660400391 0.4671550095 0 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 3031.5786132812 214.8260498047 164.9746398926 0 0.140625 ) ( 3031.2648925781 214.2766113281 155.9968261719 0 0.0703120008 ) ( 3030.9516601562 213.7271728516 147.0191955566 0 0 ) )
-( ( 3030.8046875 214.1962890625 165.0401306152 0.0078110001 0.140625 ) ( 3030.4909667969 213.6468505859 156.0625610352 0.0078110001 0.0703120008 ) ( 3030.1774902344 213.0974121094 147.0848083496 0.0078110001 0 ) )
-( ( 3030.0305175781 213.5665283203 165.1057739258 0.015625 0.140625 ) ( 3029.716796875 213.0170898438 156.1280822754 0.015625 0.0703120008 ) ( 3029.4038085938 212.4676513672 147.1504211426 0.015625 0 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 2981.4182128906 243.4216308594 146.9315795898 0 0.1406259984 ) ( 2981.7319335938 243.9710693359 155.9093322754 0 0.0703129992 ) ( 2982.0454101562 244.5205078125 164.8871765137 0 0 ) )
-( ( 2981.2006835938 242.4479980469 146.9987792969 0.0078119999 0.1406259984 ) ( 2981.5139160156 242.9974365234 155.9765014648 0.0078119999 0.0703129992 ) ( 2981.8276367188 243.546875 164.9542236328 0.0078119999 0 ) )
-( ( 2980.9819335938 241.4743652344 147.0660400391 0.015625 0.1406259984 ) ( 2981.2956542969 242.0238037109 156.0437316895 0.015625 0.0703129992 ) ( 2981.609375 242.5732421875 165.0215454102 0.015625 0 ) )
-)
-}
-}
-// brush 3
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 3029.4038085938 212.4676513672 147.1504211426 0 0.0156239998 ) ( 3030.1774902344 213.0974121094 147.0848083496 0 0.0078140004 ) ( 3030.9516601562 213.7271728516 147.0191955566 0 0 ) )
-( ( 3011.3649902344 234.7381591797 146.4172668457 0.2239760011 0.0156239998 ) ( 3011.8894042969 235.5864257812 146.3471679688 0.2239760011 0.0078140004 ) ( 3012.4145507812 236.4346923828 146.2768554688 0.2239760011 0 ) )
-( ( 2980.9819335938 241.4743652344 147.0660400391 0.4671599865 0.0156239998 ) ( 2981.2006835938 242.4479980469 146.9987792969 0.4671599865 0.0078140004 ) ( 2981.4182128906 243.4216308594 146.9315795898 0.4671599865 0 ) )
-)
-}
-}
-// brush 4
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 3031.5786132812 214.8260498047 164.9746398926 0 0.015625 ) ( 3030.8046875 214.1962890625 165.0401306152 0 0.0078140004 ) ( 3030.0305175781 213.5665283203 165.1057739258 0 0 ) )
-( ( 3013.0412597656 237.5335693359 164.2322998047 0.2290830016 0.015625 ) ( 3012.5166015625 236.6853027344 164.3024902344 0.2290830016 0.0078140004 ) ( 3011.9916992188 235.8370361328 164.3728637695 0.2290830016 0 ) )
-( ( 2982.0454101562 244.5205078125 164.8871765137 0.4773679972 0.015625 ) ( 2981.8276367188 243.546875 164.9542236328 0.4773679972 0.0078140004 ) ( 2981.609375 242.5732421875 165.0215454102 0.4773679972 0 ) )
-)
-}
-}
-// brush 5
-{
-patchDef2
-{
-evil_lights/s_bluelight
-( 3 3 0 0 0 )
-(
-( ( 3030.9516601562 213.7271728516 147.0191955566 0 1 ) ( 3031.2648925781 214.2766113281 155.9968261719 0 0.5 ) ( 3031.5786132812 214.8260498047 164.9746398926 0 0 ) )
-( ( 3012.4145507812 236.4346923828 146.2768554688 0.5 1 ) ( 3012.7277832031 236.9841308594 155.2545471191 0.5 0.5 ) ( 3013.0412597656 237.5335693359 164.2322998047 0.5 0 ) )
-( ( 2981.4182128906 243.4216308594 146.9315795898 1 1 ) ( 2981.7319335938 243.9710693359 155.9093322754 1 0.5 ) ( 2982.0454101562 244.5205078125 164.8871765137 1 0 ) )
-)
-}
-}
-}
-// entity 96
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 2806.93359375 214.0305175781 165.1057739258 0 0.1406240016 ) ( 2807.4829101562 213.7169189453 156.1280822754 0 0.0703120008 ) ( 2808.0322265625 213.4038085938 147.1504211426 0 0 ) )
-( ( 2784.6630859375 195.9916992188 164.3728637695 0.2239760011 0.1406240016 ) ( 2785.2124023438 195.6784667969 155.3950805664 0.2239760011 0.0703120008 ) ( 2785.76171875 195.3649902344 146.4172668457 0.2239760011 0 ) )
-( ( 2777.9267578125 165.609375 165.0215454102 0.4671550095 0.1406240016 ) ( 2778.4760742188 165.2956542969 156.0437316895 0.4671550095 0.0703120008 ) ( 2779.0256347656 164.9820556641 147.0660400391 0.4671550095 0 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 2805.673828125 215.5786132812 164.9746398926 0 0.140625 ) ( 2806.2233886719 215.2648925781 155.9968261719 0 0.0703120008 ) ( 2806.7729492188 214.9517822266 147.0191955566 0 0 ) )
-( ( 2806.3037109375 214.8048095703 165.0401306152 0.0078110001 0.140625 ) ( 2806.8530273438 214.4909667969 156.0625610352 0.0078110001 0.0703120008 ) ( 2807.4025878906 214.1774902344 147.0848083496 0.0078110001 0 ) )
-( ( 2806.93359375 214.0305175781 165.1057739258 0.015625 0.140625 ) ( 2807.4829101562 213.7169189453 156.1280822754 0.015625 0.0703120008 ) ( 2808.0322265625 213.4038085938 147.1504211426 0.015625 0 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 2777.0783691406 165.4182128906 146.9315795898 0 0.1406259984 ) ( 2776.5288085938 165.7320556641 155.9093322754 0 0.0703129992 ) ( 2775.9794921875 166.0452880859 164.8871765137 0 0 ) )
-( ( 2778.0520019531 165.2005615234 146.9987792969 0.0078119999 0.1406259984 ) ( 2777.5024414062 165.5139160156 155.9765014648 0.0078119999 0.0703129992 ) ( 2776.953125 165.8275146484 164.9542236328 0.0078119999 0 ) )
-( ( 2779.0256347656 164.9820556641 147.0660400391 0.015625 0.1406259984 ) ( 2778.4760742188 165.2956542969 156.0437316895 0.015625 0.0703129992 ) ( 2777.9267578125 165.609375 165.0215454102 0.015625 0 ) )
-)
-}
-}
-// brush 3
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 2808.0322265625 213.4038085938 147.1504211426 0 0.0156239998 ) ( 2807.4025878906 214.1774902344 147.0848083496 0 0.0078140004 ) ( 2806.7729492188 214.9517822266 147.0191955566 0 0 ) )
-( ( 2785.76171875 195.3649902344 146.4172668457 0.2239760011 0.0156239998 ) ( 2784.9135742188 195.8894042969 146.3471679688 0.2239760011 0.0078140004 ) ( 2784.0654296875 196.4144287109 146.2768554688 0.2239760011 0 ) )
-( ( 2779.0256347656 164.9820556641 147.0660400391 0.4671599865 0.0156239998 ) ( 2778.0520019531 165.2005615234 146.9987792969 0.4671599865 0.0078140004 ) ( 2777.0783691406 165.4182128906 146.9315795898 0.4671599865 0 ) )
-)
-}
-}
-// brush 4
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 2805.673828125 215.5786132812 164.9746398926 0 0.015625 ) ( 2806.3037109375 214.8048095703 165.0401306152 0 0.0078140004 ) ( 2806.93359375 214.0305175781 165.1057739258 0 0 ) )
-( ( 2782.9663085938 197.0412597656 164.2322998047 0.2290830016 0.015625 ) ( 2783.8146972656 196.5166015625 164.3024902344 0.2290830016 0.0078140004 ) ( 2784.6630859375 195.9916992188 164.3728637695 0.2290830016 0 ) )
-( ( 2775.9794921875 166.0452880859 164.8871765137 0.4773679972 0.015625 ) ( 2776.953125 165.8275146484 164.9542236328 0.4773679972 0.0078140004 ) ( 2777.9267578125 165.609375 165.0215454102 0.4773679972 0 ) )
-)
-}
-}
-// brush 5
-{
-patchDef2
-{
-evil_lights/s_bluelight
-( 3 3 0 0 0 )
-(
-( ( 2806.7729492188 214.9517822266 147.0191955566 0 1 ) ( 2806.2233886719 215.2648925781 155.9968261719 0 0.5 ) ( 2805.673828125 215.5786132812 164.9746398926 0 0 ) )
-( ( 2784.0654296875 196.4144287109 146.2768554688 0.5 1 ) ( 2783.5158691406 196.7277832031 155.2545471191 0.5 0.5 ) ( 2782.9663085938 197.0412597656 164.2322998047 0.5 0 ) )
-( ( 2777.0783691406 165.4182128906 146.9315795898 1 1 ) ( 2776.5288085938 165.7320556641 155.9093322754 1 0.5 ) ( 2775.9794921875 166.0452880859 164.8871765137 1 0 ) )
-)
-}
-}
-}
-// entity 97
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 2805.9694824219 -14.8165283203 165.1057739258 0 0.1406240016 ) ( 2806.283203125 -14.2670898438 156.1280822754 0 0.0703120008 ) ( 2806.5961914062 -13.7176513672 147.1504211426 0 0 ) )
-( ( 2824.0083007812 -37.0870361328 164.3728637695 0.2239760011 0.1406240016 ) ( 2824.3215332031 -36.5375976562 155.3950805664 0.2239760011 0.0703120008 ) ( 2824.6350097656 -35.9881591797 146.4172668457 0.2239760011 0 ) )
-( ( 2854.390625 -43.8232421875 165.0215454102 0.4671550095 0.1406240016 ) ( 2854.7043457031 -43.2738037109 156.0437316895 0.4671550095 0.0703120008 ) ( 2855.0180664062 -42.7243652344 147.0660400391 0.4671550095 0 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 2804.4213867188 -16.0760498047 164.9746398926 0 0.140625 ) ( 2804.7351074219 -15.5266113281 155.9968261719 0 0.0703120008 ) ( 2805.0483398438 -14.9771728516 147.0191955566 0 0 ) )
-( ( 2805.1953125 -15.4462890625 165.0401306152 0.0078110001 0.140625 ) ( 2805.5090332031 -14.8968505859 156.0625610352 0.0078110001 0.0703120008 ) ( 2805.8225097656 -14.3474121094 147.0848083496 0.0078110001 0 ) )
-( ( 2805.9694824219 -14.8165283203 165.1057739258 0.015625 0.140625 ) ( 2806.283203125 -14.2670898438 156.1280822754 0.015625 0.0703120008 ) ( 2806.5961914062 -13.7176513672 147.1504211426 0.015625 0 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 2854.5817871094 -44.6716308594 146.9315795898 0 0.1406259984 ) ( 2854.2680664062 -45.2210693359 155.9093322754 0 0.0703129992 ) ( 2853.9545898438 -45.7705078125 164.8871765137 0 0 ) )
-( ( 2854.7993164062 -43.6979980469 146.9987792969 0.0078119999 0.1406259984 ) ( 2854.4860839844 -44.2474365234 155.9765014648 0.0078119999 0.0703129992 ) ( 2854.1723632812 -44.796875 164.9542236328 0.0078119999 0 ) )
-( ( 2855.0180664062 -42.7243652344 147.0660400391 0.015625 0.1406259984 ) ( 2854.7043457031 -43.2738037109 156.0437316895 0.015625 0.0703129992 ) ( 2854.390625 -43.8232421875 165.0215454102 0.015625 0 ) )
-)
-}
-}
-// brush 3
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 2806.5961914062 -13.7176513672 147.1504211426 0 0.0156239998 ) ( 2805.8225097656 -14.3474121094 147.0848083496 0 0.0078140004 ) ( 2805.0483398438 -14.9771728516 147.0191955566 0 0 ) )
-( ( 2824.6350097656 -35.9881591797 146.4172668457 0.2239760011 0.0156239998 ) ( 2824.1105957031 -36.8364257812 146.3471679688 0.2239760011 0.0078140004 ) ( 2823.5854492188 -37.6846923828 146.2768554688 0.2239760011 0 ) )
-( ( 2855.0180664062 -42.7243652344 147.0660400391 0.4671599865 0.0156239998 ) ( 2854.7993164062 -43.6979980469 146.9987792969 0.4671599865 0.0078140004 ) ( 2854.5817871094 -44.6716308594 146.9315795898 0.4671599865 0 ) )
-)
-}
-}
-// brush 4
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 2804.4213867188 -16.0760498047 164.9746398926 0 0.015625 ) ( 2805.1953125 -15.4462890625 165.0401306152 0 0.0078140004 ) ( 2805.9694824219 -14.8165283203 165.1057739258 0 0 ) )
-( ( 2822.9587402344 -38.7835693359 164.2322998047 0.2290830016 0.015625 ) ( 2823.4833984375 -37.9353027344 164.3024902344 0.2290830016 0.0078140004 ) ( 2824.0083007812 -37.0870361328 164.3728637695 0.2290830016 0 ) )
-( ( 2853.9545898438 -45.7705078125 164.8871765137 0.4773679972 0.015625 ) ( 2854.1723632812 -44.796875 164.9542236328 0.4773679972 0.0078140004 ) ( 2854.390625 -43.8232421875 165.0215454102 0.4773679972 0 ) )
-)
-}
-}
-// brush 5
-{
-patchDef2
-{
-evil_lights/s_bluelight
-( 3 3 0 0 0 )
-(
-( ( 2805.0483398438 -14.9771728516 147.0191955566 0 1 ) ( 2804.7351074219 -15.5266113281 155.9968261719 0 0.5 ) ( 2804.4213867188 -16.0760498047 164.9746398926 0 0 ) )
-( ( 2823.5854492188 -37.6846923828 146.2768554688 0.5 1 ) ( 2823.2722167969 -38.2341308594 155.2545471191 0.5 0.5 ) ( 2822.9587402344 -38.7835693359 164.2322998047 0.5 0 ) )
-( ( 2854.5817871094 -44.6716308594 146.9315795898 1 1 ) ( 2854.2680664062 -45.2210693359 155.9093322754 1 0.5 ) ( 2853.9545898438 -45.7705078125 164.8871765137 1 0 ) )
-)
-}
-}
-}
-// entity 98
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-evil8_lights/e8minitrimlight
-( 9 3 0 0 0 )
-(
-( ( 2920.75 -71 209 0 0.125 ) ( 2920.75 -70.5 209 0 0.0625 ) ( 2920.75 -70 209 0 0 ) )
-( ( 3096.5 -71 209 1.3730469942 0.125 ) ( 3096.146484375 -70.646484375 209 1.3730469942 0.0625 ) ( 3095.79296875 -70.2928466797 209 1.3730469942 0 ) )
-( ( 3096.5 100.75 209 2.7148439884 0.125 ) ( 3096 100.75 209 2.7148439884 0.0625 ) ( 3095.5 100.75 209 2.7148439884 0 ) )
-( ( 3096.5 272.5 209 4.0566411018 0.125 ) ( 3096.146484375 272.146484375 209 4.0566411018 0.0625 ) ( 3095.79296875 271.7928466797 209 4.0566411018 0 ) )
-( ( 2920.75 272.5 209 5.4296879768 0.125 ) ( 2920.75 272 209 5.4296879768 0.0625 ) ( 2920.75 271.5 209 5.4296879768 0 ) )
-( ( 2745 272.5 209 6.8027338982 0.125 ) ( 2745.353515625 272.146484375 209 6.8027338982 0.0625 ) ( 2745.70703125 271.7928466797 209 6.8027338982 0 ) )
-( ( 2745 100.75 209 8.14453125 0.125 ) ( 2745.5 100.75 209 8.14453125 0.0625 ) ( 2746 100.75 209 8.14453125 0 ) )
-( ( 2745 -71 209 9.486328125 0.125 ) ( 2745.353515625 -70.646484375 209 9.486328125 0.0625 ) ( 2745.70703125 -70.2928466797 209 9.486328125 0 ) )
-( ( 2920.75 -71 209 10.859375 0.125 ) ( 2920.75 -70.5 209 10.859375 0.0625 ) ( 2920.75 -70 209 10.859375 0 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-evil8_lights/e8minitrimlight
-( 9 3 0 0 0 )
-(
-( ( 2920.75 -70 196 0 0 ) ( 2920.75 -70.5 196 0 0.0625 ) ( 2920.75 -71 196 0 0.125 ) )
-( ( 3095.79296875 -70.2928466797 196 1.3730469942 0 ) ( 3096.146484375 -70.646484375 196 1.3730469942 0.0625 ) ( 3096.5 -71 196 1.3730469942 0.125 ) )
-( ( 3095.5 100.75 196 2.7148439884 0 ) ( 3096 100.75 196 2.7148439884 0.0625 ) ( 3096.5 100.75 196 2.7148439884 0.125 ) )
-( ( 3095.79296875 271.7928466797 196 4.0566411018 0 ) ( 3096.146484375 272.146484375 196 4.0566411018 0.0625 ) ( 3096.5 272.5 196 4.0566411018 0.125 ) )
-( ( 2920.75 271.5 196 5.4296879768 0 ) ( 2920.75 272 196 5.4296879768 0.0625 ) ( 2920.75 272.5 196 5.4296879768 0.125 ) )
-( ( 2745.70703125 271.7928466797 196 6.8027338982 0 ) ( 2745.353515625 272.146484375 196 6.8027338982 0.0625 ) ( 2745 272.5 196 6.8027338982 0.125 ) )
-( ( 2746 100.75 196 8.14453125 0 ) ( 2745.5 100.75 196 8.14453125 0.0625 ) ( 2745 100.75 196 8.14453125 0.125 ) )
-( ( 2745.70703125 -70.2928466797 196 9.486328125 0 ) ( 2745.353515625 -70.646484375 196 9.486328125 0.0625 ) ( 2745 -71 196 9.486328125 0.125 ) )
-( ( 2920.75 -70 196 10.859375 0 ) ( 2920.75 -70.5 196 10.859375 0.0625 ) ( 2920.75 -71 196 10.859375 0.125 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-evil8_lights/e8minitrimlight
-( 9 3 0 0 0 )
-(
-( ( 2920.75 -70 209 0.0039059999 -0.25 ) ( 2920.75 -70 202.5 0.0039059999 0.5625 ) ( 2920.75 -70 196 0.0039059999 1.375 ) )
-( ( 3095.79296875 -70.2928466797 209 1.3769530058 -0.25 ) ( 3095.79296875 -70.2928466797 202.5 1.3769530058 0.5625 ) ( 3095.79296875 -70.2928466797 196 1.3769530058 1.375 ) )
-( ( 3095.5 100.75 209 2.71875 -0.25 ) ( 3095.5 100.75 202.5 2.71875 0.5625 ) ( 3095.5 100.75 196 2.71875 1.375 ) )
-( ( 3095.79296875 271.7928466797 209 4.060546875 -0.25 ) ( 3095.79296875 271.7928466797 202.5 4.060546875 0.5625 ) ( 3095.79296875 271.7928466797 196 4.060546875 1.375 ) )
-( ( 2920.75 271.5 209 5.4335942268 -0.25 ) ( 2920.75 271.5 202.5 5.4335942268 0.5625 ) ( 2920.75 271.5 196 5.4335942268 1.375 ) )
-( ( 2745.70703125 271.7928466797 209 6.8066411018 -0.25 ) ( 2745.70703125 271.7928466797 202.5 6.8066411018 0.5625 ) ( 2745.70703125 271.7928466797 196 6.8066411018 1.375 ) )
-( ( 2746 100.75 209 8.1484384537 -0.25 ) ( 2746 100.75 202.5 8.1484384537 0.5625 ) ( 2746 100.75 196 8.1484384537 1.375 ) )
-( ( 2745.70703125 -70.2928466797 209 9.490234375 -0.25 ) ( 2745.70703125 -70.2928466797 202.5 9.490234375 0.5625 ) ( 2745.70703125 -70.2928466797 196 9.490234375 1.375 ) )
-( ( 2920.75 -70 209 10.86328125 -0.25 ) ( 2920.75 -70 202.5 10.86328125 0.5625 ) ( 2920.75 -70 196 10.86328125 1.375 ) )
-)
-}
-}
-// brush 3
-{
-patchDef2
-{
-evil8_lights/e8minitrimlight
-( 9 3 0 0 0 )
-(
-( ( 2920.75 -71 196 0.0039059999 1.375 ) ( 2920.75 -71 202.5 0.0039059999 0.5625 ) ( 2920.75 -71 209 0.0039059999 -0.25 ) )
-( ( 3096.5 -71 196 1.3769530058 1.375 ) ( 3096.5 -71 202.5 1.3769530058 0.5625 ) ( 3096.5 -71 209 1.3769530058 -0.25 ) )
-( ( 3096.5 100.75 196 2.71875 1.375 ) ( 3096.5 100.75 202.5 2.71875 0.5625 ) ( 3096.5 100.75 209 2.71875 -0.25 ) )
-( ( 3096.5 272.5 196 4.060546875 1.375 ) ( 3096.5 272.5 202.5 4.060546875 0.5625 ) ( 3096.5 272.5 209 4.060546875 -0.25 ) )
-( ( 2920.75 272.5 196 5.4335942268 1.375 ) ( 2920.75 272.5 202.5 5.4335942268 0.5625 ) ( 2920.75 272.5 209 5.4335942268 -0.25 ) )
-( ( 2745 272.5 196 6.8066411018 1.375 ) ( 2745 272.5 202.5 6.8066411018 0.5625 ) ( 2745 272.5 209 6.8066411018 -0.25 ) )
-( ( 2745 100.75 196 8.1484384537 1.375 ) ( 2745 100.75 202.5 8.1484384537 0.5625 ) ( 2745 100.75 209 8.1484384537 -0.25 ) )
-( ( 2745 -71 196 9.490234375 1.375 ) ( 2745 -71 202.5 9.490234375 0.5625 ) ( 2745 -71 209 9.490234375 -0.25 ) )
-( ( 2920.75 -71 196 10.86328125 1.375 ) ( 2920.75 -71 202.5 10.86328125 0.5625 ) ( 2920.75 -71 209 10.86328125 -0.25 ) )
-)
-}
-}
-}
-// entity 99
-{
-"classname" "light"
-"_color" "0.668241 0.881508 1.000000"
-"light" "50"
-"origin" "2771 205 153"
-}
-// entity 100
-{
-"classname" "light"
-"_color" "0.668241 0.881508 1.000000"
-"light" "50"
-"origin" "2819 -50 153"
-}
-// entity 101
-{
-"classname" "light"
-"_color" "0.668241 0.881508 1.000000"
-"light" "50"
-"origin" "3020 244 153"
-}
-// entity 102
-{
-"classname" "light"
-"_color" "1.000000 0.930311 0.704394"
-"light" "100"
-"origin" "2881 277 202"
-}
-// entity 103
-{
-"classname" "light"
-"_color" "1.000000 0.930311 0.704394"
-"light" "100"
-"origin" "2737 75 202"
-}
-// entity 104
-{
-"classname" "light"
-"_color" "1.000000 0.930311 0.704394"
-"light" "100"
-"origin" "2931 -78 202"
-}
-// entity 105
-{
-"classname" "light"
-"_color" "1.000000 0.930311 0.704394"
-"light" "100"
-"origin" "-192 275 202"
-}
-// entity 106
-{
-"classname" "light"
-"_color" "1.000000 0.930311 0.704394"
-"light" "100"
-"origin" "2 121 202"
-}
-// entity 107
-{
-"classname" "light"
-"_color" "1.000000 0.930311 0.704394"
-"light" "100"
-"origin" "-142 -81 202"
-}
-// entity 108
-{
-"classname" "light"
-"_color" "0.668241 0.881508 1.000000"
-"light" "50"
-"origin" "-281 -48 153"
-}
-// entity 109
-{
-"classname" "light"
-"_color" "0.668241 0.881508 1.000000"
-"light" "50"
-"origin" "-80 247 153"
-}
-// entity 110
-{
-"classname" "light"
-"_color" "0.668241 0.881508 1.000000"
-"light" "50"
-"origin" "-32 -9 153"
-}
-// entity 111
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-evil8_lights/e8minitrimlight
-( 9 3 0 0 0 )
-(
-( ( -181.5 267.5 209 0 0.125 ) ( -181.5 267 209 0 0.0625 ) ( -181.5 266.5 209 0 0 ) )
-( ( -357.25 267.5 209 1.3730469942 0.125 ) ( -356.896484375 267.146484375 209 1.3730469942 0.0625 ) ( -356.54296875 266.7928466797 209 1.3730469942 0 ) )
-( ( -357.25 95.75 209 2.7148439884 0.125 ) ( -356.75 95.75 209 2.7148439884 0.0625 ) ( -356.25 95.75 209 2.7148439884 0 ) )
-( ( -357.25 -76 209 4.0566411018 0.125 ) ( -356.896484375 -75.646484375 209 4.0566411018 0.0625 ) ( -356.54296875 -75.2928466797 209 4.0566411018 0 ) )
-( ( -181.5 -76 209 5.4296879768 0.125 ) ( -181.5 -75.5 209 5.4296879768 0.0625 ) ( -181.5 -75 209 5.4296879768 0 ) )
-( ( -5.75 -76 209 6.8027338982 0.125 ) ( -6.1035161018 -75.646484375 209 6.8027338982 0.0625 ) ( -6.4570918083 -75.2928466797 209 6.8027338982 0 ) )
-( ( -5.75 95.75 209 8.14453125 0.125 ) ( -6.25 95.75 209 8.14453125 0.0625 ) ( -6.75 95.75 209 8.14453125 0 ) )
-( ( -5.75 267.5 209 9.486328125 0.125 ) ( -6.1035161018 267.146484375 209 9.486328125 0.0625 ) ( -6.4570918083 266.7928466797 209 9.486328125 0 ) )
-( ( -181.5 267.5 209 10.859375 0.125 ) ( -181.5 267 209 10.859375 0.0625 ) ( -181.5 266.5 209 10.859375 0 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-evil8_lights/e8minitrimlight
-( 9 3 0 0 0 )
-(
-( ( -181.5 266.5 196 0 0 ) ( -181.5 267 196 0 0.0625 ) ( -181.5 267.5 196 0 0.125 ) )
-( ( -356.54296875 266.7928466797 196 1.3730469942 0 ) ( -356.896484375 267.146484375 196 1.3730469942 0.0625 ) ( -357.25 267.5 196 1.3730469942 0.125 ) )
-( ( -356.25 95.75 196 2.7148439884 0 ) ( -356.75 95.75 196 2.7148439884 0.0625 ) ( -357.25 95.75 196 2.7148439884 0.125 ) )
-( ( -356.54296875 -75.2928466797 196 4.0566411018 0 ) ( -356.896484375 -75.646484375 196 4.0566411018 0.0625 ) ( -357.25 -76 196 4.0566411018 0.125 ) )
-( ( -181.5 -75 196 5.4296879768 0 ) ( -181.5 -75.5 196 5.4296879768 0.0625 ) ( -181.5 -76 196 5.4296879768 0.125 ) )
-( ( -6.4570918083 -75.2928466797 196 6.8027338982 0 ) ( -6.1035161018 -75.646484375 196 6.8027338982 0.0625 ) ( -5.75 -76 196 6.8027338982 0.125 ) )
-( ( -6.75 95.75 196 8.14453125 0 ) ( -6.25 95.75 196 8.14453125 0.0625 ) ( -5.75 95.75 196 8.14453125 0.125 ) )
-( ( -6.4570918083 266.7928466797 196 9.486328125 0 ) ( -6.1035161018 267.146484375 196 9.486328125 0.0625 ) ( -5.75 267.5 196 9.486328125 0.125 ) )
-( ( -181.5 266.5 196 10.859375 0 ) ( -181.5 267 196 10.859375 0.0625 ) ( -181.5 267.5 196 10.859375 0.125 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-evil8_lights/e8minitrimlight
-( 9 3 0 0 0 )
-(
-( ( -181.5 266.5 209 0.0039059999 -0.25 ) ( -181.5 266.5 202.5 0.0039059999 0.5625 ) ( -181.5 266.5 196 0.0039059999 1.375 ) )
-( ( -356.54296875 266.7928466797 209 1.3769530058 -0.25 ) ( -356.54296875 266.7928466797 202.5 1.3769530058 0.5625 ) ( -356.54296875 266.7928466797 196 1.3769530058 1.375 ) )
-( ( -356.25 95.75 209 2.71875 -0.25 ) ( -356.25 95.75 202.5 2.71875 0.5625 ) ( -356.25 95.75 196 2.71875 1.375 ) )
-( ( -356.54296875 -75.2928466797 209 4.060546875 -0.25 ) ( -356.54296875 -75.2928466797 202.5 4.060546875 0.5625 ) ( -356.54296875 -75.2928466797 196 4.060546875 1.375 ) )
-( ( -181.5 -75 209 5.4335942268 -0.25 ) ( -181.5 -75 202.5 5.4335942268 0.5625 ) ( -181.5 -75 196 5.4335942268 1.375 ) )
-( ( -6.4570918083 -75.2928466797 209 6.8066411018 -0.25 ) ( -6.4570918083 -75.2928466797 202.5 6.8066411018 0.5625 ) ( -6.4570918083 -75.2928466797 196 6.8066411018 1.375 ) )
-( ( -6.75 95.75 209 8.1484384537 -0.25 ) ( -6.75 95.75 202.5 8.1484384537 0.5625 ) ( -6.75 95.75 196 8.1484384537 1.375 ) )
-( ( -6.4570918083 266.7928466797 209 9.490234375 -0.25 ) ( -6.4570918083 266.7928466797 202.5 9.490234375 0.5625 ) ( -6.4570918083 266.7928466797 196 9.490234375 1.375 ) )
-( ( -181.5 266.5 209 10.86328125 -0.25 ) ( -181.5 266.5 202.5 10.86328125 0.5625 ) ( -181.5 266.5 196 10.86328125 1.375 ) )
-)
-}
-}
-// brush 3
-{
-patchDef2
-{
-evil8_lights/e8minitrimlight
-( 9 3 0 0 0 )
-(
-( ( -181.5 267.5 196 0.0039059999 1.375 ) ( -181.5 267.5 202.5 0.0039059999 0.5625 ) ( -181.5 267.5 209 0.0039059999 -0.25 ) )
-( ( -357.25 267.5 196 1.3769530058 1.375 ) ( -357.25 267.5 202.5 1.3769530058 0.5625 ) ( -357.25 267.5 209 1.3769530058 -0.25 ) )
-( ( -357.25 95.75 196 2.71875 1.375 ) ( -357.25 95.75 202.5 2.71875 0.5625 ) ( -357.25 95.75 209 2.71875 -0.25 ) )
-( ( -357.25 -76 196 4.060546875 1.375 ) ( -357.25 -76 202.5 4.060546875 0.5625 ) ( -357.25 -76 209 4.060546875 -0.25 ) )
-( ( -181.5 -76 196 5.4335942268 1.375 ) ( -181.5 -76 202.5 5.4335942268 0.5625 ) ( -181.5 -76 209 5.4335942268 -0.25 ) )
-( ( -5.75 -76 196 6.8066411018 1.375 ) ( -5.75 -76 202.5 6.8066411018 0.5625 ) ( -5.75 -76 209 6.8066411018 -0.25 ) )
-( ( -5.75 95.75 196 8.1484384537 1.375 ) ( -5.75 95.75 202.5 8.1484384537 0.5625 ) ( -5.75 95.75 209 8.1484384537 -0.25 ) )
-( ( -5.75 267.5 196 9.490234375 1.375 ) ( -5.75 267.5 202.5 9.490234375 0.5625 ) ( -5.75 267.5 209 9.490234375 -0.25 ) )
-( ( -181.5 267.5 196 10.86328125 1.375 ) ( -181.5 267.5 202.5 10.86328125 0.5625 ) ( -181.5 267.5 209 10.86328125 -0.25 ) )
-)
-}
-}
-}
-// entity 112
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( -66.7194824219 211.3165283203 165.1057739258 0 0.1406240016 ) ( -67.0330810547 210.7670898438 156.1280822754 0 0.0703120008 ) ( -67.3461914062 210.2176513672 147.1504211426 0 0 ) )
-( ( -84.7583007812 233.5870361328 164.3728637695 0.2239760011 0.1406240016 ) ( -85.0715332031 233.0375976562 155.3950805664 0.2239760011 0.0703120008 ) ( -85.3850097656 232.4881591797 146.4172668457 0.2239760011 0 ) )
-( ( -115.140625 240.3232421875 165.0215454102 0.4671550095 0.1406240016 ) ( -115.4543457031 239.7738037109 156.0437316895 0.4671550095 0.0703120008 ) ( -115.7679443359 239.2243652344 147.0660400391 0.4671550095 0 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( -65.1713867188 212.5760498047 164.9746398926 0 0.140625 ) ( -65.4851074219 212.0266113281 155.9968261719 0 0.0703120008 ) ( -65.7982177734 211.4771728516 147.0191955566 0 0 ) )
-( ( -65.9451904297 211.9462890625 165.0401306152 0.0078110001 0.140625 ) ( -66.2590332031 211.3968505859 156.0625610352 0.0078110001 0.0703120008 ) ( -66.5725097656 210.8474121094 147.0848083496 0.0078110001 0 ) )
-( ( -66.7194824219 211.3165283203 165.1057739258 0.015625 0.140625 ) ( -67.0330810547 210.7670898438 156.1280822754 0.015625 0.0703120008 ) ( -67.3461914062 210.2176513672 147.1504211426 0.015625 0 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( -115.3317871094 241.1716308594 146.9315795898 0 0.1406259984 ) ( -115.0179443359 241.7210693359 155.9093322754 0 0.0703129992 ) ( -114.7047119141 242.2705078125 164.8871765137 0 0 ) )
-( ( -115.5494384766 240.1979980469 146.9987792969 0.0078119999 0.1406259984 ) ( -115.2360839844 240.7474365234 155.9765014648 0.0078119999 0.0703129992 ) ( -114.9224853516 241.296875 164.9542236328 0.0078119999 0 ) )
-( ( -115.7679443359 239.2243652344 147.0660400391 0.015625 0.1406259984 ) ( -115.4543457031 239.7738037109 156.0437316895 0.015625 0.0703129992 ) ( -115.140625 240.3232421875 165.0215454102 0.015625 0 ) )
-)
-}
-}
-// brush 3
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( -67.3461914062 210.2176513672 147.1504211426 0 0.0156239998 ) ( -66.5725097656 210.8474121094 147.0848083496 0 0.0078140004 ) ( -65.7982177734 211.4771728516 147.0191955566 0 0 ) )
-( ( -85.3850097656 232.4881591797 146.4172668457 0.2239760011 0.0156239998 ) ( -84.8605957031 233.3364257812 146.3471679688 0.2239760011 0.0078140004 ) ( -84.3355712891 234.1846923828 146.2768554688 0.2239760011 0 ) )
-( ( -115.7679443359 239.2243652344 147.0660400391 0.4671599865 0.0156239998 ) ( -115.5494384766 240.1979980469 146.9987792969 0.4671599865 0.0078140004 ) ( -115.3317871094 241.1716308594 146.9315795898 0.4671599865 0 ) )
-)
-}
-}
-// brush 4
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( -65.1713867188 212.5760498047 164.9746398926 0 0.015625 ) ( -65.9451904297 211.9462890625 165.0401306152 0 0.0078140004 ) ( -66.7194824219 211.3165283203 165.1057739258 0 0 ) )
-( ( -83.7087402344 235.2835693359 164.2322998047 0.2290830016 0.015625 ) ( -84.2333984375 234.4353027344 164.3024902344 0.2290830016 0.0078140004 ) ( -84.7583007812 233.5870361328 164.3728637695 0.2290830016 0 ) )
-( ( -114.7047119141 242.2705078125 164.8871765137 0.4773679972 0.015625 ) ( -114.9224853516 241.296875 164.9542236328 0.4773679972 0.0078140004 ) ( -115.140625 240.3232421875 165.0215454102 0.4773679972 0 ) )
-)
-}
-}
-// brush 5
-{
-patchDef2
-{
-evil_lights/s_bluelight
-( 3 3 0 0 0 )
-(
-( ( -65.7982177734 211.4771728516 147.0191955566 0 1 ) ( -65.4851074219 212.0266113281 155.9968261719 0 0.5 ) ( -65.1713867188 212.5760498047 164.9746398926 0 0 ) )
-( ( -84.3355712891 234.1846923828 146.2768554688 0.5 1 ) ( -84.0222167969 234.7341308594 155.2545471191 0.5 0.5 ) ( -83.7087402344 235.2835693359 164.2322998047 0.5 0 ) )
-( ( -115.3317871094 241.1716308594 146.9315795898 1 1 ) ( -115.0179443359 241.7210693359 155.9093322754 1 0.5 ) ( -114.7047119141 242.2705078125 164.8871765137 1 0 ) )
-)
-}
-}
-}
-// entity 113
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( -67.6834716797 -17.5305175781 165.1057739258 0 0.1406240016 ) ( -68.2329101562 -17.2169189453 156.1280822754 0 0.0703120008 ) ( -68.7823486328 -16.9038085938 147.1504211426 0 0 ) )
-( ( -45.4129638672 0.5083010197 164.3728637695 0.2239760011 0.1406240016 ) ( -45.9624023438 0.8215330243 155.3950805664 0.2239760011 0.0703120008 ) ( -46.5118408203 1.135010004 146.4172668457 0.2239760011 0 ) )
-( ( -38.6767578125 30.890625 165.0215454102 0.4671550095 0.1406240016 ) ( -39.2261962891 31.2043457031 156.0437316895 0.4671550095 0.0703120008 ) ( -39.7756347656 31.5179443359 147.0660400391 0.4671550095 0 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( -66.4239501953 -19.0786132812 164.9746398926 0 0.140625 ) ( -66.9733886719 -18.7648925781 155.9968261719 0 0.0703120008 ) ( -67.5228271484 -18.4517822266 147.0191955566 0 0 ) )
-( ( -67.0537109375 -18.3048095703 165.0401306152 0.0078110001 0.140625 ) ( -67.6031494141 -17.9909667969 156.0625610352 0.0078110001 0.0703120008 ) ( -68.1525878906 -17.6774902344 147.0848083496 0.0078110001 0 ) )
-( ( -67.6834716797 -17.5305175781 165.1057739258 0.015625 0.140625 ) ( -68.2329101562 -17.2169189453 156.1280822754 0.015625 0.0703120008 ) ( -68.7823486328 -16.9038085938 147.1504211426 0.015625 0 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( -37.8283691406 31.0817871094 146.9315795898 0 0.1406259984 ) ( -37.2789306641 30.7679443359 155.9093322754 0 0.0703129992 ) ( -36.7294921875 30.4547119141 164.8871765137 0 0 ) )
-( ( -38.8020019531 31.2994384766 146.9987792969 0.0078119999 0.1406259984 ) ( -38.2525634766 30.9860839844 155.9765014648 0.0078119999 0.0703129992 ) ( -37.703125 30.6724853516 164.9542236328 0.0078119999 0 ) )
-( ( -39.7756347656 31.5179443359 147.0660400391 0.015625 0.1406259984 ) ( -39.2261962891 31.2043457031 156.0437316895 0.015625 0.0703129992 ) ( -38.6767578125 30.890625 165.0215454102 0.015625 0 ) )
-)
-}
-}
-// brush 3
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( -68.7823486328 -16.9038085938 147.1504211426 0 0.0156239998 ) ( -68.1525878906 -17.6774902344 147.0848083496 0 0.0078140004 ) ( -67.5228271484 -18.4517822266 147.0191955566 0 0 ) )
-( ( -46.5118408203 1.135010004 146.4172668457 0.2239760011 0.0156239998 ) ( -45.6635742188 0.6105960011 146.3471679688 0.2239760011 0.0078140004 ) ( -44.8153076172 0.0855709985 146.2768554688 0.2239760011 0 ) )
-( ( -39.7756347656 31.5179443359 147.0660400391 0.4671599865 0.0156239998 ) ( -38.8020019531 31.2994384766 146.9987792969 0.4671599865 0.0078140004 ) ( -37.8283691406 31.0817871094 146.9315795898 0.4671599865 0 ) )
-)
-}
-}
-// brush 4
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( -66.4239501953 -19.0786132812 164.9746398926 0 0.015625 ) ( -67.0537109375 -18.3048095703 165.0401306152 0 0.0078140004 ) ( -67.6834716797 -17.5305175781 165.1057739258 0 0 ) )
-( ( -43.7164306641 -0.541260004 164.2322998047 0.2290830016 0.015625 ) ( -44.5646972656 -0.0166020002 164.3024902344 0.2290830016 0.0078140004 ) ( -45.4129638672 0.5083010197 164.3728637695 0.2290830016 0 ) )
-( ( -36.7294921875 30.4547119141 164.8871765137 0.4773679972 0.015625 ) ( -37.703125 30.6724853516 164.9542236328 0.4773679972 0.0078140004 ) ( -38.6767578125 30.890625 165.0215454102 0.4773679972 0 ) )
-)
-}
-}
-// brush 5
-{
-patchDef2
-{
-evil_lights/s_bluelight
-( 3 3 0 0 0 )
-(
-( ( -67.5228271484 -18.4517822266 147.0191955566 0 1 ) ( -66.9733886719 -18.7648925781 155.9968261719 0 0.5 ) ( -66.4239501953 -19.0786132812 164.9746398926 0 0 ) )
-( ( -44.8153076172 0.0855709985 146.2768554688 0.5 1 ) ( -44.2658691406 -0.2277829945 155.2545471191 0.5 0.5 ) ( -43.7164306641 -0.541260004 164.2322998047 0.5 0 ) )
-( ( -37.8283691406 31.0817871094 146.9315795898 1 1 ) ( -37.2789306641 30.7679443359 155.9093322754 1 0.5 ) ( -36.7294921875 30.4547119141 164.8871765137 1 0 ) )
-)
-}
-}
-}
-// entity 114
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( -290.7805175781 -17.0665283203 165.1057739258 0 0.1406240016 ) ( -290.4669189453 -16.5170898438 156.1280822754 0 0.0703120008 ) ( -290.1538085938 -15.9676513672 147.1504211426 0 0 ) )
-( ( -272.7416992188 -39.3370361328 164.3728637695 0.2239760011 0.1406240016 ) ( -272.4284667969 -38.7875976562 155.3950805664 0.2239760011 0.0703120008 ) ( -272.1149902344 -38.2381591797 146.4172668457 0.2239760011 0 ) )
-( ( -242.359375 -46.0732421875 165.0215454102 0.4671550095 0.1406240016 ) ( -242.0456542969 -45.5238037109 156.0437316895 0.4671550095 0.0703120008 ) ( -241.7320556641 -44.9743652344 147.0660400391 0.4671550095 0 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( -292.3286132812 -18.3260498047 164.9746398926 0 0.140625 ) ( -292.0148925781 -17.7766113281 155.9968261719 0 0.0703120008 ) ( -291.7017822266 -17.2271728516 147.0191955566 0 0 ) )
-( ( -291.5548095703 -17.6962890625 165.0401306152 0.0078110001 0.140625 ) ( -291.2409667969 -17.1468505859 156.0625610352 0.0078110001 0.0703120008 ) ( -290.9274902344 -16.5974121094 147.0848083496 0.0078110001 0 ) )
-( ( -290.7805175781 -17.0665283203 165.1057739258 0.015625 0.140625 ) ( -290.4669189453 -16.5170898438 156.1280822754 0.015625 0.0703120008 ) ( -290.1538085938 -15.9676513672 147.1504211426 0.015625 0 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( -242.1682128906 -46.9216308594 146.9315795898 0 0.1406259984 ) ( -242.4820556641 -47.4710693359 155.9093322754 0 0.0703129992 ) ( -242.7952880859 -48.0205078125 164.8871765137 0 0 ) )
-( ( -241.9505615234 -45.9479980469 146.9987792969 0.0078119999 0.1406259984 ) ( -242.2639160156 -46.4974365234 155.9765014648 0.0078119999 0.0703129992 ) ( -242.5775146484 -47.046875 164.9542236328 0.0078119999 0 ) )
-( ( -241.7320556641 -44.9743652344 147.0660400391 0.015625 0.1406259984 ) ( -242.0456542969 -45.5238037109 156.0437316895 0.015625 0.0703129992 ) ( -242.359375 -46.0732421875 165.0215454102 0.015625 0 ) )
-)
-}
-}
-// brush 3
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( -290.1538085938 -15.9676513672 147.1504211426 0 0.0156239998 ) ( -290.9274902344 -16.5974121094 147.0848083496 0 0.0078140004 ) ( -291.7017822266 -17.2271728516 147.0191955566 0 0 ) )
-( ( -272.1149902344 -38.2381591797 146.4172668457 0.2239760011 0.0156239998 ) ( -272.6394042969 -39.0864257812 146.3471679688 0.2239760011 0.0078140004 ) ( -273.1644287109 -39.9346923828 146.2768554688 0.2239760011 0 ) )
-( ( -241.7320556641 -44.9743652344 147.0660400391 0.4671599865 0.0156239998 ) ( -241.9505615234 -45.9479980469 146.9987792969 0.4671599865 0.0078140004 ) ( -242.1682128906 -46.9216308594 146.9315795898 0.4671599865 0 ) )
-)
-}
-}
-// brush 4
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( -292.3286132812 -18.3260498047 164.9746398926 0 0.015625 ) ( -291.5548095703 -17.6962890625 165.0401306152 0 0.0078140004 ) ( -290.7805175781 -17.0665283203 165.1057739258 0 0 ) )
-( ( -273.7912597656 -41.0335693359 164.2322998047 0.2290830016 0.015625 ) ( -273.2666015625 -40.1853027344 164.3024902344 0.2290830016 0.0078140004 ) ( -272.7416992188 -39.3370361328 164.3728637695 0.2290830016 0 ) )
-( ( -242.7952880859 -48.0205078125 164.8871765137 0.4773679972 0.015625 ) ( -242.5775146484 -47.046875 164.9542236328 0.4773679972 0.0078140004 ) ( -242.359375 -46.0732421875 165.0215454102 0.4773679972 0 ) )
-)
-}
-}
-// brush 5
-{
-patchDef2
-{
-evil_lights/s_bluelight
-( 3 3 0 0 0 )
-(
-( ( -291.7017822266 -17.2271728516 147.0191955566 0 1 ) ( -292.0148925781 -17.7766113281 155.9968261719 0 0.5 ) ( -292.3286132812 -18.3260498047 164.9746398926 0 0 ) )
-( ( -273.1644287109 -39.9346923828 146.2768554688 0.5 1 ) ( -273.4777832031 -40.4841308594 155.2545471191 0.5 0.5 ) ( -273.7912597656 -41.0335693359 164.2322998047 0.5 0 ) )
-( ( -242.1682128906 -46.9216308594 146.9315795898 1 1 ) ( -242.4820556641 -47.4710693359 155.9093322754 1 0.5 ) ( -242.7952880859 -48.0205078125 164.8871765137 1 0 ) )
-)
-}
-}
-}
-// entity 115
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 9 3 0 0 0 )
-(
-( ( -177.75 271.75 190 0 0.0625 ) ( -177.75 269.6300048828 193.391998291 0 0.03125 ) ( -177.75 267.5100097656 196.783996582 0 0 ) )
-( ( -361.75 271.75 190 1.4375 0.0625 ) ( -360.6066894531 270.6066894531 193.6586303711 1.4375 0.03125 ) ( -359.4633789062 269.4633789062 197.3172607422 1.4375 0 ) )
-( ( -361.75 95.75 190 2.8125 0.0625 ) ( -359.6300048828 95.75 193.391998291 2.8125 0.03125 ) ( -357.5100097656 95.75 196.783996582 2.8125 0 ) )
-( ( -361.75 -80.25 190 4.1875 0.0625 ) ( -360.6066894531 -79.1066894531 193.6586303711 4.1875 0.03125 ) ( -359.4633789062 -77.9633789062 197.3172607422 4.1875 0 ) )
-( ( -177.75 -80.25 190 5.625 0.0625 ) ( -177.75 -78.1300048828 193.391998291 5.625 0.03125 ) ( -177.75 -76.0100097656 196.783996582 5.625 0 ) )
-( ( -1.75 -80.25 190 7 0.0625 ) ( -2.8933110237 -79.1066894531 193.6586303711 7 0.03125 ) ( -4.0366210938 -77.9633789062 197.3172607422 7 0 ) )
-( ( -1.75 95.75 190 8.375 0.0625 ) ( -3.8699951172 95.75 193.391998291 8.375 0.03125 ) ( -5.9899902344 95.75 196.783996582 8.375 0 ) )
-( ( -1.75 271.75 190 9.75 0.0625 ) ( -2.8933110237 270.6066894531 193.6586303711 9.75 0.03125 ) ( -4.0366210938 269.4633789062 197.3172607422 9.75 0 ) )
-( ( -177.75 271.75 190 11.125 0.0625 ) ( -177.75 269.6300048828 193.391998291 11.125 0.03125 ) ( -177.75 267.5100097656 196.783996582 11.125 0 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 9 3 0 0 0 )
-(
-( ( -177.75 241.0118408203 135.6875610352 0 0 ) ( -177.75 244.380859375 137.8437805176 0 0.03125 ) ( -177.75 247.75 140 0 0.0625 ) )
-( ( -324.7568359375 243.3343505859 135.576171875 1.1875 0 ) ( -327.2534179688 245.5422363281 137.7880859375 1.1875 0.03125 ) ( -329.75 247.75 140 1.1875 0.0625 ) )
-( ( -322.1306152344 95.75 137.5617980957 2.375 0 ) ( -325.9403076172 95.75 138.7808837891 2.375 0.03125 ) ( -329.75 95.75 140 2.375 0.0625 ) )
-( ( -324.7568359375 -51.8343505859 135.576171875 3.5625 0 ) ( -327.2534179688 -54.0422363281 137.7880859375 3.5625 0.03125 ) ( -329.75 -56.25 140 3.5625 0.0625 ) )
-( ( -177.75 -49.5118408203 135.6875610352 4.75 0 ) ( -177.75 -52.880859375 137.8437805176 4.75 0.03125 ) ( -177.75 -56.25 140 4.75 0.0625 ) )
-( ( -29.9440917969 -52.0559082031 134.6315917969 5.9375 0 ) ( -27.8470458984 -54.1529541016 137.3157958984 5.9375 0.03125 ) ( -25.75 -56.25 140 5.9375 0.0625 ) )
-( ( -32.4881591797 95.75 135.6875610352 7.125 0 ) ( -29.1190795898 95.75 137.8437805176 7.125 0.03125 ) ( -25.75 95.75 140 7.125 0.0625 ) )
-( ( -29.9440917969 243.5559082031 134.6315917969 8.3125 0 ) ( -27.8470458984 245.6529541016 137.3157958984 8.3125 0.03125 ) ( -25.75 247.75 140 8.3125 0.0625 ) )
-( ( -177.75 241.0118408203 135.6875610352 9.5 0 ) ( -177.75 244.380859375 137.8437805176 9.5 0.03125 ) ( -177.75 247.75 140 9.5 0.0625 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 9 3 0 0 0 )
-(
-( ( -177.75 267.5100097656 196.783996582 0 0 ) ( -177.75 223.9453125 166.7570800781 0 0.3685150146 ) ( -177.75 241.0118408203 135.6875610352 0 0.6004030108 ) )
-( ( -359.4633789062 269.4633789062 197.3172607422 1.1875 0 ) ( -316.3408203125 226.7427978516 168.1094360352 1.1875 0.3685150146 ) ( -324.7568359375 243.3343505859 135.576171875 1.1875 0.6004030108 ) )
-( ( -357.5100097656 95.75 196.783996582 2.375 0 ) ( -314.2385253906 95.75 167.7525634766 2.375 0.3685150146 ) ( -322.1306152344 95.75 137.5617980957 2.375 0.6004030108 ) )
-( ( -359.4633789062 -77.9633789062 197.3172607422 3.5625 0 ) ( -316.3408203125 -35.2427978516 168.1094360352 3.5625 0.3685150146 ) ( -324.7568359375 -51.8343505859 135.576171875 3.5625 0.6004030108 ) )
-( ( -177.75 -76.0100097656 196.783996582 4.75 0 ) ( -177.75 -32.4453125 166.7570800781 4.75 0.3685150146 ) ( -177.75 -49.5118408203 135.6875610352 4.75 0.6004030108 ) )
-( ( -4.0366210938 -77.9633789062 197.3172607422 5.9375 0 ) ( -47.1402587891 -34.8597412109 167.4270629883 5.9375 0.3685150146 ) ( -29.9440917969 -52.0559082031 134.6315917969 5.9375 0.6004030108 ) )
-( ( -5.9899902344 95.75 196.783996582 7.125 0 ) ( -49.5546264648 95.75 166.7570800781 7.125 0.3685150146 ) ( -32.4881591797 95.75 135.6875610352 7.125 0.6004030108 ) )
-( ( -4.0366210938 269.4633789062 197.3172607422 8.3125 0 ) ( -47.1402587891 226.3597412109 167.4270629883 8.3125 0.3685150146 ) ( -29.9440917969 243.5559082031 134.6315917969 8.3125 0.6004030108 ) )
-( ( -177.75 267.5100097656 196.783996582 9.5 0 ) ( -177.75 223.9453125 166.7570800781 9.5 0.3685150146 ) ( -177.75 241.0118408203 135.6875610352 9.5 0.6004030108 ) )
-)
-}
-}
-// brush 3
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 9 3 0 0 0 )
-(
-( ( -177.75 247.75 140 0 0.6004030108 ) ( -177.75 231.75 165 0 0.3685150146 ) ( -177.75 271.75 190 0 0 ) )
-( ( -329.75 247.75 140 1.1875 0.6004030108 ) ( -321.75 231.75 165 1.1875 0.3685150146 ) ( -361.75 271.75 190 1.1875 0 ) )
-( ( -329.75 95.75 140 2.375 0.6004030108 ) ( -321.75 95.75 165 2.375 0.3685150146 ) ( -361.75 95.75 190 2.375 0 ) )
-( ( -329.75 -56.25 140 3.5625 0.6004030108 ) ( -321.75 -40.25 165 3.5625 0.3685150146 ) ( -361.75 -80.25 190 3.5625 0 ) )
-( ( -177.75 -56.25 140 4.75 0.6004030108 ) ( -177.75 -40.25 165 4.75 0.3685150146 ) ( -177.75 -80.25 190 4.75 0 ) )
-( ( -25.75 -56.25 140 5.9375 0.6004030108 ) ( -41.75 -40.25 165 5.9375 0.3685150146 ) ( -1.75 -80.25 190 5.9375 0 ) )
-( ( -25.75 95.75 140 7.125 0.6004030108 ) ( -41.75 95.75 165 7.125 0.3685150146 ) ( -1.75 95.75 190 7.125 0 ) )
-( ( -25.75 247.75 140 8.3125 0.6004030108 ) ( -41.75 231.75 165 8.3125 0.3685150146 ) ( -1.75 271.75 190 8.3125 0 ) )
-( ( -177.75 247.75 140 9.5 0.6004030108 ) ( -177.75 231.75 165 9.5 0.3685150146 ) ( -177.75 271.75 190 9.5 0 ) )
-)
-}
-}
-}
-// entity 116
-{
-"classname" "func_group"
-"type" "patchCapped"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( -228.25 83.25 176 -1.2890629768 7.125 ) ( -195.25 83.25 176 -1.2890629768 6.8671879768 ) ( -195.25 50.25 176 -1.03125 6.8671879768 ) )
-( ( -195.25 83.25 176 -1.2890629768 6.8671879768 ) ( -195.25 83.25 176 -1.2890629768 6.8671879768 ) ( -195.25 83.25 176 -1.2890629768 6.8671879768 ) )
-( ( -195.25 83.25 176 -1.2890629768 6.8671879768 ) ( -195.25 83.25 176 -1.2890629768 6.8671879768 ) ( -195.25 83.25 176 -1.2890629768 6.8671879768 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( -195.25 50.25 184 -1.03125 6.8671879768 ) ( -195.25 83.25 184 -1.2890629768 6.8671879768 ) ( -228.25 83.25 184 -1.2890629768 7.125 ) )
-( ( -195.25 83.25 184 -1.2890629768 6.8671879768 ) ( -195.25 83.25 184 -1.2890629768 6.8671879768 ) ( -195.25 83.25 184 -1.2890629768 6.8671879768 ) )
-( ( -195.25 83.25 184 -1.2890629768 6.8671879768 ) ( -195.25 83.25 184 -1.2890629768 6.8671879768 ) ( -195.25 83.25 184 -1.2890629768 6.8671879768 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( -195.25 50.25 184 0 0.0625 ) ( -195.25 50.25 180 0 0.03125 ) ( -195.25 50.25 176 0 0 ) )
-( ( -195.25 83.25 184 0.2578130066 0.0625 ) ( -195.25 83.25 180 0.2578130066 0.03125 ) ( -195.25 83.25 176 0.2578130066 0 ) )
-( ( -228.25 83.25 184 0.515625 0.0625 ) ( -228.25 83.25 180 0.515625 0.03125 ) ( -228.25 83.25 176 0.515625 0 ) )
-)
-}
-}
-}
-// entity 117
-{
-"classname" "func_group"
-"type" "patchCapped"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( -195.25 146.25 176 -1.78125 6.8671879768 ) ( -195.25 113.25 176 -1.5234379768 6.8671879768 ) ( -228.25 113.25 176 -1.5234379768 7.125 ) )
-( ( -195.25 113.25 176 -1.5234379768 6.8671879768 ) ( -195.25 113.25 176 -1.5234379768 6.8671879768 ) ( -195.25 113.25 176 -1.5234379768 6.8671879768 ) )
-( ( -195.25 113.25 176 -1.5234379768 6.8671879768 ) ( -195.25 113.25 176 -1.5234379768 6.8671879768 ) ( -195.25 113.25 176 -1.5234379768 6.8671879768 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( -228.25 113.25 184 -1.5234379768 7.125 ) ( -195.25 113.25 184 -1.5234379768 6.8671879768 ) ( -195.25 146.25 184 -1.78125 6.8671879768 ) )
-( ( -195.25 113.25 184 -1.5234379768 6.8671879768 ) ( -195.25 113.25 184 -1.5234379768 6.8671879768 ) ( -195.25 113.25 184 -1.5234379768 6.8671879768 ) )
-( ( -195.25 113.25 184 -1.5234379768 6.8671879768 ) ( -195.25 113.25 184 -1.5234379768 6.8671879768 ) ( -195.25 113.25 184 -1.5234379768 6.8671879768 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( -228.25 113.25 184 0 0.0625 ) ( -228.25 113.25 180 0 0.03125 ) ( -228.25 113.25 176 0 0 ) )
-( ( -195.25 113.25 184 0.2578130066 0.0625 ) ( -195.25 113.25 180 0.2578130066 0.03125 ) ( -195.25 113.25 176 0.2578130066 0 ) )
-( ( -195.25 146.25 184 0.515625 0.0625 ) ( -195.25 146.25 180 0.515625 0.03125 ) ( -195.25 146.25 176 0.515625 0 ) )
-)
-}
-}
-}
-// entity 118
-{
-"classname" "func_group"
-"type" "patchCapped"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( -132.25 113.25 176 -1.5234379768 6.375 ) ( -165.25 113.25 176 -1.5234379768 6.6328129768 ) ( -165.25 146.25 176 -1.78125 6.6328129768 ) )
-( ( -165.25 113.25 176 -1.5234379768 6.6328129768 ) ( -165.25 113.25 176 -1.5234379768 6.6328129768 ) ( -165.25 113.25 176 -1.5234379768 6.6328129768 ) )
-( ( -165.25 113.25 176 -1.5234379768 6.6328129768 ) ( -165.25 113.25 176 -1.5234379768 6.6328129768 ) ( -165.25 113.25 176 -1.5234379768 6.6328129768 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( -165.25 146.25 184 -1.78125 6.6328129768 ) ( -165.25 113.25 184 -1.5234379768 6.6328129768 ) ( -132.25 113.25 184 -1.5234379768 6.375 ) )
-( ( -165.25 113.25 184 -1.5234379768 6.6328129768 ) ( -165.25 113.25 184 -1.5234379768 6.6328129768 ) ( -165.25 113.25 184 -1.5234379768 6.6328129768 ) )
-( ( -165.25 113.25 184 -1.5234379768 6.6328129768 ) ( -165.25 113.25 184 -1.5234379768 6.6328129768 ) ( -165.25 113.25 184 -1.5234379768 6.6328129768 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( -165.25 146.25 184 0 0.0625 ) ( -165.25 146.25 180 0 0.03125 ) ( -165.25 146.25 176 0 0 ) )
-( ( -165.25 113.25 184 0.2578130066 0.0625 ) ( -165.25 113.25 180 0.2578130066 0.03125 ) ( -165.25 113.25 176 0.2578130066 0 ) )
-( ( -132.25 113.25 184 0.515625 0.0625 ) ( -132.25 113.25 180 0.515625 0.03125 ) ( -132.25 113.25 176 0.515625 0 ) )
-)
-}
-}
-}
-// entity 119
-{
-"classname" "func_group"
-"type" "patchCapped"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( -165.25 50.25 176 -1.03125 6.6328129768 ) ( -165.25 83.25 176 -1.2890629768 6.6328129768 ) ( -132.25 83.25 176 -1.2890629768 6.375 ) )
-( ( -165.25 83.25 176 -1.2890629768 6.6328129768 ) ( -165.25 83.25 176 -1.2890629768 6.6328129768 ) ( -165.25 83.25 176 -1.2890629768 6.6328129768 ) )
-( ( -165.25 83.25 176 -1.2890629768 6.6328129768 ) ( -165.25 83.25 176 -1.2890629768 6.6328129768 ) ( -165.25 83.25 176 -1.2890629768 6.6328129768 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( -132.25 83.25 184 -1.2890629768 6.375 ) ( -165.25 83.25 184 -1.2890629768 6.6328129768 ) ( -165.25 50.25 184 -1.03125 6.6328129768 ) )
-( ( -165.25 83.25 184 -1.2890629768 6.6328129768 ) ( -165.25 83.25 184 -1.2890629768 6.6328129768 ) ( -165.25 83.25 184 -1.2890629768 6.6328129768 ) )
-( ( -165.25 83.25 184 -1.2890629768 6.6328129768 ) ( -165.25 83.25 184 -1.2890629768 6.6328129768 ) ( -165.25 83.25 184 -1.2890629768 6.6328129768 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( -132.25 83.25 184 0 0.0625 ) ( -132.25 83.25 180 0 0.03125 ) ( -132.25 83.25 176 0 0 ) )
-( ( -165.25 83.25 184 0.2578130066 0.0625 ) ( -165.25 83.25 180 0.2578130066 0.03125 ) ( -165.25 83.25 176 0.2578130066 0 ) )
-( ( -165.25 50.25 184 0.515625 0.0625 ) ( -165.25 50.25 180 0.515625 0.03125 ) ( -165.25 50.25 176 0.515625 0 ) )
-)
-}
-}
-}
-// entity 120
-{
-"classname" "func_group"
-"type" "patchCapped"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 9 3 0 0 0 )
-(
-( ( -180.25 134.25 -16 0 0.420065999 ) ( -180.25 129.25 -0.0999979973 0 0.2898499966 ) ( -180.25 129.5 37.0000076294 0 0 ) )
-( ( -216.25 134.25 -16 0.28125 0.420065999 ) ( -211.25 129.25 -0.0999979973 0.28125 0.2898499966 ) ( -211.5 129.5 37.0000076294 0.28125 0 ) )
-( ( -216.25 98.25 -16 0.5625 0.420065999 ) ( -211.25 98.25 -0.0999979973 0.5625 0.2898499966 ) ( -211.5 98.25 37.0000076294 0.5625 0 ) )
-( ( -216.25 62.25 -16 0.84375 0.420065999 ) ( -211.25 67.25 -0.0999979973 0.84375 0.2898499966 ) ( -211.5 67 37.0000076294 0.84375 0 ) )
-( ( -180.25 62.25 -16 1.125 0.420065999 ) ( -180.25 67.25 -0.0999979973 1.125 0.2898499966 ) ( -180.25 67 37.0000076294 1.125 0 ) )
-( ( -144.25 62.25 -16 1.40625 0.420065999 ) ( -149.25 67.25 -0.0999979973 1.40625 0.2898499966 ) ( -149 67 37.0000076294 1.40625 0 ) )
-( ( -144.25 98.25 -16 1.6875 0.420065999 ) ( -149.25 98.25 -0.0999979973 1.6875 0.2898499966 ) ( -149 98.25 37.0000076294 1.6875 0 ) )
-( ( -144.25 134.25 -16 1.96875 0.420065999 ) ( -149.25 129.25 -0.0999979973 1.96875 0.2898499966 ) ( -149 129.5 37.0000076294 1.96875 0 ) )
-( ( -180.25 134.25 -16 2.25 0.420065999 ) ( -180.25 129.25 -0.0999979973 2.25 0.2898499966 ) ( -180.25 129.5 37.0000076294 2.25 0 ) )
-)
-}
-}
-}
-// entity 121
-{
-"classname" "light"
-"_color" "0.668241 0.881508 1.000000"
-"light" "50"
-"origin" "-284 -1011 153"
-}
-// entity 122
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( -292.1296691895 -976.1096801758 165.1057739258 0 0.1406240016 ) ( -291.8112792969 -975.5629882812 156.1280822754 0 0.0703120008 ) ( -291.4933776855 -975.0162963867 147.1504211426 0 0 ) )
-( ( -274.2858886719 -998.5367431641 164.3728637695 0.2239760011 0.1406240016 ) ( -273.9678649902 -997.9900512695 155.3950805664 0.2239760011 0.0703120008 ) ( -273.6496276855 -997.4434204102 146.4172668457 0.2239760011 0 ) )
-( ( -243.9634857178 -1005.537902832 165.0215454102 0.4671550095 0.1406240016 ) ( -243.6449890137 -1004.9911499023 156.0437316895 0.4671550095 0.0703120008 ) ( -243.3265991211 -1004.444519043 147.0660400391 0.4671550095 0 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( -293.6886901855 -977.3555908203 164.9746398926 0 0.140625 ) ( -293.3701782227 -976.8088989258 155.9968261719 0 0.0703120008 ) ( -293.0522766113 -976.2622680664 147.0191955566 0 0 ) )
-( ( -292.9094238281 -976.7326049805 165.0401306152 0.0078110001 0.140625 ) ( -292.5907897949 -976.1859741211 156.0625610352 0.0078110001 0.0703120008 ) ( -292.2725524902 -975.6392822266 147.0848083496 0.0078110001 0 ) )
-( ( -292.1296691895 -976.1096801758 165.1057739258 0.015625 0.140625 ) ( -291.8112792969 -975.5629882812 156.1280822754 0.015625 0.0703120008 ) ( -291.4933776855 -975.0162963867 147.1504211426 0.015625 0 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( -243.7797393799 -1006.387878418 146.9315795898 0 0.1406259984 ) ( -244.0983734131 -1006.9345703125 155.9093322754 0 0.0703129992 ) ( -244.4163818359 -1007.4812011719 164.8871765137 0 0 ) )
-( ( -243.553604126 -1005.4161376953 146.9987792969 0.0078119999 0.1406259984 ) ( -243.8717346191 -1005.9627685547 155.9765014648 0.0078119999 0.0703129992 ) ( -244.1901245117 -1006.5095214844 164.9542236328 0.0078119999 0 ) )
-( ( -243.3265991211 -1004.444519043 147.0660400391 0.015625 0.1406259984 ) ( -243.6449890137 -1004.9911499023 156.0437316895 0.015625 0.0703129992 ) ( -243.9634857178 -1005.537902832 165.0215454102 0.015625 0 ) )
-)
-}
-}
-// brush 3
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( -291.4933776855 -975.0162963867 147.1504211426 0 0.0156239998 ) ( -292.2725524902 -975.6392822266 147.0848083496 0 0.0078140004 ) ( -293.0522766113 -976.2622680664 147.0191955566 0 0 ) )
-( ( -273.6496276855 -997.4434204102 146.4172668457 0.2239760011 0.0156239998 ) ( -274.1813964844 -998.2869873047 146.3471679688 0.2239760011 0.0078140004 ) ( -274.7138061523 -999.1306762695 146.2768554688 0.2239760011 0 ) )
-( ( -243.3265991211 -1004.444519043 147.0660400391 0.4671599865 0.0156239998 ) ( -243.553604126 -1005.4161376953 146.9987792969 0.4671599865 0.0078140004 ) ( -243.7797393799 -1006.387878418 146.9315795898 0.4671599865 0 ) )
-)
-}
-}
-// brush 4
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( -293.6886901855 -977.3555908203 164.9746398926 0 0.015625 ) ( -292.9094238281 -976.7326049805 165.0401306152 0 0.0078140004 ) ( -292.1296691895 -976.1096801758 165.1057739258 0 0 ) )
-( ( -275.3502197266 -1000.2240600586 164.2322998047 0.2290830016 0.015625 ) ( -274.818145752 -999.3803710938 164.3024902344 0.2290830016 0.0078140004 ) ( -274.2858886719 -998.5367431641 164.3728637695 0.2290830016 0 ) )
-( ( -244.4163818359 -1007.4812011719 164.8871765137 0.4773679972 0.015625 ) ( -244.1901245117 -1006.5095214844 164.9542236328 0.4773679972 0.0078140004 ) ( -243.9634857178 -1005.537902832 165.0215454102 0.4773679972 0 ) )
-)
-}
-}
-// brush 5
-{
-patchDef2
-{
-evil_lights/s_bluelight
-( 3 3 0 0 0 )
-(
-( ( -293.0522766113 -976.2622680664 147.0191955566 0 1 ) ( -293.3701782227 -976.8088989258 155.9968261719 0 0.5 ) ( -293.6886901855 -977.3555908203 164.9746398926 0 0 ) )
-( ( -274.7138061523 -999.1306762695 146.2768554688 0.5 1 ) ( -275.0319519043 -999.6773681641 155.2545471191 0.5 0.5 ) ( -275.3502197266 -1000.2240600586 164.2322998047 0.5 0 ) )
-( ( -243.7797393799 -1006.387878418 146.9315795898 1 1 ) ( -244.0983734131 -1006.9345703125 155.9093322754 1 0.5 ) ( -244.4163818359 -1007.4812011719 164.8871765137 1 0 ) )
-)
-}
-}
-}
-// entity 123
-{
-"classname" "func_group"
-"type" "patchCapped"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( -211.25 -864 37.0000076294 -1.6503909826 6.75 ) ( -211.25 -832.75 37.0000076294 -1.6503909826 6.5058588982 ) ( -180 -832.75 37.0000076294 -1.40625 6.5058588982 ) )
-( ( -211.25 -895.25 37.0000076294 -1.6503909826 6.9941411018 ) ( -180 -864 37.0000076294 -1.40625 6.75 ) ( -148.75 -832.75 37.0000076294 -1.1621090174 6.5058588982 ) )
-( ( -180 -895.25 37.0000076294 -1.40625 6.9941411018 ) ( -148.75 -895.25 37.0000076294 -1.1621090174 6.9941411018 ) ( -148.75 -864 37.0000076294 -1.1621090174 6.75 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 9 3 0 0 0 )
-(
-( ( -216 -864 -15.9999980927 0 0.420065999 ) ( -211 -864 -0.1000009999 0 0.2898499966 ) ( -211.25 -864 37.0000076294 0 0 ) )
-( ( -216 -900 -15.9999980927 0.28125 0.420065999 ) ( -211 -895 -0.1000009999 0.28125 0.2898499966 ) ( -211.25 -895.25 37.0000076294 0.28125 0 ) )
-( ( -180 -900 -15.9999980927 0.5625 0.420065999 ) ( -180 -895 -0.1000009999 0.5625 0.2898499966 ) ( -180 -895.25 37.0000076294 0.5625 0 ) )
-( ( -144 -900 -15.9999980927 0.84375 0.420065999 ) ( -149 -895 -0.1000009999 0.84375 0.2898499966 ) ( -148.75 -895.25 37.0000076294 0.84375 0 ) )
-( ( -144 -864 -15.9999980927 1.125 0.420065999 ) ( -149 -864 -0.1000009999 1.125 0.2898499966 ) ( -148.75 -864 37.0000076294 1.125 0 ) )
-( ( -144 -828 -15.9999980927 1.40625 0.420065999 ) ( -149 -833 -0.1000009999 1.40625 0.2898499966 ) ( -148.75 -832.75 37.0000076294 1.40625 0 ) )
-( ( -180 -828 -15.9999980927 1.6875 0.420065999 ) ( -180 -833 -0.1000009999 1.6875 0.2898499966 ) ( -180 -832.75 37.0000076294 1.6875 0 ) )
-( ( -216 -828 -15.9999980927 1.96875 0.420065999 ) ( -211 -833 -0.1000009999 1.96875 0.2898499966 ) ( -211.25 -832.75 37.0000076294 1.96875 0 ) )
-( ( -216 -864 -15.9999980927 2.25 0.420065999 ) ( -211 -864 -0.1000009999 2.25 0.2898499966 ) ( -211.25 -864 37.0000076294 2.25 0 ) )
-)
-}
-}
-}
-// entity 124
-{
-"classname" "func_group"
-"type" "patchCapped"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( -132 -849 176 -1.03125 6.6328129768 ) ( -165 -849 176 -1.2890629768 6.6328129768 ) ( -165 -816 176 -1.2890629768 6.375 ) )
-( ( -165 -849 176 -1.2890629768 6.6328129768 ) ( -165 -849 176 -1.2890629768 6.6328129768 ) ( -165 -849 176 -1.2890629768 6.6328129768 ) )
-( ( -165 -849 176 -1.2890629768 6.6328129768 ) ( -165 -849 176 -1.2890629768 6.6328129768 ) ( -165 -849 176 -1.2890629768 6.6328129768 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( -165 -816 184 -1.2890629768 6.375 ) ( -165 -849 184 -1.2890629768 6.6328129768 ) ( -132 -849 184 -1.03125 6.6328129768 ) )
-( ( -165 -849 184 -1.2890629768 6.6328129768 ) ( -165 -849 184 -1.2890629768 6.6328129768 ) ( -165 -849 184 -1.2890629768 6.6328129768 ) )
-( ( -165 -849 184 -1.2890629768 6.6328129768 ) ( -165 -849 184 -1.2890629768 6.6328129768 ) ( -165 -849 184 -1.2890629768 6.6328129768 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( -165 -816 184 0 0.0625 ) ( -165 -816 180 0 0.03125 ) ( -165 -816 176 0 0 ) )
-( ( -165 -849 184 0.2578130066 0.0625 ) ( -165 -849 180 0.2578130066 0.03125 ) ( -165 -849 176 0.2578130066 0 ) )
-( ( -132 -849 184 0.515625 0.0625 ) ( -132 -849 180 0.515625 0.03125 ) ( -132 -849 176 0.515625 0 ) )
-)
-}
-}
-}
-// entity 125
-{
-"classname" "func_group"
-"type" "patchCapped"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( -195 -816 176 -1.5234379768 6.375 ) ( -195 -849 176 -1.5234379768 6.6328129768 ) ( -228 -849 176 -1.78125 6.6328129768 ) )
-( ( -195 -849 176 -1.5234379768 6.6328129768 ) ( -195 -849 176 -1.5234379768 6.6328129768 ) ( -195 -849 176 -1.5234379768 6.6328129768 ) )
-( ( -195 -849 176 -1.5234379768 6.6328129768 ) ( -195 -849 176 -1.5234379768 6.6328129768 ) ( -195 -849 176 -1.5234379768 6.6328129768 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( -228 -849 184 -1.78125 6.6328129768 ) ( -195 -849 184 -1.5234379768 6.6328129768 ) ( -195 -816 184 -1.5234379768 6.375 ) )
-( ( -195 -849 184 -1.5234379768 6.6328129768 ) ( -195 -849 184 -1.5234379768 6.6328129768 ) ( -195 -849 184 -1.5234379768 6.6328129768 ) )
-( ( -195 -849 184 -1.5234379768 6.6328129768 ) ( -195 -849 184 -1.5234379768 6.6328129768 ) ( -195 -849 184 -1.5234379768 6.6328129768 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( -228 -849 184 0 0.0625 ) ( -228 -849 180 0 0.03125 ) ( -228 -849 176 0 0 ) )
-( ( -195 -849 184 0.2578130066 0.0625 ) ( -195 -849 180 0.2578130066 0.03125 ) ( -195 -849 176 0.2578130066 0 ) )
-( ( -195 -816 184 0.515625 0.0625 ) ( -195 -816 180 0.515625 0.03125 ) ( -195 -816 176 0.515625 0 ) )
-)
-}
-}
-}
-// entity 126
-{
-"classname" "func_group"
-"type" "patchCapped"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( -228 -879 176 -1.78125 6.8671879768 ) ( -195 -879 176 -1.5234379768 6.8671879768 ) ( -195 -912 176 -1.5234379768 7.125 ) )
-( ( -195 -879 176 -1.5234379768 6.8671879768 ) ( -195 -879 176 -1.5234379768 6.8671879768 ) ( -195 -879 176 -1.5234379768 6.8671879768 ) )
-( ( -195 -879 176 -1.5234379768 6.8671879768 ) ( -195 -879 176 -1.5234379768 6.8671879768 ) ( -195 -879 176 -1.5234379768 6.8671879768 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( -195 -912 184 -1.5234379768 7.125 ) ( -195 -879 184 -1.5234379768 6.8671879768 ) ( -228 -879 184 -1.78125 6.8671879768 ) )
-( ( -195 -879 184 -1.5234379768 6.8671879768 ) ( -195 -879 184 -1.5234379768 6.8671879768 ) ( -195 -879 184 -1.5234379768 6.8671879768 ) )
-( ( -195 -879 184 -1.5234379768 6.8671879768 ) ( -195 -879 184 -1.5234379768 6.8671879768 ) ( -195 -879 184 -1.5234379768 6.8671879768 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( -195 -912 184 0 0.0625 ) ( -195 -912 180 0 0.03125 ) ( -195 -912 176 0 0 ) )
-( ( -195 -879 184 0.2578130066 0.0625 ) ( -195 -879 180 0.2578130066 0.03125 ) ( -195 -879 176 0.2578130066 0 ) )
-( ( -228 -879 184 0.515625 0.0625 ) ( -228 -879 180 0.515625 0.03125 ) ( -228 -879 176 0.515625 0 ) )
-)
-}
-}
-}
-// entity 127
-{
-"classname" "func_group"
-"type" "patchCapped"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( -165 -912 176 -1.2890629768 7.125 ) ( -165 -879 176 -1.2890629768 6.8671879768 ) ( -132 -879 176 -1.03125 6.8671879768 ) )
-( ( -165 -879 176 -1.2890629768 6.8671879768 ) ( -165 -879 176 -1.2890629768 6.8671879768 ) ( -165 -879 176 -1.2890629768 6.8671879768 ) )
-( ( -165 -879 176 -1.2890629768 6.8671879768 ) ( -165 -879 176 -1.2890629768 6.8671879768 ) ( -165 -879 176 -1.2890629768 6.8671879768 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( -132 -879 184 -1.03125 6.8671879768 ) ( -165 -879 184 -1.2890629768 6.8671879768 ) ( -165 -912 184 -1.2890629768 7.125 ) )
-( ( -165 -879 184 -1.2890629768 6.8671879768 ) ( -165 -879 184 -1.2890629768 6.8671879768 ) ( -165 -879 184 -1.2890629768 6.8671879768 ) )
-( ( -165 -879 184 -1.2890629768 6.8671879768 ) ( -165 -879 184 -1.2890629768 6.8671879768 ) ( -165 -879 184 -1.2890629768 6.8671879768 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( -132 -879 184 0 0.0625 ) ( -132 -879 180 0 0.03125 ) ( -132 -879 176 0 0 ) )
-( ( -165 -879 184 0.2578130066 0.0625 ) ( -165 -879 180 0.2578130066 0.03125 ) ( -165 -879 176 0.2578130066 0 ) )
-( ( -165 -912 184 0.515625 0.0625 ) ( -165 -912 180 0.515625 0.03125 ) ( -165 -912 176 0.515625 0 ) )
-)
-}
-}
-}
-// entity 128
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 9 3 0 0 0 )
-(
-( ( -353.5 -861.5 190 0 0.0625 ) ( -351.3800048828 -861.5 193.391998291 0 0.03125 ) ( -349.2600097656 -861.5 196.783996582 0 0 ) )
-( ( -353.5 -1045.5 190 1.4375 0.0625 ) ( -352.3566894531 -1044.3566894531 193.6586303711 1.4375 0.03125 ) ( -351.2133789062 -1043.2133789062 197.3172607422 1.4375 0 ) )
-( ( -177.5 -1045.5 190 2.8125 0.0625 ) ( -177.5 -1043.3800048828 193.391998291 2.8125 0.03125 ) ( -177.5 -1041.2600097656 196.783996582 2.8125 0 ) )
-( ( -1.5 -1045.5 190 4.1875 0.0625 ) ( -2.6433110237 -1044.3566894531 193.6586303711 4.1875 0.03125 ) ( -3.7866210938 -1043.2133789062 197.3172607422 4.1875 0 ) )
-( ( -1.5 -861.5 190 5.625 0.0625 ) ( -3.6199951172 -861.5 193.391998291 5.625 0.03125 ) ( -5.7399902344 -861.5 196.783996582 5.625 0 ) )
-( ( -1.5 -685.5 190 7 0.0625 ) ( -2.6433110237 -686.6433105469 193.6586303711 7 0.03125 ) ( -3.7866210938 -687.7866210938 197.3172607422 7 0 ) )
-( ( -177.5 -685.5 190 8.375 0.0625 ) ( -177.5 -687.6199951172 193.391998291 8.375 0.03125 ) ( -177.5 -689.7399902344 196.783996582 8.375 0 ) )
-( ( -353.5 -685.5 190 9.75 0.0625 ) ( -352.3566894531 -686.6433105469 193.6586303711 9.75 0.03125 ) ( -351.2133789062 -687.7866210938 197.3172607422 9.75 0 ) )
-( ( -353.5 -861.5 190 11.125 0.0625 ) ( -351.3800048828 -861.5 193.391998291 11.125 0.03125 ) ( -349.2600097656 -861.5 196.783996582 11.125 0 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 9 3 0 0 0 )
-(
-( ( -322.7618408203 -861.5 135.6875610352 0 0 ) ( -326.130859375 -861.5 137.8437805176 0 0.03125 ) ( -329.5 -861.5 140 0 0.0625 ) )
-( ( -325.0843505859 -1008.5068359375 135.576171875 1.1875 0 ) ( -327.2922363281 -1011.0034179688 137.7880859375 1.1875 0.03125 ) ( -329.5 -1013.5 140 1.1875 0.0625 ) )
-( ( -177.5 -1005.8806152344 137.5617980957 2.375 0 ) ( -177.5 -1009.6903076172 138.7808837891 2.375 0.03125 ) ( -177.5 -1013.5 140 2.375 0.0625 ) )
-( ( -29.9156494141 -1008.5068359375 135.576171875 3.5625 0 ) ( -27.7077636719 -1011.0034179688 137.7880859375 3.5625 0.03125 ) ( -25.5 -1013.5 140 3.5625 0.0625 ) )
-( ( -32.2381591797 -861.5 135.6875610352 4.75 0 ) ( -28.869140625 -861.5 137.8437805176 4.75 0.03125 ) ( -25.5 -861.5 140 4.75 0.0625 ) )
-( ( -29.6940917969 -713.6940917969 134.6315917969 5.9375 0 ) ( -27.5970458984 -711.5970458984 137.3157958984 5.9375 0.03125 ) ( -25.5 -709.5 140 5.9375 0.0625 ) )
-( ( -177.5 -716.2381591797 135.6875610352 7.125 0 ) ( -177.5 -712.8690795898 137.8437805176 7.125 0.03125 ) ( -177.5 -709.5 140 7.125 0.0625 ) )
-( ( -325.3059082031 -713.6940917969 134.6315917969 8.3125 0 ) ( -327.4029541016 -711.5970458984 137.3157958984 8.3125 0.03125 ) ( -329.5 -709.5 140 8.3125 0.0625 ) )
-( ( -322.7618408203 -861.5 135.6875610352 9.5 0 ) ( -326.130859375 -861.5 137.8437805176 9.5 0.03125 ) ( -329.5 -861.5 140 9.5 0.0625 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 9 3 0 0 0 )
-(
-( ( -349.2600097656 -861.5 196.783996582 0 0 ) ( -305.6953125 -861.5 166.7570800781 0 0.3685150146 ) ( -322.7618408203 -861.5 135.6875610352 0 0.6004030108 ) )
-( ( -351.2133789062 -1043.2133789062 197.3172607422 1.1875 0 ) ( -308.4927978516 -1000.0908203125 168.1094360352 1.1875 0.3685150146 ) ( -325.0843505859 -1008.5068359375 135.576171875 1.1875 0.6004030108 ) )
-( ( -177.5 -1041.2600097656 196.783996582 2.375 0 ) ( -177.5 -997.9885253906 167.7525634766 2.375 0.3685150146 ) ( -177.5 -1005.8806152344 137.5617980957 2.375 0.6004030108 ) )
-( ( -3.7866210938 -1043.2133789062 197.3172607422 3.5625 0 ) ( -46.5072021484 -1000.0908203125 168.1094360352 3.5625 0.3685150146 ) ( -29.9156494141 -1008.5068359375 135.576171875 3.5625 0.6004030108 ) )
-( ( -5.7399902344 -861.5 196.783996582 4.75 0 ) ( -49.3046875 -861.5 166.7570800781 4.75 0.3685150146 ) ( -32.2381591797 -861.5 135.6875610352 4.75 0.6004030108 ) )
-( ( -3.7866210938 -687.7866210938 197.3172607422 5.9375 0 ) ( -46.8902587891 -730.8902587891 167.4270629883 5.9375 0.3685150146 ) ( -29.6940917969 -713.6940917969 134.6315917969 5.9375 0.6004030108 ) )
-( ( -177.5 -689.7399902344 196.783996582 7.125 0 ) ( -177.5 -733.3046264648 166.7570800781 7.125 0.3685150146 ) ( -177.5 -716.2381591797 135.6875610352 7.125 0.6004030108 ) )
-( ( -351.2133789062 -687.7866210938 197.3172607422 8.3125 0 ) ( -308.1097412109 -730.8902587891 167.4270629883 8.3125 0.3685150146 ) ( -325.3059082031 -713.6940917969 134.6315917969 8.3125 0.6004030108 ) )
-( ( -349.2600097656 -861.5 196.783996582 9.5 0 ) ( -305.6953125 -861.5 166.7570800781 9.5 0.3685150146 ) ( -322.7618408203 -861.5 135.6875610352 9.5 0.6004030108 ) )
-)
-}
-}
-// brush 3
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 9 3 0 0 0 )
-(
-( ( -329.5 -861.5 140 0 0.6004030108 ) ( -313.5 -861.5 165 0 0.3685150146 ) ( -353.5 -861.5 190 0 0 ) )
-( ( -329.5 -1013.5 140 1.1875 0.6004030108 ) ( -313.5 -1005.5 165 1.1875 0.3685150146 ) ( -353.5 -1045.5 190 1.1875 0 ) )
-( ( -177.5 -1013.5 140 2.375 0.6004030108 ) ( -177.5 -1005.5 165 2.375 0.3685150146 ) ( -177.5 -1045.5 190 2.375 0 ) )
-( ( -25.5 -1013.5 140 3.5625 0.6004030108 ) ( -41.5 -1005.5 165 3.5625 0.3685150146 ) ( -1.5 -1045.5 190 3.5625 0 ) )
-( ( -25.5 -861.5 140 4.75 0.6004030108 ) ( -41.5 -861.5 165 4.75 0.3685150146 ) ( -1.5 -861.5 190 4.75 0 ) )
-( ( -25.5 -709.5 140 5.9375 0.6004030108 ) ( -41.5 -725.5 165 5.9375 0.3685150146 ) ( -1.5 -685.5 190 5.9375 0 ) )
-( ( -177.5 -709.5 140 7.125 0.6004030108 ) ( -177.5 -725.5 165 7.125 0.3685150146 ) ( -177.5 -685.5 190 7.125 0 ) )
-( ( -329.5 -709.5 140 8.3125 0.6004030108 ) ( -313.5 -725.5 165 8.3125 0.3685150146 ) ( -353.5 -685.5 190 8.3125 0 ) )
-( ( -329.5 -861.5 140 9.5 0.6004030108 ) ( -313.5 -861.5 165 9.5 0.3685150146 ) ( -353.5 -861.5 190 9.5 0 ) )
-)
-}
-}
-}
-// entity 129
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( -64.6834716797 -974.5305175781 165.1057739258 0 0.1406240016 ) ( -65.2329101562 -974.2169189453 156.1280822754 0 0.0703120008 ) ( -65.7823486328 -973.9038085938 147.1504211426 0 0 ) )
-( ( -42.4129638672 -956.4916992188 164.3728637695 0.2239760011 0.1406240016 ) ( -42.9624023438 -956.1784667969 155.3950805664 0.2239760011 0.0703120008 ) ( -43.5118408203 -955.8649902344 146.4172668457 0.2239760011 0 ) )
-( ( -35.6767578125 -926.109375 165.0215454102 0.4671550095 0.1406240016 ) ( -36.2261962891 -925.7956542969 156.0437316895 0.4671550095 0.0703120008 ) ( -36.7756347656 -925.4820556641 147.0660400391 0.4671550095 0 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( -63.4239501953 -976.0786132812 164.9746398926 0 0.140625 ) ( -63.9733886719 -975.7648925781 155.9968261719 0 0.0703120008 ) ( -64.5228271484 -975.4517822266 147.0191955566 0 0 ) )
-( ( -64.0537109375 -975.3048095703 165.0401306152 0.0078110001 0.140625 ) ( -64.6031494141 -974.9909667969 156.0625610352 0.0078110001 0.0703120008 ) ( -65.1525878906 -974.6774902344 147.0848083496 0.0078110001 0 ) )
-( ( -64.6834716797 -974.5305175781 165.1057739258 0.015625 0.140625 ) ( -65.2329101562 -974.2169189453 156.1280822754 0.015625 0.0703120008 ) ( -65.7823486328 -973.9038085938 147.1504211426 0.015625 0 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( -34.8283691406 -925.9182128906 146.9315795898 0 0.1406259984 ) ( -34.2789306641 -926.2320556641 155.9093322754 0 0.0703129992 ) ( -33.7294921875 -926.5452880859 164.8871765137 0 0 ) )
-( ( -35.8020019531 -925.7005615234 146.9987792969 0.0078119999 0.1406259984 ) ( -35.2525634766 -926.0139160156 155.9765014648 0.0078119999 0.0703129992 ) ( -34.703125 -926.3275146484 164.9542236328 0.0078119999 0 ) )
-( ( -36.7756347656 -925.4820556641 147.0660400391 0.015625 0.1406259984 ) ( -36.2261962891 -925.7956542969 156.0437316895 0.015625 0.0703129992 ) ( -35.6767578125 -926.109375 165.0215454102 0.015625 0 ) )
-)
-}
-}
-// brush 3
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( -65.7823486328 -973.9038085938 147.1504211426 0 0.0156239998 ) ( -65.1525878906 -974.6774902344 147.0848083496 0 0.0078140004 ) ( -64.5228271484 -975.4517822266 147.0191955566 0 0 ) )
-( ( -43.5118408203 -955.8649902344 146.4172668457 0.2239760011 0.0156239998 ) ( -42.6635742188 -956.3894042969 146.3471679688 0.2239760011 0.0078140004 ) ( -41.8153076172 -956.9144287109 146.2768554688 0.2239760011 0 ) )
-( ( -36.7756347656 -925.4820556641 147.0660400391 0.4671599865 0.0156239998 ) ( -35.8020019531 -925.7005615234 146.9987792969 0.4671599865 0.0078140004 ) ( -34.8283691406 -925.9182128906 146.9315795898 0.4671599865 0 ) )
-)
-}
-}
-// brush 4
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( -63.4239501953 -976.0786132812 164.9746398926 0 0.015625 ) ( -64.0537109375 -975.3048095703 165.0401306152 0 0.0078140004 ) ( -64.6834716797 -974.5305175781 165.1057739258 0 0 ) )
-( ( -40.7164306641 -957.5412597656 164.2322998047 0.2290830016 0.015625 ) ( -41.5646972656 -957.0166015625 164.3024902344 0.2290830016 0.0078140004 ) ( -42.4129638672 -956.4916992188 164.3728637695 0.2290830016 0 ) )
-( ( -33.7294921875 -926.5452880859 164.8871765137 0.4773679972 0.015625 ) ( -34.703125 -926.3275146484 164.9542236328 0.4773679972 0.0078140004 ) ( -35.6767578125 -926.109375 165.0215454102 0.4773679972 0 ) )
-)
-}
-}
-// brush 5
-{
-patchDef2
-{
-evil_lights/s_bluelight
-( 3 3 0 0 0 )
-(
-( ( -64.5228271484 -975.4517822266 147.0191955566 0 1 ) ( -63.9733886719 -975.7648925781 155.9968261719 0 0.5 ) ( -63.4239501953 -976.0786132812 164.9746398926 0 0 ) )
-( ( -41.8153076172 -956.9144287109 146.2768554688 0.5 1 ) ( -41.2658691406 -957.2277832031 155.2545471191 0.5 0.5 ) ( -40.7164306641 -957.5412597656 164.2322998047 0.5 0 ) )
-( ( -34.8283691406 -925.9182128906 146.9315795898 1 1 ) ( -34.2789306641 -926.2320556641 155.9093322754 1 0.5 ) ( -33.7294921875 -926.5452880859 164.8871765137 1 0 ) )
-)
-}
-}
-}
-// entity 130
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( -64.2194824219 -751.4334716797 165.1057739258 0 0.1406240016 ) ( -64.5330810547 -751.9829101562 156.1280822754 0 0.0703120008 ) ( -64.8461914062 -752.5323486328 147.1504211426 0 0 ) )
-( ( -82.2583007812 -729.1629638672 164.3728637695 0.2239760011 0.1406240016 ) ( -82.5715332031 -729.7124023438 155.3950805664 0.2239760011 0.0703120008 ) ( -82.8850097656 -730.2618408203 146.4172668457 0.2239760011 0 ) )
-( ( -112.640625 -722.4267578125 165.0215454102 0.4671550095 0.1406240016 ) ( -112.9543457031 -722.9761962891 156.0437316895 0.4671550095 0.0703120008 ) ( -113.2679443359 -723.5256347656 147.0660400391 0.4671550095 0 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( -62.6713867188 -750.1739501953 164.9746398926 0 0.140625 ) ( -62.9851074219 -750.7233886719 155.9968261719 0 0.0703120008 ) ( -63.2982177734 -751.2728271484 147.0191955566 0 0 ) )
-( ( -63.4451904297 -750.8037109375 165.0401306152 0.0078110001 0.140625 ) ( -63.7590332031 -751.3531494141 156.0625610352 0.0078110001 0.0703120008 ) ( -64.0725097656 -751.9025878906 147.0848083496 0.0078110001 0 ) )
-( ( -64.2194824219 -751.4334716797 165.1057739258 0.015625 0.140625 ) ( -64.5330810547 -751.9829101562 156.1280822754 0.015625 0.0703120008 ) ( -64.8461914062 -752.5323486328 147.1504211426 0.015625 0 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( -112.8317871094 -721.5783691406 146.9315795898 0 0.1406259984 ) ( -112.5179443359 -721.0289306641 155.9093322754 0 0.0703129992 ) ( -112.2047119141 -720.4794921875 164.8871765137 0 0 ) )
-( ( -113.0494384766 -722.5520019531 146.9987792969 0.0078119999 0.1406259984 ) ( -112.7360839844 -722.0025634766 155.9765014648 0.0078119999 0.0703129992 ) ( -112.4224853516 -721.453125 164.9542236328 0.0078119999 0 ) )
-( ( -113.2679443359 -723.5256347656 147.0660400391 0.015625 0.1406259984 ) ( -112.9543457031 -722.9761962891 156.0437316895 0.015625 0.0703129992 ) ( -112.640625 -722.4267578125 165.0215454102 0.015625 0 ) )
-)
-}
-}
-// brush 3
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( -64.8461914062 -752.5323486328 147.1504211426 0 0.0156239998 ) ( -64.0725097656 -751.9025878906 147.0848083496 0 0.0078140004 ) ( -63.2982177734 -751.2728271484 147.0191955566 0 0 ) )
-( ( -82.8850097656 -730.2618408203 146.4172668457 0.2239760011 0.0156239998 ) ( -82.3605957031 -729.4135742188 146.3471679688 0.2239760011 0.0078140004 ) ( -81.8355712891 -728.5653076172 146.2768554688 0.2239760011 0 ) )
-( ( -113.2679443359 -723.5256347656 147.0660400391 0.4671599865 0.0156239998 ) ( -113.0494384766 -722.5520019531 146.9987792969 0.4671599865 0.0078140004 ) ( -112.8317871094 -721.5783691406 146.9315795898 0.4671599865 0 ) )
-)
-}
-}
-// brush 4
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( -62.6713867188 -750.1739501953 164.9746398926 0 0.015625 ) ( -63.4451904297 -750.8037109375 165.0401306152 0 0.0078140004 ) ( -64.2194824219 -751.4334716797 165.1057739258 0 0 ) )
-( ( -81.2087402344 -727.4664306641 164.2322998047 0.2290830016 0.015625 ) ( -81.7333984375 -728.3146972656 164.3024902344 0.2290830016 0.0078140004 ) ( -82.2583007812 -729.1629638672 164.3728637695 0.2290830016 0 ) )
-( ( -112.2047119141 -720.4794921875 164.8871765137 0.4773679972 0.015625 ) ( -112.4224853516 -721.453125 164.9542236328 0.4773679972 0.0078140004 ) ( -112.640625 -722.4267578125 165.0215454102 0.4773679972 0 ) )
-)
-}
-}
-// brush 5
-{
-patchDef2
-{
-evil_lights/s_bluelight
-( 3 3 0 0 0 )
-(
-( ( -63.2982177734 -751.2728271484 147.0191955566 0 1 ) ( -62.9851074219 -750.7233886719 155.9968261719 0 0.5 ) ( -62.6713867188 -750.1739501953 164.9746398926 0 0 ) )
-( ( -81.8355712891 -728.5653076172 146.2768554688 0.5 1 ) ( -81.5222167969 -728.0158691406 155.2545471191 0.5 0.5 ) ( -81.2087402344 -727.4664306641 164.2322998047 0.5 0 ) )
-( ( -112.8317871094 -721.5783691406 146.9315795898 1 1 ) ( -112.5179443359 -721.0289306641 155.9093322754 1 0.5 ) ( -112.2047119141 -720.4794921875 164.8871765137 1 0 ) )
-)
-}
-}
-}
-// entity 131
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( -293.0665283203 -750.4694824219 165.1057739258 0 0.1406240016 ) ( -292.5170898438 -750.7830810547 156.1280822754 0 0.0703120008 ) ( -291.9676513672 -751.0961914062 147.1504211426 0 0 ) )
-( ( -315.3370361328 -768.5083007812 164.3728637695 0.2239760011 0.1406240016 ) ( -314.7875976562 -768.8215332031 155.3950805664 0.2239760011 0.0703120008 ) ( -314.2381591797 -769.1350097656 146.4172668457 0.2239760011 0 ) )
-( ( -322.0732421875 -798.890625 165.0215454102 0.4671550095 0.1406240016 ) ( -321.5238037109 -799.2043457031 156.0437316895 0.4671550095 0.0703120008 ) ( -320.9743652344 -799.5179443359 147.0660400391 0.4671550095 0 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( -294.3260498047 -748.9213867188 164.9746398926 0 0.140625 ) ( -293.7766113281 -749.2351074219 155.9968261719 0 0.0703120008 ) ( -293.2271728516 -749.5482177734 147.0191955566 0 0 ) )
-( ( -293.6962890625 -749.6951904297 165.0401306152 0.0078110001 0.140625 ) ( -293.1468505859 -750.0090332031 156.0625610352 0.0078110001 0.0703120008 ) ( -292.5974121094 -750.3225097656 147.0848083496 0.0078110001 0 ) )
-( ( -293.0665283203 -750.4694824219 165.1057739258 0.015625 0.140625 ) ( -292.5170898438 -750.7830810547 156.1280822754 0.015625 0.0703120008 ) ( -291.9676513672 -751.0961914062 147.1504211426 0.015625 0 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( -322.9216308594 -799.0817871094 146.9315795898 0 0.1406259984 ) ( -323.4710693359 -798.7679443359 155.9093322754 0 0.0703129992 ) ( -324.0205078125 -798.4547119141 164.8871765137 0 0 ) )
-( ( -321.9479980469 -799.2994384766 146.9987792969 0.0078119999 0.1406259984 ) ( -322.4974365234 -798.9860839844 155.9765014648 0.0078119999 0.0703129992 ) ( -323.046875 -798.6724853516 164.9542236328 0.0078119999 0 ) )
-( ( -320.9743652344 -799.5179443359 147.0660400391 0.015625 0.1406259984 ) ( -321.5238037109 -799.2043457031 156.0437316895 0.015625 0.0703129992 ) ( -322.0732421875 -798.890625 165.0215454102 0.015625 0 ) )
-)
-}
-}
-// brush 3
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( -291.9676513672 -751.0961914062 147.1504211426 0 0.0156239998 ) ( -292.5974121094 -750.3225097656 147.0848083496 0 0.0078140004 ) ( -293.2271728516 -749.5482177734 147.0191955566 0 0 ) )
-( ( -314.2381591797 -769.1350097656 146.4172668457 0.2239760011 0.0156239998 ) ( -315.0864257812 -768.6105957031 146.3471679688 0.2239760011 0.0078140004 ) ( -315.9346923828 -768.0855712891 146.2768554688 0.2239760011 0 ) )
-( ( -320.9743652344 -799.5179443359 147.0660400391 0.4671599865 0.0156239998 ) ( -321.9479980469 -799.2994384766 146.9987792969 0.4671599865 0.0078140004 ) ( -322.9216308594 -799.0817871094 146.9315795898 0.4671599865 0 ) )
-)
-}
-}
-// brush 4
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( -294.3260498047 -748.9213867188 164.9746398926 0 0.015625 ) ( -293.6962890625 -749.6951904297 165.0401306152 0 0.0078140004 ) ( -293.0665283203 -750.4694824219 165.1057739258 0 0 ) )
-( ( -317.0335693359 -767.4587402344 164.2322998047 0.2290830016 0.015625 ) ( -316.1853027344 -767.9833984375 164.3024902344 0.2290830016 0.0078140004 ) ( -315.3370361328 -768.5083007812 164.3728637695 0.2290830016 0 ) )
-( ( -324.0205078125 -798.4547119141 164.8871765137 0.4773679972 0.015625 ) ( -323.046875 -798.6724853516 164.9542236328 0.4773679972 0.0078140004 ) ( -322.0732421875 -798.890625 165.0215454102 0.4773679972 0 ) )
-)
-}
-}
-// brush 5
-{
-patchDef2
-{
-evil_lights/s_bluelight
-( 3 3 0 0 0 )
-(
-( ( -293.2271728516 -749.5482177734 147.0191955566 0 1 ) ( -293.7766113281 -749.2351074219 155.9968261719 0 0.5 ) ( -294.3260498047 -748.9213867188 164.9746398926 0 0 ) )
-( ( -315.9346923828 -768.0855712891 146.2768554688 0.5 1 ) ( -316.4841308594 -767.7722167969 155.2545471191 0.5 0.5 ) ( -317.0335693359 -767.4587402344 164.2322998047 0.5 0 ) )
-( ( -322.9216308594 -799.0817871094 146.9315795898 1 1 ) ( -323.4710693359 -798.7679443359 155.9093322754 1 0.5 ) ( -324.0205078125 -798.4547119141 164.8871765137 1 0 ) )
-)
-}
-}
-}
-// entity 132
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-evil8_lights/e8minitrimlight
-( 9 3 0 0 0 )
-(
-( ( -349.25 -865.25 209 0 0.125 ) ( -348.75 -865.25 209 0 0.0625 ) ( -348.25 -865.25 209 0 0 ) )
-( ( -349.25 -1041 209 1.3730469942 0.125 ) ( -348.896484375 -1040.646484375 209 1.3730469942 0.0625 ) ( -348.5428466797 -1040.29296875 209 1.3730469942 0 ) )
-( ( -177.5 -1041 209 2.7148439884 0.125 ) ( -177.5 -1040.5 209 2.7148439884 0.0625 ) ( -177.5 -1040 209 2.7148439884 0 ) )
-( ( -5.75 -1041 209 4.0566411018 0.125 ) ( -6.1035161018 -1040.646484375 209 4.0566411018 0.0625 ) ( -6.4571528435 -1040.29296875 209 4.0566411018 0 ) )
-( ( -5.75 -865.25 209 5.4296879768 0.125 ) ( -6.25 -865.25 209 5.4296879768 0.0625 ) ( -6.75 -865.25 209 5.4296879768 0 ) )
-( ( -5.75 -689.5 209 6.8027338982 0.125 ) ( -6.1035161018 -689.853515625 209 6.8027338982 0.0625 ) ( -6.4571528435 -690.2070922852 209 6.8027338982 0 ) )
-( ( -177.5 -689.5 209 8.14453125 0.125 ) ( -177.5 -690 209 8.14453125 0.0625 ) ( -177.5 -690.5 209 8.14453125 0 ) )
-( ( -349.25 -689.5 209 9.486328125 0.125 ) ( -348.896484375 -689.853515625 209 9.486328125 0.0625 ) ( -348.5428466797 -690.2070922852 209 9.486328125 0 ) )
-( ( -349.25 -865.25 209 10.859375 0.125 ) ( -348.75 -865.25 209 10.859375 0.0625 ) ( -348.25 -865.25 209 10.859375 0 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-evil8_lights/e8minitrimlight
-( 9 3 0 0 0 )
-(
-( ( -348.25 -865.25 196 0 0 ) ( -348.75 -865.25 196 0 0.0625 ) ( -349.25 -865.25 196 0 0.125 ) )
-( ( -348.5428466797 -1040.29296875 196 1.3730469942 0 ) ( -348.896484375 -1040.646484375 196 1.3730469942 0.0625 ) ( -349.25 -1041 196 1.3730469942 0.125 ) )
-( ( -177.5 -1040 196 2.7148439884 0 ) ( -177.5 -1040.5 196 2.7148439884 0.0625 ) ( -177.5 -1041 196 2.7148439884 0.125 ) )
-( ( -6.4571528435 -1040.29296875 196 4.0566411018 0 ) ( -6.1035161018 -1040.646484375 196 4.0566411018 0.0625 ) ( -5.75 -1041 196 4.0566411018 0.125 ) )
-( ( -6.75 -865.25 196 5.4296879768 0 ) ( -6.25 -865.25 196 5.4296879768 0.0625 ) ( -5.75 -865.25 196 5.4296879768 0.125 ) )
-( ( -6.4571528435 -690.2070922852 196 6.8027338982 0 ) ( -6.1035161018 -689.853515625 196 6.8027338982 0.0625 ) ( -5.75 -689.5 196 6.8027338982 0.125 ) )
-( ( -177.5 -690.5 196 8.14453125 0 ) ( -177.5 -690 196 8.14453125 0.0625 ) ( -177.5 -689.5 196 8.14453125 0.125 ) )
-( ( -348.5428466797 -690.2070922852 196 9.486328125 0 ) ( -348.896484375 -689.853515625 196 9.486328125 0.0625 ) ( -349.25 -689.5 196 9.486328125 0.125 ) )
-( ( -348.25 -865.25 196 10.859375 0 ) ( -348.75 -865.25 196 10.859375 0.0625 ) ( -349.25 -865.25 196 10.859375 0.125 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-evil8_lights/e8minitrimlight
-( 9 3 0 0 0 )
-(
-( ( -348.25 -865.25 209 0.0039059999 -0.25 ) ( -348.25 -865.25 202.5 0.0039059999 0.5625 ) ( -348.25 -865.25 196 0.0039059999 1.375 ) )
-( ( -348.5428466797 -1040.29296875 209 1.3769530058 -0.25 ) ( -348.5428466797 -1040.29296875 202.5 1.3769530058 0.5625 ) ( -348.5428466797 -1040.29296875 196 1.3769530058 1.375 ) )
-( ( -177.5 -1040 209 2.71875 -0.25 ) ( -177.5 -1040 202.5 2.71875 0.5625 ) ( -177.5 -1040 196 2.71875 1.375 ) )
-( ( -6.4571528435 -1040.29296875 209 4.060546875 -0.25 ) ( -6.4571528435 -1040.29296875 202.5 4.060546875 0.5625 ) ( -6.4571528435 -1040.29296875 196 4.060546875 1.375 ) )
-( ( -6.75 -865.25 209 5.4335942268 -0.25 ) ( -6.75 -865.25 202.5 5.4335942268 0.5625 ) ( -6.75 -865.25 196 5.4335942268 1.375 ) )
-( ( -6.4571528435 -690.2070922852 209 6.8066411018 -0.25 ) ( -6.4571528435 -690.2070922852 202.5 6.8066411018 0.5625 ) ( -6.4571528435 -690.2070922852 196 6.8066411018 1.375 ) )
-( ( -177.5 -690.5 209 8.1484384537 -0.25 ) ( -177.5 -690.5 202.5 8.1484384537 0.5625 ) ( -177.5 -690.5 196 8.1484384537 1.375 ) )
-( ( -348.5428466797 -690.2070922852 209 9.490234375 -0.25 ) ( -348.5428466797 -690.2070922852 202.5 9.490234375 0.5625 ) ( -348.5428466797 -690.2070922852 196 9.490234375 1.375 ) )
-( ( -348.25 -865.25 209 10.86328125 -0.25 ) ( -348.25 -865.25 202.5 10.86328125 0.5625 ) ( -348.25 -865.25 196 10.86328125 1.375 ) )
-)
-}
-}
-// brush 3
-{
-patchDef2
-{
-evil8_lights/e8minitrimlight
-( 9 3 0 0 0 )
-(
-( ( -349.25 -865.25 196 0.0039059999 1.375 ) ( -349.25 -865.25 202.5 0.0039059999 0.5625 ) ( -349.25 -865.25 209 0.0039059999 -0.25 ) )
-( ( -349.25 -1041 196 1.3769530058 1.375 ) ( -349.25 -1041 202.5 1.3769530058 0.5625 ) ( -349.25 -1041 209 1.3769530058 -0.25 ) )
-( ( -177.5 -1041 196 2.71875 1.375 ) ( -177.5 -1041 202.5 2.71875 0.5625 ) ( -177.5 -1041 209 2.71875 -0.25 ) )
-( ( -5.75 -1041 196 4.060546875 1.375 ) ( -5.75 -1041 202.5 4.060546875 0.5625 ) ( -5.75 -1041 209 4.060546875 -0.25 ) )
-( ( -5.75 -865.25 196 5.4335942268 1.375 ) ( -5.75 -865.25 202.5 5.4335942268 0.5625 ) ( -5.75 -865.25 209 5.4335942268 -0.25 ) )
-( ( -5.75 -689.5 196 6.8066411018 1.375 ) ( -5.75 -689.5 202.5 6.8066411018 0.5625 ) ( -5.75 -689.5 209 6.8066411018 -0.25 ) )
-( ( -177.5 -689.5 196 8.1484384537 1.375 ) ( -177.5 -689.5 202.5 8.1484384537 0.5625 ) ( -177.5 -689.5 209 8.1484384537 -0.25 ) )
-( ( -349.25 -689.5 196 9.490234375 1.375 ) ( -349.25 -689.5 202.5 9.490234375 0.5625 ) ( -349.25 -689.5 209 9.490234375 -0.25 ) )
-( ( -349.25 -865.25 196 10.86328125 1.375 ) ( -349.25 -865.25 202.5 10.86328125 0.5625 ) ( -349.25 -865.25 209 10.86328125 -0.25 ) )
-)
-}
-}
-}
-// entity 133
-{
-"classname" "light"
-"_color" "0.668241 0.881508 1.000000"
-"light" "50"
-"origin" "-72 -716 153"
-}
-// entity 134
-{
-"classname" "light"
-"_color" "0.668241 0.881508 1.000000"
-"light" "50"
-"origin" "-329 -764 153"
-}
-// entity 135
-{
-"classname" "light"
-"_color" "0.668241 0.881508 1.000000"
-"light" "50"
-"origin" "-33 -965 153"
-}
-// entity 136
-{
-"classname" "light"
-"_color" "1.000000 0.930311 0.704394"
-"light" "100"
-"origin" "0 -826 202"
-}
-// entity 137
-{
-"classname" "light"
-"_color" "1.000000 0.930311 0.704394"
-"light" "100"
-"origin" "-203 -681 202"
-}
-// entity 138
-{
-"classname" "light"
-"_color" "1.000000 0.930311 0.704394"
-"light" "100"
-"origin" "-106 -1042 202"
-}
-// entity 139
-{
-"classname" "light"
-"_color" "1.000000 0.930311 0.704394"
-"light" "100"
-"origin" "-357 -876 202"
-}
-// entity 140
-{
-"classname" "light"
-"_color" "0.974271 1.000000 0.716828"
-"light" "50"
-"origin" "3335 -828 204"
-}
-// entity 141
-{
-"classname" "light"
-"_color" "0.974271 1.000000 0.716828"
-"light" "50"
-"origin" "3338 4 204"
-}
-// entity 142
-{
-"classname" "light"
-"_color" "0.974271 1.000000 0.716828"
-"light" "50"
-"origin" "2556 544 204"
-}
-// entity 143
-{
-"classname" "light"
-"_color" "0.974271 1.000000 0.716828"
-"light" "50"
-"origin" "2863 510 204"
-}
-// entity 144
-{
-"classname" "light"
-"_color" "0.974271 1.000000 0.716828"
-"light" "50"
-"origin" "3104 426 204"
-}
-// entity 145
-{
-"classname" "light"
-"_color" "0.974271 1.000000 0.716828"
-"light" "50"
-"origin" "3270 272 204"
-}
-// entity 146
-{
-"classname" "light"
-"_color" "0.974271 1.000000 0.716828"
-"light" "50"
-"origin" "3257 -197 204"
-}
-// entity 147
-{
-"classname" "light"
-"_color" "0.974271 1.000000 0.716828"
-"light" "50"
-"origin" "3078 -252 204"
-}
-// entity 148
-{
-"classname" "light"
-"_color" "0.974271 1.000000 0.716828"
-"light" "50"
-"origin" "3025 -381 204"
-}
-// entity 149
-{
-"classname" "light"
-"_color" "0.974271 1.000000 0.716828"
-"light" "50"
-"origin" "3091 -528 204"
-}
-// entity 150
-{
-"classname" "light"
-"_color" "0.974271 1.000000 0.716828"
-"light" "50"
-"origin" "2552 -1315 204"
-}
-// entity 151
-{
-"classname" "light"
-"_color" "0.974271 1.000000 0.716828"
-"light" "50"
-"origin" "2846 -1295 204"
-}
-// entity 152
-{
-"classname" "light"
-"_color" "0.974271 1.000000 0.716828"
-"light" "50"
-"origin" "3090 -1213 204"
-}
-// entity 153
-{
-"classname" "light"
-"_color" "0.974271 1.000000 0.716828"
-"light" "50"
-"origin" "3252 -1067 204"
-}
-// entity 154
-{
-"classname" "light"
-"_color" "0.974271 1.000000 0.716828"
-"light" "50"
-"origin" "3257 -571 204"
-}
-// entity 155
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-evil8_lights/e8minitrimlight
-( 3 3 0 0 0 )
-(
-( ( 2547.25 552 208 0 1 ) ( 2547.25 552 204 0 0.5 ) ( 2547.25 552 200 0 0 ) )
-( ( 2547.25 553 208 0.0078130001 1 ) ( 2547.25 553 204 0.0078130001 0.5 ) ( 2547.25 553 200 0.0078130001 0 ) )
-( ( 2547.25 554 208 0.015625 1 ) ( 2547.25 554 204 0.015625 0.5 ) ( 2547.25 554 200 0.015625 0 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-evil8_lights/e8minitrimlight
-( 3 3 0 0 0 )
-(
-( ( 2547.25 552 200 0 0 ) ( 2547.25 552 204 0 0.5 ) ( 2547.25 552 208 0 1 ) )
-( ( 3355.25 552 200 6.3125 0 ) ( 3355.25 552 204 6.3125 0.5 ) ( 3355.25 552 208 6.3125 1 ) )
-( ( 3355.25 0 200 10.625 0 ) ( 3355.25 0 204 10.625 0.5 ) ( 3355.25 0 208 10.625 1 ) )
-)
-}
-}
-}
-// entity 156
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-evil8_lights/e8minitrimlight
-( 3 3 0 0 0 )
-(
-( ( 2547.25 -1320 200 0 0 ) ( 2547.25 -1320 204 0 0.5 ) ( 2547.25 -1320 208 0 1 ) )
-( ( 2547.25 -1321 200 0.0078130001 0 ) ( 2547.25 -1321 204 0.0078130001 0.5 ) ( 2547.25 -1321 208 0.0078130001 1 ) )
-( ( 2547.25 -1322 200 0.015625 0 ) ( 2547.25 -1322 204 0.015625 0.5 ) ( 2547.25 -1322 208 0.015625 1 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-evil8_lights/e8minitrimlight
-( 3 3 0 0 0 )
-(
-( ( 2547.25 -1320 208 0 1 ) ( 2547.25 -1320 204 0 0.5 ) ( 2547.25 -1320 200 0 0 ) )
-( ( 3355.25 -1320 208 6.3125 1 ) ( 3355.25 -1320 204 6.3125 0.5 ) ( 3355.25 -1320 200 6.3125 0 ) )
-( ( 3355.25 -768 208 10.625 1 ) ( 3355.25 -768 204 10.625 0.5 ) ( 3355.25 -768 200 10.625 0 ) )
-)
-}
-}
-}
-// entity 157
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-evil8_lights/e8minitrimlight
-( 3 3 0 0 0 )
-(
-( ( 3187.25 -232 208 0 1 ) ( 3187.25 -232 204 0 0.5 ) ( 3187.25 -232 200 0 0 ) )
-( ( 3355.25 -232 208 1.3125 1 ) ( 3355.25 -232 204 1.3125 0.5 ) ( 3355.25 -232 200 1.3125 0 ) )
-( ( 3355.25 0 208 3.125 1 ) ( 3355.25 0 204 3.125 0.5 ) ( 3355.25 0 200 3.125 0 ) )
-)
-}
-}
-}
-// entity 158
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-evil8_lights/e8minitrimlight
-( 3 3 0 0 0 )
-(
-( ( 3187.25 -536 208 0 0.25 ) ( 3187.25 -535 208 0 0.125 ) ( 3187.25 -534 208 0 0 ) )
-( ( 3355.25 -536 208 1.3125 0.25 ) ( 3355.95703125 -535.2929077148 208 1.3125 0.125 ) ( 3356.6640625 -534.5858154297 208 1.3125 0 ) )
-( ( 3355.25 -768 208 3.125 0.25 ) ( 3356.25 -768 208 3.125 0.125 ) ( 3357.25 -768 208 3.125 0 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-evil8_lights/e8minitrimlight
-( 3 3 0 0 0 )
-(
-( ( 3187.25 -536 208 0 0 ) ( 3187.25 -536 204 0 0.5 ) ( 3187.25 -536 200 0 1 ) )
-( ( 3187.25 -535 208 0.0078130001 0 ) ( 3187.25 -535 204 0.0078130001 0.5 ) ( 3187.25 -535 200 0.0078130001 1 ) )
-( ( 3187.25 -534 208 0.015625 0 ) ( 3187.25 -534 204 0.015625 0.5 ) ( 3187.25 -534 200 0.015625 1 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-evil8_lights/e8minitrimlight
-( 3 3 0 0 0 )
-(
-( ( 3187.25 -536 200 0 1 ) ( 3187.25 -536 204 0 0.5 ) ( 3187.25 -536 208 0 0 ) )
-( ( 3355.25 -536 200 1.3125 1 ) ( 3355.25 -536 204 1.3125 0.5 ) ( 3355.25 -536 208 1.3125 0 ) )
-( ( 3355.25 -768 200 3.125 1 ) ( 3355.25 -768 204 3.125 0.5 ) ( 3355.25 -768 208 3.125 0 ) )
-)
-}
-}
-}
-// entity 159
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 3035.25 -384 200 0 0.0625 ) ( 3035.25 -384 204 0 0.03125 ) ( 3035.25 -384 208 0 0 ) )
-( ( 3036.25 -384 200 0.0078130001 0.0625 ) ( 3036.25 -384 204 0.0078130001 0.03125 ) ( 3036.25 -384 208 0.0078130001 0 ) )
-( ( 3037.25 -384 200 0.015625 0.0625 ) ( 3037.25 -384 204 0.015625 0.03125 ) ( 3037.25 -384 208 0.015625 0 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-evil8_lights/e8minitrimlight
-( 3 3 0 0 0 )
-(
-( ( 3035.25 -384 208 0 -1 ) ( 3035.25 -384 204 0 -0.5 ) ( 3035.25 -384 200 0 0 ) )
-( ( 3035.25 -232 208 -1.1875 -1 ) ( 3035.25 -232 204 -1.1875 -0.5 ) ( 3035.25 -232 200 -1.1875 0 ) )
-( ( 3187.25 -232 208 -2.375 -1 ) ( 3187.25 -232 204 -2.375 -0.5 ) ( 3187.25 -232 200 -2.375 0 ) )
-)
-}
-}
-}
-// entity 160
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 3035.25 -384 208 0 0.25 ) ( 3036.25 -384 208 0 0.125 ) ( 3037.25 -384 208 0 0 ) )
-( ( 3035.25 -536 208 1.1875 0.25 ) ( 3036.25 -535 208 1.1875 0.125 ) ( 3036.25 -535 208 1.1875 0 ) )
-( ( 3187.25 -536 208 2.375 0.25 ) ( 3187.25 -535 208 2.375 0.125 ) ( 3187.25 -534 208 2.375 0 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 3187.25 -536 200 0 1 ) ( 3187.25 -536 204 0 0.5 ) ( 3187.25 -536 208 0 0 ) )
-( ( 3187.25 -535 200 0.0078130001 1 ) ( 3187.25 -535 204 0.0078130001 0.5 ) ( 3187.25 -535 208 0.0078130001 0 ) )
-( ( 3187.25 -534 200 0.015625 1 ) ( 3187.25 -534 204 0.015625 0.5 ) ( 3187.25 -534 208 0.015625 0 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 3035.25 -384 208 0 0 ) ( 3035.25 -384 204 0 0.5 ) ( 3035.25 -384 200 0 1 ) )
-( ( 3036.25 -384 208 0.0078130001 0 ) ( 3036.25 -384 204 0.0078130001 0.5 ) ( 3036.25 -384 200 0.0078130001 1 ) )
-( ( 3037.25 -384 208 0.015625 0 ) ( 3037.25 -384 204 0.015625 0.5 ) ( 3037.25 -384 200 0.015625 1 ) )
-)
-}
-}
-// brush 3
-{
-patchDef2
-{
-evil8_lights/e8minitrimlight
-( 3 3 0 0 0 )
-(
-( ( 3035.25 -384 200 0 1 ) ( 3035.25 -384 204 0 0.5 ) ( 3035.25 -384 208 0 0 ) )
-( ( 3035.25 -536 200 1.1875 1 ) ( 3035.25 -536 204 1.1875 0.5 ) ( 3035.25 -536 208 1.1875 0 ) )
-( ( 3187.25 -536 200 2.375 1 ) ( 3187.25 -536 204 2.375 0.5 ) ( 3187.25 -536 208 2.375 0 ) )
-)
-}
-}
-}
-// entity 161
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 2547.25 576 144 0 0.0625 ) ( 2547.25 576 144 0 0.03125 ) ( 2547.25 568 144 0 0 ) )
-( ( 3379.25 576 144 6.5 0.0625 ) ( 3379.25 576 144 6.5 0.03125 ) ( 3371.25 568 144 6.5 0 ) )
-( ( 3379.25 0 144 11 0.0625 ) ( 3371.25 0 144 11 0.03125 ) ( 3371.25 0 144 11 0 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 2547.25 544 192 0 0 ) ( 2547.25 552 200 0 0.03125 ) ( 2547.25 552 200 0 0.0625 ) )
-( ( 3355.25 552 192 6.3125 0 ) ( 3355.25 552 200 6.3125 0.03125 ) ( 3355.25 552 200 6.3125 0.0625 ) )
-( ( 3347.25 0 192 10.625 0 ) ( 3355.25 0 200 10.625 0.03125 ) ( 3355.25 0 200 10.625 0.0625 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 2547.25 576 144 0 0 ) ( 2547.25 576 168 0 0.21875 ) ( 2547.25 552 200 0 0.5068609715 ) )
-( ( 2547.25 576 144 0.03125 0 ) ( 2547.25 576 168 0.03125 0.21875 ) ( 2547.25 552 200 0.03125 0.5068609715 ) )
-( ( 2547.25 568 144 0.0625 0 ) ( 2547.25 568 168 0.0625 0.21875 ) ( 2547.25 544 192 0.0625 0.5068609715 ) )
-)
-}
-}
-// brush 3
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 2547.25 568 144 0 0 ) ( 2547.25 568 168 0 0.21875 ) ( 2547.25 544 192 0 0.5068609715 ) )
-( ( 3371.25 568 144 6.3125 0 ) ( 3371.25 568 168 6.3125 0.21875 ) ( 3355.25 552 192 6.3125 0.5068609715 ) )
-( ( 3371.25 0 144 10.625 0 ) ( 3371.25 0 168 10.625 0.21875 ) ( 3347.25 0 192 10.625 0.5068609715 ) )
-)
-}
-}
-// brush 4
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 3355.25 0 200 0 0.5068609715 ) ( 3379.25 0 168 0 0.21875 ) ( 3379.25 0 144 0 0 ) )
-( ( 3355.25 0 200 0.03125 0.5068609715 ) ( 3379.25 0 168 0.03125 0.21875 ) ( 3371.25 0 144 0.03125 0 ) )
-( ( 3347.25 0 192 0.0625 0.5068609715 ) ( 3371.25 0 168 0.0625 0.21875 ) ( 3371.25 0 144 0.0625 0 ) )
-)
-}
-}
-}
-// entity 162
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 2547.25 -1336 144 0 0 ) ( 2547.25 -1344 144 0 0.03125 ) ( 2547.25 -1344 144 0 0.0625 ) )
-( ( 3371.25 -1336 144 6.5 0 ) ( 3379.25 -1344 144 6.5 0.03125 ) ( 3379.25 -1344 144 6.5 0.0625 ) )
-( ( 3371.25 -768 144 11 0 ) ( 3371.25 -768 144 11 0.03125 ) ( 3379.25 -768 144 11 0.0625 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 2547.25 -1320 200 0 0.0625 ) ( 2547.25 -1320 200 0 0.03125 ) ( 2547.25 -1312 192 0 0 ) )
-( ( 3355.25 -1320 200 6.3125 0.0625 ) ( 3355.25 -1320 200 6.3125 0.03125 ) ( 3355.25 -1320 192 6.3125 0 ) )
-( ( 3355.25 -768 200 10.625 0.0625 ) ( 3355.25 -768 200 10.625 0.03125 ) ( 3347.25 -768 192 10.625 0 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 2547.25 -1320 200 0 0.5068609715 ) ( 2547.25 -1344 168 0 0.21875 ) ( 2547.25 -1344 144 0 0 ) )
-( ( 2547.25 -1320 200 0.03125 0.5068609715 ) ( 2547.25 -1344 168 0.03125 0.21875 ) ( 2547.25 -1344 144 0.03125 0 ) )
-( ( 2547.25 -1312 192 0.0625 0.5068609715 ) ( 2547.25 -1336 168 0.0625 0.21875 ) ( 2547.25 -1336 144 0.0625 0 ) )
-)
-}
-}
-// brush 3
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 2547.25 -1312 192 0 0.5068609715 ) ( 2547.25 -1336 168 0 0.21875 ) ( 2547.25 -1336 144 0 0 ) )
-( ( 3355.25 -1320 192 6.3125 0.5068609715 ) ( 3371.25 -1336 168 6.3125 0.21875 ) ( 3371.25 -1336 144 6.3125 0 ) )
-( ( 3347.25 -768 192 10.625 0.5068609715 ) ( 3371.25 -768 168 10.625 0.21875 ) ( 3371.25 -768 144 10.625 0 ) )
-)
-}
-}
-}
-// entity 163
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 3187.25 -536 88 0 0.0625 ) ( 3187.25 -536 88 0 0.03125 ) ( 3187.25 -544 96 0 0 ) )
-( ( 3355.25 -536 88 1.3125 0.0625 ) ( 3355.25 -536 88 1.3125 0.03125 ) ( 3355.25 -536 96 1.3125 0 ) )
-( ( 3355.25 -768 88 3.125 0.0625 ) ( 3355.25 -768 88 3.125 0.03125 ) ( 3347.25 -768 96 3.125 0 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 3379.25 -768 144 0 0.5068609715 ) ( 3379.25 -768 120 0 0.2881110013 ) ( 3355.25 -768 88 0 0 ) )
-( ( 3371.25 -768 144 0.03125 0.5068609715 ) ( 3379.25 -768 120 0.03125 0.2881110013 ) ( 3355.25 -768 88 0.03125 0 ) )
-( ( 3371.25 -768 144 0.0625 0.5068609715 ) ( 3371.25 -768 120 0.0625 0.2881110013 ) ( 3347.25 -768 96 0.0625 0 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 3187.25 -544 96 0 0 ) ( 3187.25 -520 120 0 0.2881110013 ) ( 3187.25 -520 144 0 0.5068609715 ) )
-( ( 3355.25 -536 96 1.5 0 ) ( 3371.25 -520 120 1.5 0.2881110013 ) ( 3371.25 -520 144 1.5 0.5068609715 ) )
-( ( 3347.25 -768 96 3.5 0 ) ( 3371.25 -768 120 3.5 0.2881110013 ) ( 3371.25 -768 144 3.5 0.5068609715 ) )
-)
-}
-}
-}
-// entity 164
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 3187.25 -544 192 0 0 ) ( 3187.25 -536 200 0 0.03125 ) ( 3187.25 -536 200 0 0.0625 ) )
-( ( 3355.25 -536 192 1.3125 0 ) ( 3355.25 -536 200 1.3125 0.03125 ) ( 3355.25 -536 200 1.3125 0.0625 ) )
-( ( 3347.25 -768 192 3.125 0 ) ( 3355.25 -768 200 3.125 0.03125 ) ( 3355.25 -768 200 3.125 0.0625 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 3187.25 -520 144 0 0.5068609715 ) ( 3187.25 -520 168 0 0.2881110013 ) ( 3187.25 -544 192 0 0 ) )
-( ( 3371.25 -520 144 1.5 0.5068609715 ) ( 3371.25 -520 168 1.5 0.2881110013 ) ( 3355.25 -536 192 1.5 0 ) )
-( ( 3371.25 -768 144 3.5 0.5068609715 ) ( 3371.25 -768 168 3.5 0.2881110013 ) ( 3347.25 -768 192 3.5 0 ) )
-)
-}
-}
-}
-// entity 165
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 3187.25 -224 96 0 0 ) ( 3187.25 -232 88 0 0.03125 ) ( 3187.25 -232 88 0 0.0625 ) )
-( ( 3355.25 -232 96 1.3125 0 ) ( 3355.25 -232 88 1.3125 0.03125 ) ( 3355.25 -232 88 1.3125 0.0625 ) )
-( ( 3347.25 0 96 3.125 0 ) ( 3355.25 0 88 3.125 0.03125 ) ( 3355.25 0 88 3.125 0.0625 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 3187.25 -248 144 0 0.5068609715 ) ( 3187.25 -248 120 0 0.2881110013 ) ( 3187.25 -224 96 0 0 ) )
-( ( 3371.25 -248 144 1.5 0.5068609715 ) ( 3371.25 -248 120 1.5 0.2881110013 ) ( 3355.25 -232 96 1.5 0 ) )
-( ( 3371.25 0 144 3.5 0.5068609715 ) ( 3371.25 0 120 3.5 0.2881110013 ) ( 3347.25 0 96 3.5 0 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 3355.25 0 88 0 0 ) ( 3379.25 0 120 0 0.2881110013 ) ( 3379.25 0 144 0 0.5068609715 ) )
-( ( 3355.25 0 88 0.03125 0 ) ( 3379.25 0 120 0.03125 0.2881110013 ) ( 3371.25 0 144 0.03125 0.5068609715 ) )
-( ( 3347.25 0 96 0.0625 0 ) ( 3371.25 0 120 0.0625 0.2881110013 ) ( 3371.25 0 144 0.0625 0.5068609715 ) )
-)
-}
-}
-}
-// entity 166
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 3187.25 -232 200 0 0.0625 ) ( 3187.25 -232 200 0 0.03125 ) ( 3187.25 -224 192 0 0 ) )
-( ( 3355.25 -232 200 1.3125 0.0625 ) ( 3355.25 -232 200 1.3125 0.03125 ) ( 3355.25 -232 192 1.3125 0 ) )
-( ( 3355.25 0 200 3.125 0.0625 ) ( 3355.25 0 200 3.125 0.03125 ) ( 3347.25 0 192 3.125 0 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 3187.25 -224 192 0 0 ) ( 3187.25 -248 168 0 0.2881110013 ) ( 3187.25 -248 144 0 0.5068609715 ) )
-( ( 3355.25 -232 192 1.5 0 ) ( 3371.25 -248 168 1.5 0.2881110013 ) ( 3371.25 -248 144 1.5 0.5068609715 ) )
-( ( 3347.25 0 192 3.5 0 ) ( 3371.25 0 168 3.5 0.2881110013 ) ( 3371.25 0 144 3.5 0.5068609715 ) )
-)
-}
-}
-}
-// entity 167
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 3027.25 -384 96 0 0 ) ( 3035.25 -384 88 0 0.03125 ) ( 3035.25 -384 88 0 0.0625 ) )
-( ( 3035.25 -232 96 1.1875 0 ) ( 3035.25 -232 88 1.1875 0.03125 ) ( 3035.25 -232 88 1.1875 0.0625 ) )
-( ( 3187.25 -224 96 2.375 0 ) ( 3187.25 -232 88 2.375 0.03125 ) ( 3187.25 -232 88 2.375 0.0625 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 3051.25 -384 144 0 0.5 ) ( 3051.25 -384 120 0 0.3125 ) ( 3027.25 -384 96 0 0 ) )
-( ( 3051.25 -248 144 1 0.5 ) ( 3051.25 -248 120 1 0.3125 ) ( 3035.25 -232 96 1 0 ) )
-( ( 3187.25 -248 144 2 0.5 ) ( 3187.25 -248 120 2 0.3125 ) ( 3187.25 -224 96 2 0 ) )
-)
-}
-}
-}
-// entity 168
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 3035.25 -384 88 0 0.0625 ) ( 3035.25 -384 88 0 0.03125 ) ( 3027.25 -384 96 0 0 ) )
-( ( 3035.25 -536 88 1.1875 0.0625 ) ( 3035.25 -536 88 1.1875 0.03125 ) ( 3035.25 -536 96 1.1875 0 ) )
-( ( 3187.25 -536 88 2.375 0.0625 ) ( 3187.25 -536 88 2.375 0.03125 ) ( 3187.25 -544 96 2.375 0 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 3027.25 -384 96 0 0 ) ( 3051.25 -384 120 0 0.3125 ) ( 3051.25 -384 144 0 0.5 ) )
-( ( 3035.25 -536 96 1 0 ) ( 3051.25 -520 120 1 0.3125 ) ( 3051.25 -520 144 1 0.5 ) )
-( ( 3187.25 -544 96 2 0 ) ( 3187.25 -520 120 2 0.3125 ) ( 3187.25 -520 144 2 0.5 ) )
-)
-}
-}
-}
-// entity 169
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 3035.25 -384 200 0 0.0625 ) ( 3035.25 -384 200 0 0.03125 ) ( 3027.25 -384 192 0 0 ) )
-( ( 3035.25 -232 200 1.1875 0.0625 ) ( 3035.25 -232 200 1.1875 0.03125 ) ( 3035.25 -232 192 1.1875 0 ) )
-( ( 3187.25 -232 200 2.375 0.0625 ) ( 3187.25 -232 200 2.375 0.03125 ) ( 3187.25 -224 192 2.375 0 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 3027.25 -384 192 0 0 ) ( 3051.25 -384 168 0 0.3125 ) ( 3051.25 -384 144 0 0.5 ) )
-( ( 3035.25 -232 192 1 0 ) ( 3051.25 -248 168 1 0.3125 ) ( 3051.25 -248 144 1 0.5 ) )
-( ( 3187.25 -224 192 2 0 ) ( 3187.25 -248 168 2 0.3125 ) ( 3187.25 -248 144 2 0.5 ) )
-)
-}
-}
-}
-// entity 170
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 3027.25 -384 192 0 0 ) ( 3035.25 -384 200 0 0.03125 ) ( 3035.25 -384 200 0 0.0625 ) )
-( ( 3035.25 -536 192 1.1875 0 ) ( 3035.25 -536 200 1.1875 0.03125 ) ( 3035.25 -536 200 1.1875 0.0625 ) )
-( ( 3187.25 -544 192 2.375 0 ) ( 3187.25 -536 200 2.375 0.03125 ) ( 3187.25 -536 200 2.375 0.0625 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 3051.25 -384 144 0 0.5 ) ( 3051.25 -384 168 0 0.3125 ) ( 3027.25 -384 192 0 0 ) )
-( ( 3051.25 -520 144 1 0.5 ) ( 3051.25 -520 168 1 0.3125 ) ( 3035.25 -536 192 1 0 ) )
-( ( 3187.25 -520 144 2 0.5 ) ( 3187.25 -520 168 2 0.3125 ) ( 3187.25 -544 192 2 0 ) )
-)
-}
-}
-}
-// entity 171
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 2547.25 -1320 88 0 0.0625 ) ( 2547.25 -1320 88 0 0.03125 ) ( 2547.25 -1312 80 0 0 ) )
-( ( 3355.25 -1320 88 6.3125 0.0625 ) ( 3355.25 -1320 88 6.3125 0.03125 ) ( 3355.25 -1320 80 6.3125 0 ) )
-( ( 3355.25 -768 88 10.625 0.0625 ) ( 3355.25 -768 88 10.625 0.03125 ) ( 3347.25 -768 80 10.625 0 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 2547.25 -1320 88 0 0.5068609715 ) ( 2547.25 -1344 56 0 0.21875 ) ( 2547.25 -1344 32 0 0 ) )
-( ( 2547.25 -1320 88 0.03125 0.5068609715 ) ( 2547.25 -1344 56 0.03125 0.21875 ) ( 2547.25 -1344 32 0.03125 0 ) )
-( ( 2547.25 -1312 80 0.0625 0.5068609715 ) ( 2547.25 -1336 56 0.0625 0.21875 ) ( 2547.25 -1336 32 0.0625 0 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 2547.25 -1312 80 0 0.5068609715 ) ( 2547.25 -1336 56 0 0.21875 ) ( 2547.25 -1336 32 0 0 ) )
-( ( 3355.25 -1320 80 6.3125 0.5068609715 ) ( 3371.25 -1336 56 6.3125 0.21875 ) ( 3371.25 -1336 32 6.3125 0 ) )
-( ( 3347.25 -768 80 10.625 0.5068609715 ) ( 3371.25 -768 56 10.625 0.21875 ) ( 3371.25 -768 32 10.625 0 ) )
-)
-}
-}
-}
-// entity 172
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 3187.25 -544 80 0 0 ) ( 3187.25 -536 88 0 0.03125 ) ( 3187.25 -536 88 0 0.0625 ) )
-( ( 3355.25 -536 80 1.3125 0 ) ( 3355.25 -536 88 1.3125 0.03125 ) ( 3355.25 -536 88 1.3125 0.0625 ) )
-( ( 3347.25 -768 80 3.125 0 ) ( 3355.25 -768 88 3.125 0.03125 ) ( 3355.25 -768 88 3.125 0.0625 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 3187.25 -520 32 0 0.5068609715 ) ( 3187.25 -520 56 0 0.2881110013 ) ( 3187.25 -544 80 0 0 ) )
-( ( 3371.25 -520 32 1.5 0.5068609715 ) ( 3371.25 -520 56 1.5 0.2881110013 ) ( 3355.25 -536 80 1.5 0 ) )
-( ( 3371.25 -768 32 3.5 0.5068609715 ) ( 3371.25 -768 56 3.5 0.2881110013 ) ( 3347.25 -768 80 3.5 0 ) )
-)
-}
-}
-}
-// entity 173
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 3027.25 -384 80 0 0 ) ( 3035.25 -384 88 0 0.03125 ) ( 3035.25 -384 88 0 0.0625 ) )
-( ( 3035.25 -536 80 1.1875 0 ) ( 3035.25 -536 88 1.1875 0.03125 ) ( 3035.25 -536 88 1.1875 0.0625 ) )
-( ( 3187.25 -544 80 2.375 0 ) ( 3187.25 -536 88 2.375 0.03125 ) ( 3187.25 -536 88 2.375 0.0625 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 3051.25 -384 32 0 0.5 ) ( 3051.25 -384 56 0 0.3125 ) ( 3027.25 -384 80 0 0 ) )
-( ( 3051.25 -520 32 1 0.5 ) ( 3051.25 -520 56 1 0.3125 ) ( 3035.25 -536 80 1 0 ) )
-( ( 3187.25 -520 32 2 0.5 ) ( 3187.25 -520 56 2 0.3125 ) ( 3187.25 -544 80 2 0 ) )
-)
-}
-}
-}
-// entity 174
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 3035.25 -384 88 0 0.0625 ) ( 3035.25 -384 88 0 0.03125 ) ( 3027.25 -384 80 0 0 ) )
-( ( 3035.25 -232 88 1.1875 0.0625 ) ( 3035.25 -232 88 1.1875 0.03125 ) ( 3035.25 -232 80 1.1875 0 ) )
-( ( 3187.25 -232 88 2.375 0.0625 ) ( 3187.25 -232 88 2.375 0.03125 ) ( 3187.25 -224 80 2.375 0 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 3027.25 -384 80 0 0 ) ( 3051.25 -384 56 0 0.3125 ) ( 3051.25 -384 32 0 0.5 ) )
-( ( 3035.25 -232 80 1 0 ) ( 3051.25 -248 56 1 0.3125 ) ( 3051.25 -248 32 1 0.5 ) )
-( ( 3187.25 -224 80 2 0 ) ( 3187.25 -248 56 2 0.3125 ) ( 3187.25 -248 32 2 0.5 ) )
-)
-}
-}
-}
-// entity 175
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 3187.25 -232 88 0 0.0625 ) ( 3187.25 -232 88 0 0.03125 ) ( 3187.25 -224 80 0 0 ) )
-( ( 3355.25 -232 88 1.3125 0.0625 ) ( 3355.25 -232 88 1.3125 0.03125 ) ( 3355.25 -232 80 1.3125 0 ) )
-( ( 3355.25 0 88 3.125 0.0625 ) ( 3355.25 0 88 3.125 0.03125 ) ( 3347.25 0 80 3.125 0 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 3187.25 -224 80 0 0 ) ( 3187.25 -248 56 0 0.2881110013 ) ( 3187.25 -248 32 0 0.5068609715 ) )
-( ( 3355.25 -232 80 1.5 0 ) ( 3371.25 -248 56 1.5 0.2881110013 ) ( 3371.25 -248 32 1.5 0.5068609715 ) )
-( ( 3347.25 0 80 3.5 0 ) ( 3371.25 0 56 3.5 0.2881110013 ) ( 3371.25 0 32 3.5 0.5068609715 ) )
-)
-}
-}
-}
-// entity 176
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 2547.25 544 80 0 0 ) ( 2547.25 552 88 0 0.03125 ) ( 2547.25 552 88 0 0.0625 ) )
-( ( 3355.25 552 80 6.3125 0 ) ( 3355.25 552 88 6.3125 0.03125 ) ( 3355.25 552 88 6.3125 0.0625 ) )
-( ( 3347.25 0 80 10.625 0 ) ( 3355.25 0 88 10.625 0.03125 ) ( 3355.25 0 88 10.625 0.0625 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 2547.25 576 32 0 0 ) ( 2547.25 576 56 0 0.21875 ) ( 2547.25 552 88 0 0.5068609715 ) )
-( ( 2547.25 576 32 0.03125 0 ) ( 2547.25 576 56 0.03125 0.21875 ) ( 2547.25 552 88 0.03125 0.5068609715 ) )
-( ( 2547.25 568 32 0.0625 0 ) ( 2547.25 568 56 0.0625 0.21875 ) ( 2547.25 544 80 0.0625 0.5068609715 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 2547.25 568 32 0 0 ) ( 2547.25 568 56 0 0.21875 ) ( 2547.25 544 80 0 0.5068609715 ) )
-( ( 3371.25 568 32 6.3125 0 ) ( 3371.25 568 56 6.3125 0.21875 ) ( 3355.25 552 80 6.3125 0.5068609715 ) )
-( ( 3371.25 0 32 10.625 0 ) ( 3371.25 0 56 10.625 0.21875 ) ( 3347.25 0 80 10.625 0.5068609715 ) )
-)
-}
-}
-}
-// entity 177
-{
-"classname" "func_group"
-"type" "patchCapped"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( 2563.25 -1056 -48 0 0.6903349757 ) ( 2563.25 -968 -40 0 0 ) ( 2563.25 -968 -40 0 0 ) )
-( ( 2563.25 -1144 -40 0.6903349757 0.6903349757 ) ( 2563.25 -1056.5 -81.5 0.6903349757 0 ) ( 2563.25 -966 -123 0.6903349757 0 ) )
-( ( 2563.25 -1144 -40 0.6903349757 0.6903349757 ) ( 2563.25 -1147 -123 0.6903349757 0 ) ( 2563.25 -1056 -120 0.6903349757 0 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( 2547.25 -968 -40 1.5 8.9375 ) ( 2547.25 -968 -40 1.5 8.9375 ) ( 2543.25 -1056 -48 1.53125 8.25 ) )
-( ( 2506.25 -966 -123 1.8203129768 8.953125 ) ( 2526.75 -1056.5 -81.5 1.6601560116 8.24609375 ) ( 2547.25 -1144 -40 1.5 7.5625 ) )
-( ( 2508.25 -1056 -120 1.8046879768 8.25 ) ( 2506.25 -1147 -123 1.8203129768 7.5390629768 ) ( 2547.25 -1144 -40 1.5 7.5625 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 9 3 0 0 0 )
-(
-( ( 2543.25 -1056 -48 0 0.15625 ) ( 2555.25 -1056 -48 0 0.0625 ) ( 2563.25 -1056 -48 0 0 ) )
-( ( 2547.25 -1144 -40 0.691042006 0.15625 ) ( 2555.25 -1144 -40 0.691042006 0.0625 ) ( 2563.25 -1144 -40 0.691042006 0 ) )
-( ( 2547.25 -1144 -40 0.691042006 0.15625 ) ( 2555.25 -1144 -40 0.691042006 0.0625 ) ( 2563.25 -1144 -40 0.691042006 0 ) )
-( ( 2506.25 -1147 -123 1.4146579504 0.15625 ) ( 2555.25 -1147 -123 1.4146579504 0.0625 ) ( 2563.25 -1147 -123 1.4146579504 0 ) )
-( ( 2508.25 -1056 -120 2.1261539459 0.15625 ) ( 2555.25 -1056 -120 2.1261539459 0.0625 ) ( 2563.25 -1056 -120 2.1261539459 0 ) )
-( ( 2506.25 -966 -123 2.8298430443 0.15625 ) ( 2555.25 -966 -123 2.8298430443 0.0625 ) ( 2563.25 -966 -123 2.8298430443 0 ) )
-( ( 2547.25 -968 -40 3.5532479286 0.15625 ) ( 2555.25 -968 -40 3.5532479286 0.0625 ) ( 2563.25 -968 -40 3.5532479286 0 ) )
-( ( 2547.25 -968 -40 3.5532479286 0.15625 ) ( 2555.25 -968 -40 3.5532479286 0.0625 ) ( 2563.25 -968 -40 3.5532479286 0 ) )
-( ( 2543.25 -1056 -48 4.244289875 0.15625 ) ( 2555.25 -1056 -48 4.244289875 0.0625 ) ( 2563.25 -1056 -48 4.244289875 0 ) )
-)
-}
-}
-}
-// entity 178
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 9 3 0 0 0 )
-(
-( ( 2471.25 -1056 -40 0 0.0625 ) ( 2471.25 -1056 -44 0 0.03125 ) ( 2471.25 -1056 -48 0 0 ) )
-( ( 2471.25 -960 -40 0.75 0.0625 ) ( 2471.25 -962.8283691406 -42.8284225464 0.75 0.03125 ) ( 2471.25 -965.6568603516 -45.6568450928 0.75 0 ) )
-( ( 2291.25 -960 -40 2.15625 0.0625 ) ( 2291.25 -964 -40 2.15625 0.03125 ) ( 2291.25 -968 -40 2.15625 0 ) )
-( ( 2291.25 -960 -128 2.84375 0.0625 ) ( 2291.25 -962.8283691406 -125.1715698242 2.84375 0.03125 ) ( 2291.25 -965.6568603516 -122.3431396484 2.84375 0 ) )
-( ( 2291.25 -1056 -128 3.59375 0.0625 ) ( 2291.25 -1056 -124 3.59375 0.03125 ) ( 2291.25 -1056 -120 3.59375 0 ) )
-( ( 2291.25 -1152 -128 4.34375 0.0625 ) ( 2291.25 -1149.1716308594 -125.1715698242 4.34375 0.03125 ) ( 2291.25 -1146.3431396484 -122.3431396484 4.34375 0 ) )
-( ( 2291.25 -1152 -40 5.03125 0.0625 ) ( 2291.25 -1148 -40 5.03125 0.03125 ) ( 2291.25 -1144 -40 5.03125 0 ) )
-( ( 2471.25 -1152 -40 6.4375 0.0625 ) ( 2471.25 -1149.1716308594 -42.8284225464 6.4375 0.03125 ) ( 2471.25 -1146.3431396484 -45.6568450928 6.4375 0 ) )
-( ( 2471.25 -1056 -40 7.1875 0.0625 ) ( 2471.25 -1056 -44 7.1875 0.03125 ) ( 2471.25 -1056 -48 7.1875 0 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 9 3 0 0 0 )
-(
-( ( 2563.25 -1056 -48 0 0.0625 ) ( 2563.25 -1056 -44 0 0.03125 ) ( 2563.25 -1056 -40 0 0 ) )
-( ( 2563.25 -965.6568603516 -45.6568450928 0.706043005 0.0625 ) ( 2563.25 -962.8283691406 -42.8284225464 0.706043005 0.03125 ) ( 2563.25 -960 -40 0.706043005 0 ) )
-( ( 2563.25 -968 -40 0.7538779974 0.0625 ) ( 2563.25 -964 -40 0.7538779974 0.03125 ) ( 2563.25 -960 -40 0.7538779974 0 ) )
-( ( 2563.25 -965.6568603516 -122.3431396484 1.3974449635 0.0625 ) ( 2563.25 -962.8283691406 -125.1715698242 1.3974449635 0.03125 ) ( 2563.25 -960 -128 1.3974449635 0 ) )
-( ( 2563.25 -1056 -120 2.1034879684 0.0625 ) ( 2563.25 -1056 -124 2.1034879684 0.03125 ) ( 2563.25 -1056 -128 2.1034879684 0 ) )
-( ( 2563.25 -1146.3431396484 -122.3431396484 2.8095309734 0.0625 ) ( 2563.25 -1149.1716308594 -125.1715698242 2.8095309734 0.03125 ) ( 2563.25 -1152 -128 2.8095309734 0 ) )
-( ( 2563.25 -1144 -40 3.453097105 0.0625 ) ( 2563.25 -1148 -40 3.453097105 0.03125 ) ( 2563.25 -1152 -40 3.453097105 0 ) )
-( ( 2563.25 -1146.3431396484 -45.6568450928 3.5009329319 0.0625 ) ( 2563.25 -1149.1716308594 -42.8284225464 3.5009329319 0.03125 ) ( 2563.25 -1152 -40 3.5009329319 0 ) )
-( ( 2563.25 -1056 -48 4.2069759369 0.0625 ) ( 2563.25 -1056 -44 4.2069759369 0.03125 ) ( 2563.25 -1056 -40 4.2069759369 0 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 9 3 0 0 0 )
-(
-( ( 2471.25 -1056 -48 0 0.71875 ) ( 2517.25 -1056 -48 0 0.359375 ) ( 2563.25 -1056 -48 0 0 ) )
-( ( 2471.25 -965.6568603516 -45.6568450928 0.706043005 0.71875 ) ( 2517.25 -965.6568603516 -45.6568450928 0.706043005 0.359375 ) ( 2563.25 -965.6568603516 -45.6568450928 0.706043005 0 ) )
-( ( 2291.25 -968 -40 2.1131060123 0.71875 ) ( 2517.25 -968 -40 2.1131060123 0.359375 ) ( 2563.25 -968 -40 2.1131060123 0 ) )
-( ( 2291.25 -965.6568603516 -122.3431396484 2.7566730976 0.71875 ) ( 2517.25 -965.6568603516 -122.3431396484 2.7566730976 0.359375 ) ( 2563.25 -965.6568603516 -122.3431396484 2.7566730976 0 ) )
-( ( 2291.25 -1056 -120 3.4627161026 0.71875 ) ( 2517.25 -1056 -120 3.4627161026 0.359375 ) ( 2563.25 -1056 -120 3.4627161026 0 ) )
-( ( 2291.25 -1146.3431396484 -122.3431396484 4.1687588692 0.71875 ) ( 2517.25 -1146.3431396484 -122.3431396484 4.1687588692 0.359375 ) ( 2563.25 -1146.3431396484 -122.3431396484 4.1687588692 0 ) )
-( ( 2291.25 -1144 -40 4.8123250008 0.71875 ) ( 2517.25 -1144 -40 4.8123250008 0.359375 ) ( 2563.25 -1144 -40 4.8123250008 0 ) )
-( ( 2471.25 -1146.3431396484 -45.6568450928 6.2193880081 0.71875 ) ( 2517.25 -1146.3431396484 -45.6568450928 6.2193880081 0.359375 ) ( 2563.25 -1146.3431396484 -45.6568450928 6.2193880081 0 ) )
-( ( 2471.25 -1056 -48 6.9254322052 0.71875 ) ( 2517.25 -1056 -48 6.9254322052 0.359375 ) ( 2563.25 -1056 -48 6.9254322052 0 ) )
-)
-}
-}
-// brush 3
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 9 3 0 0 0 )
-(
-( ( 2563.25 -1056 -40 0 0.71875 ) ( 2517.25 -1056 -40 0 0.359375 ) ( 2471.25 -1056 -40 0 0 ) )
-( ( 2563.25 -960 -40 0.75 0.71875 ) ( 2517.25 -960 -40 0.75 0.359375 ) ( 2471.25 -960 -40 0.75 0 ) )
-( ( 2563.25 -960 -40 0.75 0.71875 ) ( 2517.25 -960 -40 0.75 0.359375 ) ( 2291.25 -960 -40 0.75 0 ) )
-( ( 2563.25 -960 -128 1.4375 0.71875 ) ( 2517.25 -960 -128 1.4375 0.359375 ) ( 2291.25 -960 -128 1.4375 0 ) )
-( ( 2563.25 -1056 -128 2.1875 0.71875 ) ( 2517.25 -1056 -128 2.1875 0.359375 ) ( 2291.25 -1056 -128 2.1875 0 ) )
-( ( 2563.25 -1152 -128 2.9375 0.71875 ) ( 2517.25 -1152 -128 2.9375 0.359375 ) ( 2291.25 -1152 -128 2.9375 0 ) )
-( ( 2563.25 -1152 -40 3.625 0.71875 ) ( 2517.25 -1152 -40 3.625 0.359375 ) ( 2291.25 -1152 -40 3.625 0 ) )
-( ( 2563.25 -1152 -40 3.625 0.71875 ) ( 2517.25 -1152 -40 3.625 0.359375 ) ( 2471.25 -1152 -40 3.625 0 ) )
-( ( 2563.25 -1056 -40 4.375 0.71875 ) ( 2517.25 -1056 -40 4.375 0.359375 ) ( 2471.25 -1056 -40 4.375 0 ) )
-)
-}
-}
-}
-// entity 179
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 9 3 0 0 0 )
-(
-( ( 2855.25 -384 -40 0 0.0625 ) ( 2855.25 -384 -44 0 0.03125 ) ( 2855.25 -384 -48 0 0 ) )
-( ( 2855.25 -288 -40 0.75 0.0625 ) ( 2855.25 -290.8283691406 -42.8284225464 0.75 0.03125 ) ( 2855.25 -293.6568603516 -45.6568450928 0.75 0 ) )
-( ( 2675.25 -288 -40 2.15625 0.0625 ) ( 2675.25 -292 -40 2.15625 0.03125 ) ( 2675.25 -296 -40 2.15625 0 ) )
-( ( 2675.25 -288 -128 2.84375 0.0625 ) ( 2675.25 -290.8283691406 -125.1715698242 2.84375 0.03125 ) ( 2675.25 -293.6568603516 -122.3431396484 2.84375 0 ) )
-( ( 2675.25 -384 -128 3.59375 0.0625 ) ( 2675.25 -384 -124 3.59375 0.03125 ) ( 2675.25 -384 -120 3.59375 0 ) )
-( ( 2675.25 -480 -128 4.34375 0.0625 ) ( 2675.25 -477.1715698242 -125.1715698242 4.34375 0.03125 ) ( 2675.25 -474.3431396484 -122.3431396484 4.34375 0 ) )
-( ( 2675.25 -480 -40 5.03125 0.0625 ) ( 2675.25 -476 -40 5.03125 0.03125 ) ( 2675.25 -472 -40 5.03125 0 ) )
-( ( 2855.25 -480 -40 6.4375 0.0625 ) ( 2855.25 -477.1715698242 -42.8284225464 6.4375 0.03125 ) ( 2855.25 -474.3431396484 -45.6568450928 6.4375 0 ) )
-( ( 2855.25 -384 -40 7.1875 0.0625 ) ( 2855.25 -384 -44 7.1875 0.03125 ) ( 2855.25 -384 -48 7.1875 0 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 9 3 0 0 0 )
-(
-( ( 2947.25 -384 -48 0 0.0625 ) ( 2947.25 -384 -44 0 0.03125 ) ( 2947.25 -384 -40 0 0 ) )
-( ( 2947.25 -293.6568603516 -45.6568450928 0.706043005 0.0625 ) ( 2947.25 -290.8283691406 -42.8284225464 0.706043005 0.03125 ) ( 2947.25 -288 -40 0.706043005 0 ) )
-( ( 2947.25 -296 -40 0.7538779974 0.0625 ) ( 2947.25 -292 -40 0.7538779974 0.03125 ) ( 2947.25 -288 -40 0.7538779974 0 ) )
-( ( 2947.25 -293.6568603516 -122.3431396484 1.3974449635 0.0625 ) ( 2947.25 -290.8283691406 -125.1715698242 1.3974449635 0.03125 ) ( 2947.25 -288 -128 1.3974449635 0 ) )
-( ( 2947.25 -384 -120 2.1034879684 0.0625 ) ( 2947.25 -384 -124 2.1034879684 0.03125 ) ( 2947.25 -384 -128 2.1034879684 0 ) )
-( ( 2947.25 -474.3431396484 -122.3431396484 2.8095309734 0.0625 ) ( 2947.25 -477.1715698242 -125.1715698242 2.8095309734 0.03125 ) ( 2947.25 -480 -128 2.8095309734 0 ) )
-( ( 2947.25 -472 -40 3.453097105 0.0625 ) ( 2947.25 -476 -40 3.453097105 0.03125 ) ( 2947.25 -480 -40 3.453097105 0 ) )
-( ( 2947.25 -474.3431396484 -45.6568450928 3.5009329319 0.0625 ) ( 2947.25 -477.1715698242 -42.8284225464 3.5009329319 0.03125 ) ( 2947.25 -480 -40 3.5009329319 0 ) )
-( ( 2947.25 -384 -48 4.2069759369 0.0625 ) ( 2947.25 -384 -44 4.2069759369 0.03125 ) ( 2947.25 -384 -40 4.2069759369 0 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 9 3 0 0 0 )
-(
-( ( 2855.25 -384 -48 0 0.71875 ) ( 2901.25 -384 -48 0 0.359375 ) ( 2947.25 -384 -48 0 0 ) )
-( ( 2855.25 -293.6568603516 -45.6568450928 0.706043005 0.71875 ) ( 2901.25 -293.6568603516 -45.6568450928 0.706043005 0.359375 ) ( 2947.25 -293.6568603516 -45.6568450928 0.706043005 0 ) )
-( ( 2675.25 -296 -40 2.1131060123 0.71875 ) ( 2901.25 -296 -40 2.1131060123 0.359375 ) ( 2947.25 -296 -40 2.1131060123 0 ) )
-( ( 2675.25 -293.6568603516 -122.3431396484 2.7566730976 0.71875 ) ( 2901.25 -293.6568603516 -122.3431396484 2.7566730976 0.359375 ) ( 2947.25 -293.6568603516 -122.3431396484 2.7566730976 0 ) )
-( ( 2675.25 -384 -120 3.4627161026 0.71875 ) ( 2901.25 -384 -120 3.4627161026 0.359375 ) ( 2947.25 -384 -120 3.4627161026 0 ) )
-( ( 2675.25 -474.3431396484 -122.3431396484 4.1687588692 0.71875 ) ( 2901.25 -474.3431396484 -122.3431396484 4.1687588692 0.359375 ) ( 2947.25 -474.3431396484 -122.3431396484 4.1687588692 0 ) )
-( ( 2675.25 -472 -40 4.8123250008 0.71875 ) ( 2901.25 -472 -40 4.8123250008 0.359375 ) ( 2947.25 -472 -40 4.8123250008 0 ) )
-( ( 2855.25 -474.3431396484 -45.6568450928 6.2193880081 0.71875 ) ( 2901.25 -474.3431396484 -45.6568450928 6.2193880081 0.359375 ) ( 2947.25 -474.3431396484 -45.6568450928 6.2193880081 0 ) )
-( ( 2855.25 -384 -48 6.9254322052 0.71875 ) ( 2901.25 -384 -48 6.9254322052 0.359375 ) ( 2947.25 -384 -48 6.9254322052 0 ) )
-)
-}
-}
-// brush 3
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 9 3 0 0 0 )
-(
-( ( 2947.25 -384 -40 0 0.71875 ) ( 2901.25 -384 -40 0 0.359375 ) ( 2855.25 -384 -40 0 0 ) )
-( ( 2947.25 -288 -40 0.75 0.71875 ) ( 2901.25 -288 -40 0.75 0.359375 ) ( 2855.25 -288 -40 0.75 0 ) )
-( ( 2947.25 -288 -40 0.75 0.71875 ) ( 2901.25 -288 -40 0.75 0.359375 ) ( 2675.25 -288 -40 0.75 0 ) )
-( ( 2947.25 -288 -128 1.4375 0.71875 ) ( 2901.25 -288 -128 1.4375 0.359375 ) ( 2675.25 -288 -128 1.4375 0 ) )
-( ( 2947.25 -384 -128 2.1875 0.71875 ) ( 2901.25 -384 -128 2.1875 0.359375 ) ( 2675.25 -384 -128 2.1875 0 ) )
-( ( 2947.25 -480 -128 2.9375 0.71875 ) ( 2901.25 -480 -128 2.9375 0.359375 ) ( 2675.25 -480 -128 2.9375 0 ) )
-( ( 2947.25 -480 -40 3.625 0.71875 ) ( 2901.25 -480 -40 3.625 0.359375 ) ( 2675.25 -480 -40 3.625 0 ) )
-( ( 2947.25 -480 -40 3.625 0.71875 ) ( 2901.25 -480 -40 3.625 0.359375 ) ( 2855.25 -480 -40 3.625 0 ) )
-( ( 2947.25 -384 -40 4.375 0.71875 ) ( 2901.25 -384 -40 4.375 0.359375 ) ( 2855.25 -384 -40 4.375 0 ) )
-)
-}
-}
-}
-// entity 180
-{
-"classname" "func_group"
-"type" "patchCapped"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( 2947.25 -384 -48 0 0.6903349757 ) ( 2947.25 -296 -40 0 0 ) ( 2947.25 -296 -40 0 0 ) )
-( ( 2947.25 -472 -40 0.6903349757 0.6903349757 ) ( 2947.25 -384.5 -81.5 0.6903349757 0 ) ( 2947.25 -294 -123 0.6903349757 0 ) )
-( ( 2947.25 -472 -40 0.6903349757 0.6903349757 ) ( 2947.25 -475 -123 0.6903349757 0 ) ( 2947.25 -384 -120 0.6903349757 0 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( 2931.25 -296 -40 1.5 8.9375 ) ( 2931.25 -296 -40 1.5 8.9375 ) ( 2927.25 -384 -48 1.53125 8.25 ) )
-( ( 2890.25 -294 -123 1.8203129768 8.953125 ) ( 2910.75 -384.5 -81.5 1.6601560116 8.24609375 ) ( 2931.25 -472 -40 1.5 7.5625 ) )
-( ( 2892.25 -384 -120 1.8046879768 8.25 ) ( 2890.25 -475 -123 1.8203129768 7.5390629768 ) ( 2931.25 -472 -40 1.5 7.5625 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 9 3 0 0 0 )
-(
-( ( 2927.25 -384 -48 0 0.15625 ) ( 2939.25 -384 -48 0 0.0625 ) ( 2947.25 -384 -48 0 0 ) )
-( ( 2931.25 -472 -40 0.691042006 0.15625 ) ( 2939.25 -472 -40 0.691042006 0.0625 ) ( 2947.25 -472 -40 0.691042006 0 ) )
-( ( 2931.25 -472 -40 0.691042006 0.15625 ) ( 2939.25 -472 -40 0.691042006 0.0625 ) ( 2947.25 -472 -40 0.691042006 0 ) )
-( ( 2890.25 -475 -123 1.4146579504 0.15625 ) ( 2939.25 -475 -123 1.4146579504 0.0625 ) ( 2947.25 -475 -123 1.4146579504 0 ) )
-( ( 2892.25 -384 -120 2.1261539459 0.15625 ) ( 2939.25 -384 -120 2.1261539459 0.0625 ) ( 2947.25 -384 -120 2.1261539459 0 ) )
-( ( 2890.25 -294 -123 2.8298430443 0.15625 ) ( 2939.25 -294 -123 2.8298430443 0.0625 ) ( 2947.25 -294 -123 2.8298430443 0 ) )
-( ( 2931.25 -296 -40 3.5532479286 0.15625 ) ( 2939.25 -296 -40 3.5532479286 0.0625 ) ( 2947.25 -296 -40 3.5532479286 0 ) )
-( ( 2931.25 -296 -40 3.5532479286 0.15625 ) ( 2939.25 -296 -40 3.5532479286 0.0625 ) ( 2947.25 -296 -40 3.5532479286 0 ) )
-( ( 2927.25 -384 -48 4.244289875 0.15625 ) ( 2939.25 -384 -48 4.244289875 0.0625 ) ( 2947.25 -384 -48 4.244289875 0 ) )
-)
-}
-}
-}
-// entity 181
-{
-"classname" "func_group"
-"type" "patchCapped"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( 2563.25 288 -48 0 0.6903349757 ) ( 2563.25 376 -40 0 0 ) ( 2563.25 376 -40 0 0 ) )
-( ( 2563.25 200 -40 0.6903349757 0.6903349757 ) ( 2563.25 287.5 -81.5 0.6903349757 0 ) ( 2563.25 378 -123 0.6903349757 0 ) )
-( ( 2563.25 200 -40 0.6903349757 0.6903349757 ) ( 2563.25 197 -123 0.6903349757 0 ) ( 2563.25 288 -120 0.6903349757 0 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( 2547.25 376 -40 1.5 8.9375 ) ( 2547.25 376 -40 1.5 8.9375 ) ( 2543.25 288 -48 1.53125 8.25 ) )
-( ( 2506.25 378 -123 1.8203129768 8.953125 ) ( 2526.75 287.5 -81.5 1.6601560116 8.24609375 ) ( 2547.25 200 -40 1.5 7.5625 ) )
-( ( 2508.25 288 -120 1.8046879768 8.25 ) ( 2506.25 197 -123 1.8203129768 7.5390629768 ) ( 2547.25 200 -40 1.5 7.5625 ) )
-)
-}
-}
-}
-// entity 182
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 9 3 0 0 0 )
-(
-( ( 2471.25 288 -40 0 0.0625 ) ( 2471.25 288 -44 0 0.03125 ) ( 2471.25 288 -48 0 0 ) )
-( ( 2471.25 384 -40 0.75 0.0625 ) ( 2471.25 381.1716308594 -42.8284225464 0.75 0.03125 ) ( 2471.25 378.3431396484 -45.6568450928 0.75 0 ) )
-( ( 2291.25 384 -40 2.15625 0.0625 ) ( 2291.25 380 -40 2.15625 0.03125 ) ( 2291.25 376 -40 2.15625 0 ) )
-( ( 2291.25 384 -128 2.84375 0.0625 ) ( 2291.25 381.1716308594 -125.1715698242 2.84375 0.03125 ) ( 2291.25 378.3431396484 -122.3431396484 2.84375 0 ) )
-( ( 2291.25 288 -128 3.59375 0.0625 ) ( 2291.25 288 -124 3.59375 0.03125 ) ( 2291.25 288 -120 3.59375 0 ) )
-( ( 2291.25 192 -128 4.34375 0.0625 ) ( 2291.25 194.8284301758 -125.1715698242 4.34375 0.03125 ) ( 2291.25 197.6568603516 -122.3431396484 4.34375 0 ) )
-( ( 2291.25 192 -40 5.03125 0.0625 ) ( 2291.25 196 -40 5.03125 0.03125 ) ( 2291.25 200 -40 5.03125 0 ) )
-( ( 2471.25 192 -40 6.4375 0.0625 ) ( 2471.25 194.8284301758 -42.8284225464 6.4375 0.03125 ) ( 2471.25 197.6568603516 -45.6568450928 6.4375 0 ) )
-( ( 2471.25 288 -40 7.1875 0.0625 ) ( 2471.25 288 -44 7.1875 0.03125 ) ( 2471.25 288 -48 7.1875 0 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 9 3 0 0 0 )
-(
-( ( 2471.25 288 -48 0 0.71875 ) ( 2517.25 288 -48 0 0.359375 ) ( 2563.25 288 -48 0 0 ) )
-( ( 2471.25 378.3431396484 -45.6568450928 0.706043005 0.71875 ) ( 2517.25 378.3431396484 -45.6568450928 0.706043005 0.359375 ) ( 2563.25 378.3431396484 -45.6568450928 0.706043005 0 ) )
-( ( 2291.25 376 -40 2.1131060123 0.71875 ) ( 2517.25 376 -40 2.1131060123 0.359375 ) ( 2563.25 376 -40 2.1131060123 0 ) )
-( ( 2291.25 378.3431396484 -122.3431396484 2.7566730976 0.71875 ) ( 2517.25 378.3431396484 -122.3431396484 2.7566730976 0.359375 ) ( 2563.25 378.3431396484 -122.3431396484 2.7566730976 0 ) )
-( ( 2291.25 288 -120 3.4627161026 0.71875 ) ( 2517.25 288 -120 3.4627161026 0.359375 ) ( 2563.25 288 -120 3.4627161026 0 ) )
-( ( 2291.25 197.6568603516 -122.3431396484 4.1687588692 0.71875 ) ( 2517.25 197.6568603516 -122.3431396484 4.1687588692 0.359375 ) ( 2563.25 197.6568603516 -122.3431396484 4.1687588692 0 ) )
-( ( 2291.25 200 -40 4.8123250008 0.71875 ) ( 2517.25 200 -40 4.8123250008 0.359375 ) ( 2563.25 200 -40 4.8123250008 0 ) )
-( ( 2471.25 197.6568603516 -45.6568450928 6.2193880081 0.71875 ) ( 2517.25 197.6568603516 -45.6568450928 6.2193880081 0.359375 ) ( 2563.25 197.6568603516 -45.6568450928 6.2193880081 0 ) )
-( ( 2471.25 288 -48 6.9254322052 0.71875 ) ( 2517.25 288 -48 6.9254322052 0.359375 ) ( 2563.25 288 -48 6.9254322052 0 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 9 3 0 0 0 )
-(
-( ( 2563.25 288 -40 0 0.71875 ) ( 2517.25 288 -40 0 0.359375 ) ( 2471.25 288 -40 0 0 ) )
-( ( 2563.25 384 -40 0.75 0.71875 ) ( 2517.25 384 -40 0.75 0.359375 ) ( 2471.25 384 -40 0.75 0 ) )
-( ( 2563.25 384 -40 0.75 0.71875 ) ( 2517.25 384 -40 0.75 0.359375 ) ( 2291.25 384 -40 0.75 0 ) )
-( ( 2563.25 384 -128 1.4375 0.71875 ) ( 2517.25 384 -128 1.4375 0.359375 ) ( 2291.25 384 -128 1.4375 0 ) )
-( ( 2563.25 288 -128 2.1875 0.71875 ) ( 2517.25 288 -128 2.1875 0.359375 ) ( 2291.25 288 -128 2.1875 0 ) )
-( ( 2563.25 192 -128 2.9375 0.71875 ) ( 2517.25 192 -128 2.9375 0.359375 ) ( 2291.25 192 -128 2.9375 0 ) )
-( ( 2563.25 192 -40 3.625 0.71875 ) ( 2517.25 192 -40 3.625 0.359375 ) ( 2291.25 192 -40 3.625 0 ) )
-( ( 2563.25 192 -40 3.625 0.71875 ) ( 2517.25 192 -40 3.625 0.359375 ) ( 2471.25 192 -40 3.625 0 ) )
-( ( 2563.25 288 -40 4.375 0.71875 ) ( 2517.25 288 -40 4.375 0.359375 ) ( 2471.25 288 -40 4.375 0 ) )
-)
-}
-}
-}
-// entity 183
-{
-"classname" "func_group"
-"type" "patchCapped"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 5 3 0 0 0 )
-(
-( ( 2291.25 -1152 -40 3.5 -3 ) ( 2471.25 -1152 -40 2.09375 -3 ) ( 2471.25 -1152 -40 2.09375 -3 ) )
-( ( 2471.25 -1152 -40 2.09375 -3 ) ( 2471.25 -1152 -40 2.09375 -3 ) ( 2471.25 -1152 -40 2.09375 -3 ) )
-( ( 2471.25 -1056 -40 2.09375 -2.25 ) ( 2471.25 -1056 -40 2.09375 -2.25 ) ( 2471.25 -1056 -40 2.09375 -2.25 ) )
-( ( 2471.25 -960 -40 2.09375 -1.5 ) ( 2471.25 -960 -40 2.09375 -1.5 ) ( 2471.25 -960 -40 2.09375 -1.5 ) )
-( ( 2291.25 -960 -40 3.5 -1.5 ) ( 2471.25 -960 -40 2.09375 -1.5 ) ( 2471.25 -960 -40 2.09375 -1.5 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 5 3 0 0 0 )
-(
-( ( 2291.25 -960 -40 0 0.125 ) ( 2291.25 -960 -32 0 0.0625 ) ( 2291.25 -960 -24 0 0 ) )
-( ( 2471.25 -960 -40 1.40625 0.125 ) ( 2471.25 -960 -32 1.40625 0.0625 ) ( 2471.25 -960 -24 1.40625 0 ) )
-( ( 2471.25 -1056 -40 2.15625 0.125 ) ( 2471.25 -1056 -32 2.15625 0.0625 ) ( 2471.25 -1056 -24 2.15625 0 ) )
-( ( 2471.25 -1152 -40 2.90625 0.125 ) ( 2471.25 -1152 -32 2.90625 0.0625 ) ( 2471.25 -1152 -24 2.90625 0 ) )
-( ( 2291.25 -1152 -40 4.3125 0.125 ) ( 2291.25 -1152 -32 4.3125 0.0625 ) ( 2291.25 -1152 -24 4.3125 0 ) )
-)
-}
-}
-}
-// entity 184
-{
-"classname" "func_group"
-"type" "patchCapped"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 5 3 0 0 0 )
-(
-( ( 2675.25 -288 -40 0 0.125 ) ( 2675.25 -288 -32 0 0.0625 ) ( 2675.25 -288 -24 0 0 ) )
-( ( 2855.25 -288 -40 1.40625 0.125 ) ( 2855.25 -288 -32 1.40625 0.0625 ) ( 2855.25 -288 -24 1.40625 0 ) )
-( ( 2855.25 -384 -40 2.15625 0.125 ) ( 2855.25 -384 -32 2.15625 0.0625 ) ( 2855.25 -384 -24 2.15625 0 ) )
-( ( 2855.25 -480 -40 2.90625 0.125 ) ( 2855.25 -480 -32 2.90625 0.0625 ) ( 2855.25 -480 -24 2.90625 0 ) )
-( ( 2675.25 -480 -40 4.3125 0.125 ) ( 2675.25 -480 -32 4.3125 0.0625 ) ( 2675.25 -480 -24 4.3125 0 ) )
-)
-}
-}
-}
-// entity 185
-{
-"classname" "func_group"
-"type" "patchCapped"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 5 3 0 0 0 )
-(
-( ( 2291.25 192 -40 3.5 7.5 ) ( 2471.25 192 -40 2.09375 7.5 ) ( 2471.25 192 -40 2.09375 7.5 ) )
-( ( 2471.25 192 -40 2.09375 7.5 ) ( 2471.25 192 -40 2.09375 7.5 ) ( 2471.25 192 -40 2.09375 7.5 ) )
-( ( 2471.25 288 -40 2.09375 8.25 ) ( 2471.25 288 -40 2.09375 8.25 ) ( 2471.25 288 -40 2.09375 8.25 ) )
-( ( 2471.25 384 -40 2.09375 9 ) ( 2471.25 384 -40 2.09375 9 ) ( 2471.25 384 -40 2.09375 9 ) )
-( ( 2291.25 384 -40 3.5 9 ) ( 2471.25 384 -40 2.09375 9 ) ( 2471.25 384 -40 2.09375 9 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 5 3 0 0 0 )
-(
-( ( 2291.25 384 -40 0 0.125 ) ( 2291.25 384 -32 0 0.0625 ) ( 2291.25 384 -24 0 0 ) )
-( ( 2471.25 384 -40 1.40625 0.125 ) ( 2471.25 384 -32 1.40625 0.0625 ) ( 2471.25 384 -24 1.40625 0 ) )
-( ( 2471.25 288 -40 2.15625 0.125 ) ( 2471.25 288 -32 2.15625 0.0625 ) ( 2471.25 288 -24 2.15625 0 ) )
-( ( 2471.25 192 -40 2.90625 0.125 ) ( 2471.25 192 -32 2.90625 0.0625 ) ( 2471.25 192 -24 2.90625 0 ) )
-( ( 2291.25 192 -40 4.3125 0.125 ) ( 2291.25 192 -32 4.3125 0.0625 ) ( 2291.25 192 -24 4.3125 0 ) )
-)
-}
-}
-}
-// entity 186
-{
-"classname" "func_group"
-"type" "patchCapped"
-// brush 0
-{
-patchDef2
-{
-evil8_floor/e8clangfloor
-( 3 3 0 0 0 )
-(
-( ( 2547.25 -768 -40 1.5 0 ) ( 2547.25 -1044 -40 1.5 -2.15625 ) ( 2547.25 -1044 -40 1.5 -2.15625 ) )
-( ( 3355.25 -768 -40 -4.8125 0 ) ( 2951.25 -1044 -40 -1.65625 -2.15625 ) ( 2547.25 -1320 -40 1.5 -4.3125 ) )
-( ( 3355.25 -768 -40 -4.8125 0 ) ( 3355.25 -1320 -40 -4.8125 -4.3125 ) ( 2547.25 -1320 -40 1.5 -4.3125 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-evil8_floor/e8clangfloor
-( 9 3 0 0 0 )
-(
-( ( 2547.25 -1044 -40 0 0.125 ) ( 2547.25 -1044 -32 0 0.0625 ) ( 2547.25 -1044 -24 0 0 ) )
-( ( 2547.25 -1320 -40 2.15625 0.125 ) ( 2547.25 -1320 -32 2.15625 0.0625 ) ( 2547.25 -1320 -24 2.15625 0 ) )
-( ( 2547.25 -1320 -40 2.15625 0.125 ) ( 2547.25 -1320 -32 2.15625 0.0625 ) ( 2547.25 -1320 -24 2.15625 0 ) )
-( ( 3355.25 -1320 -40 8.46875 0.125 ) ( 3355.25 -1320 -32 8.46875 0.0625 ) ( 3355.25 -1320 -24 8.46875 0 ) )
-( ( 3355.25 -768 -40 12.78125 0.125 ) ( 3355.25 -768 -32 12.78125 0.0625 ) ( 3355.25 -768 -24 12.78125 0 ) )
-( ( 3355.25 -768 -40 12.78125 0.125 ) ( 3355.25 -768 -32 12.78125 0.0625 ) ( 3355.25 -768 -24 12.78125 0 ) )
-( ( 2547.25 -768 -40 19.09375 0.125 ) ( 2547.25 -768 -32 19.09375 0.0625 ) ( 2547.25 -768 -24 19.09375 0 ) )
-( ( 2547.25 -1044 -40 21.25 0.125 ) ( 2547.25 -1044 -32 21.25 0.0625 ) ( 2547.25 -1044 -24 21.25 0 ) )
-( ( 2547.25 -1044 -40 21.25 0.125 ) ( 2547.25 -1044 -32 21.25 0.0625 ) ( 2547.25 -1044 -24 21.25 0 ) )
-)
-}
-}
-}
-// entity 187
-{
-"classname" "func_group"
-"type" "patchCapped"
-// brush 0
-{
-patchDef2
-{
-evil8_floor/e8clangfloor
-( 3 3 0 0 0 )
-(
-( ( 3187.25 -652 -40 -3.5 0.90625 ) ( 3187.25 -652 -40 -3.5 0.90625 ) ( 3187.25 -768 -40 -3.5 0 ) )
-( ( 3187.25 -536 -40 -3.5 1.8125 ) ( 3271.25 -652 -40 -4.15625 0.90625 ) ( 3355.25 -768 -40 -4.8125 0 ) )
-( ( 3187.25 -536 -40 -3.5 1.8125 ) ( 3355.25 -536 -40 -4.8125 1.8125 ) ( 3355.25 -768 -40 -4.8125 0 ) )
-)
-}
-}
-}
-// entity 188
-{
-"classname" "func_group"
-"type" "patchCapped"
-// brush 0
-{
-patchDef2
-{
-evil8_floor/e8clangfloor
-( 5 3 0 0 0 )
-(
-( ( 3035 -232 -16 -2.3125 4.1875 ) ( 3035 -232 -16 -2.3125 4.1875 ) ( 3187 -232 -16 -3.5 4.1875 ) )
-( ( 3035 -232 -16 -2.3125 4.1875 ) ( 3035 -232 -16 -2.3125 4.1875 ) ( 3035 -232 -16 -2.3125 4.1875 ) )
-( ( 3035 -384 -16 -2.3125 3 ) ( 3035 -384 -16 -2.3125 3 ) ( 3035 -384 -16 -2.3125 3 ) )
-( ( 3035 -536 -16 -2.3125 1.8125 ) ( 3035 -536 -16 -2.3125 1.8125 ) ( 3035 -536 -16 -2.3125 1.8125 ) )
-( ( 3035 -536 -16 -2.3125 1.8125 ) ( 3035 -536 -16 -2.3125 1.8125 ) ( 3187 -536 -16 -3.5 1.8125 ) )
-)
-}
-}
-}
-// entity 189
-{
-"classname" "func_group"
-"type" "patchCapped"
-// brush 0
-{
-patchDef2
-{
-evil8_floor/e8clangfloor
-( 3 3 0 0 0 )
-(
-( ( 3187.25 0 -40 -3.5 6 ) ( 3187.25 -116 -40 -3.5 5.09375 ) ( 3187.25 -116 -40 -3.5 5.09375 ) )
-( ( 3355.25 0 -40 -4.8125 6 ) ( 3271.25 -116 -40 -4.15625 5.09375 ) ( 3187.25 -232 -40 -3.5 4.1875 ) )
-( ( 3355.25 0 -40 -4.8125 6 ) ( 3355.25 -232 -40 -4.8125 4.1875 ) ( 3187.25 -232 -40 -3.5 4.1875 ) )
-)
-}
-}
-}
-// entity 190
-{
-"classname" "func_group"
-"type" "patchCapped"
-// brush 0
-{
-patchDef2
-{
-evil8_floor/e8clangfloor
-( 3 3 0 0 0 )
-(
-( ( 2547.25 276 -40 1.5 8.15625 ) ( 2547.25 276 -40 1.5 8.15625 ) ( 2547.25 0 -40 1.5 6 ) )
-( ( 2547.25 552 -40 1.5 10.3125 ) ( 2951.25 276 -40 -1.65625 8.15625 ) ( 3355.25 0 -40 -4.8125 6 ) )
-( ( 2547.25 552 -40 1.5 10.3125 ) ( 3355.25 552 -40 -4.8125 10.3125 ) ( 3355.25 0 -40 -4.8125 6 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-evil8_floor/e8clangfloor
-( 9 3 0 0 0 )
-(
-( ( 2547.25 276 -24 0 0 ) ( 2547.25 276 -32 0 0.03125 ) ( 2547.25 276 -40 0 0.0625 ) )
-( ( 2547.25 552 -24 2.25 0 ) ( 2547.25 552 -32 2.25 0.03125 ) ( 2547.25 552 -40 2.25 0.0625 ) )
-( ( 2547.25 552 -24 2.25 0 ) ( 2547.25 552 -32 2.25 0.03125 ) ( 2547.25 552 -40 2.25 0.0625 ) )
-( ( 3355.25 552 -24 8.75 0 ) ( 3355.25 552 -32 8.75 0.03125 ) ( 3355.25 552 -40 8.75 0.0625 ) )
-( ( 3355.25 0 -24 13.25 0 ) ( 3355.25 0 -32 13.25 0.03125 ) ( 3355.25 0 -40 13.25 0.0625 ) )
-( ( 3355.25 0 -24 13.25 0 ) ( 3355.25 0 -32 13.25 0.03125 ) ( 3355.25 0 -40 13.25 0.0625 ) )
-( ( 2547.25 0 -24 19.75 0 ) ( 2547.25 0 -32 19.75 0.03125 ) ( 2547.25 0 -40 19.75 0.0625 ) )
-( ( 2547.25 276 -24 22 0 ) ( 2547.25 276 -32 22 0.03125 ) ( 2547.25 276 -40 22 0.0625 ) )
-( ( 2547.25 276 -24 22 0 ) ( 2547.25 276 -32 22 0.03125 ) ( 2547.25 276 -40 22 0.0625 ) )
-)
-}
-}
-}
-// entity 191
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 2547.25 -1344 32 0 0 ) ( 2547.25 -1344 8 0 0.21875 ) ( 2547.25 -1320 -24 0 0.5068609715 ) )
-( ( 2547.25 -1344 32 0.03125 0 ) ( 2547.25 -1344 8 0.03125 0.21875 ) ( 2547.25 -1320 -24 0.03125 0.5068609715 ) )
-( ( 2547.25 -1336 32 0.0625 0 ) ( 2547.25 -1336 8 0.0625 0.21875 ) ( 2547.25 -1312 -16 0.0625 0.5068609715 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 2547.25 -1336 32 0 0 ) ( 2547.25 -1336 8 0 0.21875 ) ( 2547.25 -1312 -16 0 0.5068609715 ) )
-( ( 3371.25 -1336 32 6.3125 0 ) ( 3371.25 -1336 8 6.3125 0.21875 ) ( 3355.25 -1320 -16 6.3125 0.5068609715 ) )
-( ( 3371.25 -768 32 10.625 0 ) ( 3371.25 -768 8 10.625 0.21875 ) ( 3347.25 -768 -16 10.625 0.5068609715 ) )
-)
-}
-}
-}
-// entity 192
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 3187.25 -544 -16 0 0 ) ( 3187.25 -520 8 0 0.2881110013 ) ( 3187.25 -520 32 0 0.5068609715 ) )
-( ( 3355.25 -536 -16 1.5 0 ) ( 3371.25 -520 8 1.5 0.2881110013 ) ( 3371.25 -520 32 1.5 0.5068609715 ) )
-( ( 3347.25 -768 -16 3.5 0 ) ( 3371.25 -768 8 3.5 0.2881110013 ) ( 3371.25 -768 32 3.5 0.5068609715 ) )
-)
-}
-}
-}
-// entity 193
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 3027.25 -384 -16 0 0 ) ( 3051.25 -384 8 0 0.3125 ) ( 3051.25 -384 32 0 0.5 ) )
-( ( 3035.25 -536 -16 1 0 ) ( 3051.25 -520 8 1 0.3125 ) ( 3051.25 -520 32 1 0.5 ) )
-( ( 3187.25 -544 -16 2 0 ) ( 3187.25 -520 8 2 0.3125 ) ( 3187.25 -520 32 2 0.5 ) )
-)
-}
-}
-}
-// entity 194
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 3187.25 -248 32 0 0.5068609715 ) ( 3187.25 -248 8 0 0.2881110013 ) ( 3187.25 -224 -16 0 0 ) )
-( ( 3371.25 -248 32 1.5 0.5068609715 ) ( 3371.25 -248 8 1.5 0.2881110013 ) ( 3355.25 -232 -16 1.5 0 ) )
-( ( 3371.25 0 32 3.5 0.5068609715 ) ( 3371.25 0 8 3.5 0.2881110013 ) ( 3347.25 0 -16 3.5 0 ) )
-)
-}
-}
-}
-// entity 195
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 2547.25 552 -24 0 0.5068609715 ) ( 2547.25 576 8 0 0.21875 ) ( 2547.25 576 32 0 0 ) )
-( ( 2547.25 552 -24 0.03125 0.5068609715 ) ( 2547.25 576 8 0.03125 0.21875 ) ( 2547.25 576 32 0.03125 0 ) )
-( ( 2547.25 544 -16 0.0625 0.5068609715 ) ( 2547.25 568 8 0.0625 0.21875 ) ( 2547.25 568 32 0.0625 0 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 2547.25 544 -16 0 0.5068609715 ) ( 2547.25 568 8 0 0.21875 ) ( 2547.25 568 32 0 0 ) )
-( ( 3355.25 552 -16 6.3125 0.5068609715 ) ( 3371.25 568 8 6.3125 0.21875 ) ( 3371.25 568 32 6.3125 0 ) )
-( ( 3347.25 0 -16 10.625 0.5068609715 ) ( 3371.25 0 8 10.625 0.21875 ) ( 3371.25 0 32 10.625 0 ) )
-)
-}
-}
-}
-// entity 196
-{
-"classname" "func_group"
-"type" "patchCapped"
-// brush 0
-{
-patchDef2
-{
-evil8_floor/e8clangfloor
-( 3 3 0 0 0 )
-(
-( ( 2547.25 -1040 -16 1.5 -2.125 ) ( 2547.25 -1040 -16 1.5 -2.125 ) ( 2547.25 -768 -16 1.5 0 ) )
-( ( 2547.25 -1312 -16 1.5 -4.25 ) ( 2951.25 -1044 -16 -1.65625 -2.15625 ) ( 3347.25 -768 -16 -4.75 0 ) )
-( ( 2547.25 -1312 -16 1.5 -4.25 ) ( 3355.25 -1320 -16 -4.8125 -4.3125 ) ( 3347.25 -768 -16 -4.75 0 ) )
-)
-}
-}
-}
-// entity 197
-{
-"classname" "func_group"
-"type" "patchCapped"
-// brush 0
-{
-patchDef2
-{
-evil8_floor/e8clangfloor
-( 3 3 0 0 0 )
-(
-( ( 3187.25 -768 -16 -3.5 0 ) ( 3187.25 -656 -16 -3.5 0.875 ) ( 3187.25 -656 -16 -3.5 0.875 ) )
-( ( 3347.25 -768 -16 -4.75 0 ) ( 3271.25 -652 -16 -4.15625 0.90625 ) ( 3187.25 -544 -16 -3.5 1.75 ) )
-( ( 3347.25 -768 -16 -4.75 0 ) ( 3355.25 -536 -16 -4.8125 1.8125 ) ( 3187.25 -544 -16 -3.5 1.75 ) )
-)
-}
-}
-}
-// entity 198
-{
-"classname" "func_group"
-"type" "patchCapped"
-// brush 0
-{
-patchDef2
-{
-evil8_floor/e8clangfloor
-( 3 3 0 0 0 )
-(
-( ( 3187.25 -112 -16 -3.5 0.875 ) ( 3187.25 -112 -16 -3.5 0.875 ) ( 3187.25 0 -16 -3.5 0 ) )
-( ( 3187.25 -224 -16 -3.5 1.75 ) ( 3271.25 -116 -16 -4.15625 0.90625 ) ( 3347.25 0 -16 -4.75 0 ) )
-( ( 3187.25 -224 -16 -3.5 1.75 ) ( 3355.25 -232 -16 -4.8125 1.8125 ) ( 3347.25 0 -16 -4.75 0 ) )
-)
-}
-}
-}
-// entity 199
-{
-"classname" "func_group"
-"type" "patchCapped"
-// brush 0
-{
-patchDef2
-{
-evil8_floor/e8clangfloor
-( 3 3 0 0 0 )
-(
-( ( 2547.25 0 -16 1.5 0 ) ( 2547.25 272 -16 1.5 -2.125 ) ( 2547.25 272 -16 1.5 -2.125 ) )
-( ( 3347.25 0 -16 -4.75 0 ) ( 2951.25 276 -16 -1.65625 -2.15625 ) ( 2547.25 544 -16 1.5 -4.25 ) )
-( ( 3347.25 0 -16 -4.75 0 ) ( 3355.25 552 -16 -4.8125 -4.3125 ) ( 2547.25 544 -16 1.5 -4.25 ) )
-)
-}
-}
-}
-// entity 200
-{
-"classname" "func_group"
-"type" "patchCapped"
-// brush 0
-{
-patchDef2
-{
-evil8_floor/e8clangfloor
-( 5 3 0 0 0 )
-(
-( ( 2483.25 192 -16 2.0273399353 7.4492201805 ) ( 2483.25 192 -16 2.0273439884 7.4492192268 ) ( 2291.25 192 -16 3.5273439884 7.4492192268 ) )
-( ( 2483.25 192 -16 2.0273439884 7.4492192268 ) ( 2483.25 192 -16 2.0273439884 7.4492192268 ) ( 2483.25 192 -16 2.0273439884 7.4492192268 ) )
-( ( 2483.25 288 -16 2.0273439884 8.19921875 ) ( 2483.25 288 -16 2.0273439884 8.19921875 ) ( 2483.25 288 -16 2.0273439884 8.19921875 ) )
-( ( 2483.25 384 -16 2.0273439884 8.94921875 ) ( 2483.25 384 -16 2.0273439884 8.94921875 ) ( 2483.25 384 -16 2.0273439884 8.94921875 ) )
-( ( 2483.25 384 -16 2.0273439884 8.94921875 ) ( 2483.25 384 -16 2.0273439884 8.94921875 ) ( 2291.25 384 -16 3.5273439884 8.94921875 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 5 3 0 0 0 )
-(
-( ( 2291.25 384 -24 0 0.0625 ) ( 2291.25 384 -20 0 0.03125 ) ( 2291.25 384 -16 0 0 ) )
-( ( 2471.25 384 -24 1.40625 0.0625 ) ( 2479.25 384 -20 1.40625 0.03125 ) ( 2483.25 384 -16 1.40625 0 ) )
-( ( 2471.25 288 -24 2.15625 0.0625 ) ( 2479.25 288 -20 2.15625 0.03125 ) ( 2483.25 288 -16 2.15625 0 ) )
-( ( 2471.25 192 -24 2.90625 0.0625 ) ( 2479.25 192 -20 2.90625 0.03125 ) ( 2483.25 192 -16 2.90625 0 ) )
-( ( 2291.25 192 -24 4.3125 0.0625 ) ( 2291.25 192 -20 4.3125 0.03125 ) ( 2291.25 192 -16 4.3125 0 ) )
-)
-}
-}
-}
-// entity 201
-{
-"classname" "func_group"
-"type" "patchCapped"
-// brush 0
-{
-patchDef2
-{
-evil8_floor/e8clangfloor
-( 5 3 0 0 0 )
-(
-( ( 2291.25 -960 -16 3.5 7.5 ) ( 2483.25 -960 -16 2 7.5 ) ( 2483.25 -960 -16 2 7.5 ) )
-( ( 2483.25 -960 -16 2 7.5 ) ( 2483.25 -960 -16 2 7.5 ) ( 2483.25 -960 -16 2 7.5 ) )
-( ( 2483.25 -1056 -16 2 8.25 ) ( 2483.25 -1056 -16 2 8.25 ) ( 2483.25 -1056 -16 2 8.25 ) )
-( ( 2483.25 -1152 -16 2 9 ) ( 2483.25 -1152 -16 2 9 ) ( 2483.25 -1152 -16 2 9 ) )
-( ( 2291.25 -1152 -16 3.5 9 ) ( 2483.25 -1152 -16 2 9 ) ( 2483.25 -1152 -16 2 9 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 5 3 0 0 0 )
-(
-( ( 2291.25 -1152 -16 0 0 ) ( 2291.25 -1152 -20 0 0.03125 ) ( 2291.25 -1152 -24 0 0.0625 ) )
-( ( 2483.25 -1152 -16 1.40625 0 ) ( 2479.25 -1152 -20 1.40625 0.03125 ) ( 2471.25 -1152 -24 1.40625 0.0625 ) )
-( ( 2483.25 -1056 -16 2.15625 0 ) ( 2479.25 -1056 -20 2.15625 0.03125 ) ( 2471.25 -1056 -24 2.15625 0.0625 ) )
-( ( 2483.25 -960 -16 2.90625 0 ) ( 2479.25 -960 -20 2.90625 0.03125 ) ( 2471.25 -960 -24 2.90625 0.0625 ) )
-( ( 2291.25 -960 -16 4.3125 0 ) ( 2291.25 -960 -20 4.3125 0.03125 ) ( 2291.25 -960 -24 4.3125 0.0625 ) )
-)
-}
-}
-}
-// entity 202
-{
-"classname" "func_group"
-"type" "patchCapped"
-// brush 0
-{
-patchDef2
-{
-evil8_floor/e8clangfloor
-( 5 3 0 0 0 )
-(
-( ( 2867.25 -480 -16 2 7.5 ) ( 2867.25 -480 -16 2 7.5 ) ( 2675.25 -480 -16 3.5 7.5 ) )
-( ( 2867.25 -480 -16 2 7.5 ) ( 2867.25 -480 -16 2 7.5 ) ( 2867.25 -480 -16 2 7.5 ) )
-( ( 2867.25 -384 -16 2 8.25 ) ( 2867.25 -384 -16 2 8.25 ) ( 2867.25 -384 -16 2 8.25 ) )
-( ( 2867.25 -288 -16 2 9 ) ( 2867.25 -288 -16 2 9 ) ( 2867.25 -288 -16 2 9 ) )
-( ( 2867.25 -288 -16 2 9 ) ( 2867.25 -288 -16 2 9 ) ( 2675.25 -288 -16 3.5 9 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 5 3 0 0 0 )
-(
-( ( 2675.25 -288 -24 0 0.0625 ) ( 2675.25 -288 -20 0 0.03125 ) ( 2675.25 -288 -16 0 0 ) )
-( ( 2855.25 -288 -24 1.40625 0.0625 ) ( 2863.25 -288 -20 1.40625 0.03125 ) ( 2867.25 -288 -16 1.40625 0 ) )
-( ( 2855.25 -384 -24 2.15625 0.0625 ) ( 2863.25 -384 -20 2.15625 0.03125 ) ( 2867.25 -384 -16 2.15625 0 ) )
-( ( 2855.25 -480 -24 2.90625 0.0625 ) ( 2863.25 -480 -20 2.90625 0.03125 ) ( 2867.25 -480 -16 2.90625 0 ) )
-( ( 2675.25 -480 -24 4.3125 0.0625 ) ( 2675.25 -480 -20 4.3125 0.03125 ) ( 2675.25 -480 -16 4.3125 0 ) )
-)
-}
-}
-}
-// entity 203
-{
-"classname" "func_group"
-"type" "patchCapped"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 2675.25 -384 -24 0.5 1.25 ) ( 2675.25 -288 -4.5 0.5 2 ) ( 2675.25 -288 -4.5 0.5 2 ) )
-( ( 2675.25 -479.9999694824 -4.5 0.5 0.5 ) ( 2765.25 -386 -111.25 -0.203125 1.234375 ) ( 2855.25 -288 -24 -0.90625 2 ) )
-( ( 2675.25 -479.9999694824 -4.5 0.5 0.5 ) ( 2855.25 -479.9999694824 -24 -0.90625 0.5 ) ( 2855.25 -384 -24 -0.90625 1.25 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 2675.25 -288 -40 0 0.75 ) ( 2675.25 -288 -40 0 0.75 ) ( 2675.25 -384 -40 0 0 ) )
-( ( 2855.25 -288 -40 1.40625 0.75 ) ( 2765.25 -384 -40 1.40625 0.75 ) ( 2675.25 -479.9999694824 -40 1.40625 0 ) )
-( ( 2855.25 -384 -40 2.15625 0.75 ) ( 2855.25 -479.9999694824 -40 2.15625 0.75 ) ( 2675.25 -479.9999694824 -40 2.15625 0 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 9 3 0 0 0 )
-(
-( ( 2675.25 -384 -40 0 0.125 ) ( 2675.25 -384 -32 0 0.0625 ) ( 2675.25 -384 -24 0 0 ) )
-( ( 2675.25 -479.9999694824 -40 0.75 0.125 ) ( 2675.25 -479.9999694824 -32 0.75 0.0625 ) ( 2675.25 -479.9999694824 -4.5 0.75 0 ) )
-( ( 2675.25 -479.9999694824 -40 0.75 0.125 ) ( 2675.25 -479.9999694824 -32 0.75 0.0625 ) ( 2675.25 -479.9999694824 -4.5 0.75 0 ) )
-( ( 2855.25 -479.9999694824 -40 2.15625 0.125 ) ( 2855.25 -479.9999694824 -32 2.15625 0.0625 ) ( 2855.25 -479.9999694824 -24 2.15625 0 ) )
-( ( 2855.25 -384 -40 2.90625 0.125 ) ( 2855.25 -384 -32 2.90625 0.0625 ) ( 2855.25 -384 -24 2.90625 0 ) )
-( ( 2855.25 -288 -40 3.65625 0.125 ) ( 2855.25 -288 -32 3.65625 0.0625 ) ( 2855.25 -288 -24 3.65625 0 ) )
-( ( 2675.25 -288 -40 5.0625 0.125 ) ( 2675.25 -288 -32 5.0625 0.0625 ) ( 2675.25 -288 -4.5 5.0625 0 ) )
-( ( 2675.25 -288 -40 5.0625 0.125 ) ( 2675.25 -288 -32 5.0625 0.0625 ) ( 2675.25 -288 -4.5 5.0625 0 ) )
-( ( 2675.25 -384 -40 5.8125 0.125 ) ( 2675.25 -384 -32 5.8125 0.0625 ) ( 2675.25 -384 -24 5.8125 0 ) )
-)
-}
-}
-}
-// entity 204
-{
-"classname" "func_group"
-"type" "patchCapped"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 2291.25 -1056 -24 0.5 1.25 ) ( 2291.25 -960 -4.5 0.5 2 ) ( 2291.25 -960 -4.5 0.5 2 ) )
-( ( 2291.25 -1152 -4.5 0.5 0.5 ) ( 2381.25 -1058 -111.25 -0.203125 1.234375 ) ( 2471.25 -960 -24 -0.90625 2 ) )
-( ( 2291.25 -1152 -4.5 0.5 0.5 ) ( 2471.25 -1152 -24 -0.90625 0.5 ) ( 2471.25 -1056 -24 -0.90625 1.25 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 2291.25 -960 -40 0 0.75 ) ( 2291.25 -960 -40 0 0.75 ) ( 2291.25 -1056 -40 0 0 ) )
-( ( 2471.25 -960 -40 1.40625 0.75 ) ( 2381.25 -1056 -40 1.40625 0.75 ) ( 2291.25 -1152 -40 1.40625 0 ) )
-( ( 2471.25 -1056 -40 2.15625 0.75 ) ( 2471.25 -1152 -40 2.15625 0.75 ) ( 2291.25 -1152 -40 2.15625 0 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 9 3 0 0 0 )
-(
-( ( 2291.25 -1056 -40 0 0.125 ) ( 2291.25 -1056 -32 0 0.0625 ) ( 2291.25 -1056 -24 0 0 ) )
-( ( 2291.25 -1152 -40 0.75 0.125 ) ( 2291.25 -1152 -32 0.75 0.0625 ) ( 2291.25 -1152 -4.5 0.75 0 ) )
-( ( 2291.25 -1152 -40 0.75 0.125 ) ( 2291.25 -1152 -32 0.75 0.0625 ) ( 2291.25 -1152 -4.5 0.75 0 ) )
-( ( 2471.25 -1152 -40 2.15625 0.125 ) ( 2471.25 -1152 -32 2.15625 0.0625 ) ( 2471.25 -1152 -24 2.15625 0 ) )
-( ( 2471.25 -1056 -40 2.90625 0.125 ) ( 2471.25 -1056 -32 2.90625 0.0625 ) ( 2471.25 -1056 -24 2.90625 0 ) )
-( ( 2471.25 -960 -40 3.65625 0.125 ) ( 2471.25 -960 -32 3.65625 0.0625 ) ( 2471.25 -960 -24 3.65625 0 ) )
-( ( 2291.25 -960 -40 5.0625 0.125 ) ( 2291.25 -960 -32 5.0625 0.0625 ) ( 2291.25 -960 -4.5 5.0625 0 ) )
-( ( 2291.25 -960 -40 5.0625 0.125 ) ( 2291.25 -960 -32 5.0625 0.0625 ) ( 2291.25 -960 -4.5 5.0625 0 ) )
-( ( 2291.25 -1056 -40 5.8125 0.125 ) ( 2291.25 -1056 -32 5.8125 0.0625 ) ( 2291.25 -1056 -24 5.8125 0 ) )
-)
-}
-}
-}
-// entity 205
-{
-"classname" "func_group"
-"type" "patchCapped"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 2291.25 288 -24 0.5 1.25 ) ( 2291.25 384 -4.5 0.5 2 ) ( 2291.25 384 -4.5 0.5 2 ) )
-( ( 2291.25 192 -4.5 0.5 0.5 ) ( 2381.25 286 -111.25 -0.203125 1.234375 ) ( 2471.25 384 -24 -0.90625 2 ) )
-( ( 2291.25 192 -4.5 0.5 0.5 ) ( 2471.25 192 -24 -0.90625 0.5 ) ( 2471.25 288 -24 -0.90625 1.25 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 2291.25 384 -40 0 0.75 ) ( 2291.25 384 -40 0 0.75 ) ( 2291.25 288 -40 0 0 ) )
-( ( 2471.25 384 -40 1.40625 0.75 ) ( 2381.25 288 -40 1.40625 0.75 ) ( 2291.25 192 -40 1.40625 0 ) )
-( ( 2471.25 288 -40 2.15625 0.75 ) ( 2471.25 192 -40 2.15625 0.75 ) ( 2291.25 192 -40 2.15625 0 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 9 3 0 0 0 )
-(
-( ( 2291.25 288 -40 0 0.125 ) ( 2291.25 288 -32 0 0.0625 ) ( 2291.25 288 -24 0 0 ) )
-( ( 2291.25 192 -40 0.75 0.125 ) ( 2291.25 192 -32 0.75 0.0625 ) ( 2291.25 192 -4.5 0.75 0 ) )
-( ( 2291.25 192 -40 0.75 0.125 ) ( 2291.25 192 -32 0.75 0.0625 ) ( 2291.25 192 -4.5 0.75 0 ) )
-( ( 2471.25 192 -40 2.15625 0.125 ) ( 2471.25 192 -32 2.15625 0.0625 ) ( 2471.25 192 -24 2.15625 0 ) )
-( ( 2471.25 288 -40 2.90625 0.125 ) ( 2471.25 288 -32 2.90625 0.0625 ) ( 2471.25 288 -24 2.90625 0 ) )
-( ( 2471.25 384 -40 3.65625 0.125 ) ( 2471.25 384 -32 3.65625 0.0625 ) ( 2471.25 384 -24 3.65625 0 ) )
-( ( 2291.25 384 -40 5.0625 0.125 ) ( 2291.25 384 -32 5.0625 0.0625 ) ( 2291.25 384 -4.5 5.0625 0 ) )
-( ( 2291.25 384 -40 5.0625 0.125 ) ( 2291.25 384 -32 5.0625 0.0625 ) ( 2291.25 384 -4.5 5.0625 0 ) )
-( ( 2291.25 288 -40 5.8125 0.125 ) ( 2291.25 288 -32 5.8125 0.0625 ) ( 2291.25 288 -24 5.8125 0 ) )
-)
-}
-}
-}
-// entity 206
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( 2931.25 -384 -14 0 0.5 ) ( 2963.25 -384 -14 0 0.25 ) ( 2995.25 -384 -14 0 0 ) )
-( ( 2931.25 -640 -14 2 0.5 ) ( 2953.8774414062 -617.3725585938 -14 2 0.25 ) ( 2976.5048828125 -594.7451782227 -14 2 0 ) )
-( ( 3123.25 -640 -14 3.5 0.5 ) ( 3123.25 -608 -14 3.5 0.25 ) ( 3123.25 -576 -14 3.5 0 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( 3123.25 -640 -16 0 0.015625 ) ( 3123.25 -640 -15 0 0.0078130001 ) ( 3123.25 -640 -14 0 0 ) )
-( ( 3123.25 -608 -16 0.25 0.015625 ) ( 3123.25 -608 -15 0.25 0.0078130001 ) ( 3123.25 -608 -14 0.25 0 ) )
-( ( 3123.25 -576 -16 0.5 0.015625 ) ( 3123.25 -576 -15 0.5 0.0078130001 ) ( 3123.25 -576 -14 0.5 0 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( 2995.25 -384 -14 0 0 ) ( 2995.25 -384 -15 0 0.0078130001 ) ( 2995.25 -384 -16 0 0.015625 ) )
-( ( 2976.5048828125 -594.7451782227 -14 2 0 ) ( 2976.5048828125 -594.7451782227 -15 2 0.0078130001 ) ( 2976.5048828125 -594.7451782227 -16 2 0.015625 ) )
-( ( 3123.25 -576 -14 3.5 0 ) ( 3123.25 -576 -15 3.5 0.0078130001 ) ( 3123.25 -576 -16 3.5 0.015625 ) )
-)
-}
-}
-// brush 3
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( 2931.25 -384 -16 0 0.015625 ) ( 2931.25 -384 -15 0 0.0078130001 ) ( 2931.25 -384 -14 0 0 ) )
-( ( 2931.25 -640 -16 2 0.015625 ) ( 2931.25 -640 -15 2 0.0078130001 ) ( 2931.25 -640 -14 2 0 ) )
-( ( 3123.25 -640 -16 3.5 0.015625 ) ( 3123.25 -640 -15 3.5 0.0078130001 ) ( 3123.25 -640 -14 3.5 0 ) )
-)
-}
-}
-}
-// entity 207
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( 2995.25 -384 -14 0 0 ) ( 2963.25 -384 -14 0 0.25 ) ( 2931.25 -384 -14 0 0.5 ) )
-( ( 2976.5048828125 -173.2548217773 -14 2 0 ) ( 2953.8774414062 -150.6274414062 -14 2 0.25 ) ( 2931.25 -128 -14 2 0.5 ) )
-( ( 3123.25 -192 -14 3.5 0 ) ( 3123.25 -160 -14 3.5 0.25 ) ( 3123.25 -128 -14 3.5 0.5 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( 2995.25 -384 -16 0 0.015625 ) ( 2995.25 -384 -15 0 0.0078130001 ) ( 2995.25 -384 -14 0 0 ) )
-( ( 2976.5048828125 -173.2548217773 -16 2 0.015625 ) ( 2976.5048828125 -173.2548217773 -15 2 0.0078130001 ) ( 2976.5048828125 -173.2548217773 -14 2 0 ) )
-( ( 3123.25 -192 -16 3.5 0.015625 ) ( 3123.25 -192 -15 3.5 0.0078130001 ) ( 3123.25 -192 -14 3.5 0 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( 2931.25 -384 -14 0 0 ) ( 2931.25 -384 -15 0 0.0078130001 ) ( 2931.25 -384 -16 0 0.015625 ) )
-( ( 2931.25 -128 -14 2 0 ) ( 2931.25 -128 -15 2 0.0078130001 ) ( 2931.25 -128 -16 2 0.015625 ) )
-( ( 3123.25 -128 -14 3.5 0 ) ( 3123.25 -128 -15 3.5 0.0078130001 ) ( 3123.25 -128 -16 3.5 0.015625 ) )
-)
-}
-}
-}
-// entity 208
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( 3315.25 -768 -14 0 0.5 ) ( 3283.25 -768 -14 0 0.25 ) ( 3251.25 -768 -14 0 0 ) )
-( ( 3315.25 -576 -14 1.5 0.5 ) ( 3292.6225585938 -598.6274414062 -14 1.5 0.25 ) ( 3269.9951171875 -621.2548217773 -14 1.5 0 ) )
-( ( 3123.25 -576 -14 3 0.5 ) ( 3123.25 -608 -14 3 0.25 ) ( 3123.25 -640 -14 3 0 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( 3251.25 -768 -14 0 0 ) ( 3251.25 -768 -15 0 0.0078130001 ) ( 3251.25 -768 -16 0 0.015625 ) )
-( ( 3269.9951171875 -621.2548217773 -14 1.5 0 ) ( 3269.9951171875 -621.2548217773 -15 1.5 0.0078130001 ) ( 3269.9951171875 -621.2548217773 -16 1.5 0.015625 ) )
-( ( 3123.25 -640 -14 3 0 ) ( 3123.25 -640 -15 3 0.0078130001 ) ( 3123.25 -640 -16 3 0.015625 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( 3315.25 -768 -16 0 0.015625 ) ( 3315.25 -768 -15 0 0.0078130001 ) ( 3315.25 -768 -14 0 0 ) )
-( ( 3315.25 -576 -16 1.5 0.015625 ) ( 3315.25 -576 -15 1.5 0.0078130001 ) ( 3315.25 -576 -14 1.5 0 ) )
-( ( 3123.25 -576 -16 3 0.015625 ) ( 3123.25 -576 -15 3 0.0078130001 ) ( 3123.25 -576 -14 3 0 ) )
-)
-}
-}
-}
-// entity 209
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( 3251.25 0 -14 0 0 ) ( 3283.25 0 -14 0 0.25 ) ( 3315.25 0 -14 0 0.5 ) )
-( ( 3269.9951171875 -146.7451782227 -14 1.5 0 ) ( 3292.6225585938 -169.3725585938 -14 1.5 0.25 ) ( 3315.25 -192 -14 1.5 0.5 ) )
-( ( 3123.25 -128 -14 3 0 ) ( 3123.25 -160 -14 3 0.25 ) ( 3123.25 -192 -14 3 0.5 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( 3251.25 0 -16 0 0.015625 ) ( 3251.25 0 -15 0 0.0078130001 ) ( 3251.25 0 -14 0 0 ) )
-( ( 3269.9951171875 -146.7451782227 -16 1.5 0.015625 ) ( 3269.9951171875 -146.7451782227 -15 1.5 0.0078130001 ) ( 3269.9951171875 -146.7451782227 -14 1.5 0 ) )
-( ( 3123.25 -128 -16 3 0.015625 ) ( 3123.25 -128 -15 3 0.0078130001 ) ( 3123.25 -128 -14 3 0 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( 3315.25 0 -14 0 0 ) ( 3315.25 0 -15 0 0.0078130001 ) ( 3315.25 0 -16 0 0.015625 ) )
-( ( 3315.25 -192 -14 1.5 0 ) ( 3315.25 -192 -15 1.5 0.0078130001 ) ( 3315.25 -192 -16 1.5 0.015625 ) )
-( ( 3123.25 -192 -14 3 0 ) ( 3123.25 -192 -15 3 0.0078130001 ) ( 3123.25 -192 -16 3 0.015625 ) )
-)
-}
-}
-}
-// entity 210
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( 2805.25 384 -14 0 0 ) ( 2805.25 416 -14 0 0.25 ) ( 2805.25 448 -14 0 0.5 ) )
-( ( 3269.9951171875 402.7451171875 -14 3.984375 0 ) ( 3292.6225585938 425.3725585938 -14 3.984375 0.25 ) ( 3315.25 448 -14 3.984375 0.5 ) )
-( ( 3251.25 0 -14 7.484375 0 ) ( 3283.25 0 -14 7.484375 0.25 ) ( 3315.25 0 -14 7.484375 0.5 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( 2805.25 384 -16 0 0 ) ( 2805.25 384 -15 0 0.0078130001 ) ( 2805.25 384 -14 0 0.015625 ) )
-( ( 3269.9951171875 402.7451171875 -16 3.984375 0 ) ( 3269.9951171875 402.7451171875 -15 3.984375 0.0078130001 ) ( 3269.9951171875 402.7451171875 -14 3.984375 0.015625 ) )
-( ( 3251.25 0 -16 7.484375 0 ) ( 3251.25 0 -15 7.484375 0.0078130001 ) ( 3251.25 0 -14 7.484375 0.015625 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( 2805.25 448 -14 0 0.015625 ) ( 2805.25 448 -15 0 0.0078130001 ) ( 2805.25 448 -16 0 0 ) )
-( ( 3315.25 448 -14 3.984375 0.015625 ) ( 3315.25 448 -15 3.984375 0.0078130001 ) ( 3315.25 448 -16 3.984375 0 ) )
-( ( 3315.25 0 -14 7.484375 0.015625 ) ( 3315.25 0 -15 7.484375 0.0078130001 ) ( 3315.25 0 -16 7.484375 0 ) )
-)
-}
-}
-}
-// entity 211
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( 2805.25 -1216 -14 0 0.5 ) ( 2805.25 -1184 -14 0 0.25 ) ( 2805.25 -1152 -14 0 0 ) )
-( ( 3315.25 -1216 -14 3.984375 0.5 ) ( 3292.6225585938 -1193.3725585938 -14 3.984375 0.25 ) ( 3269.9951171875 -1170.7451171875 -14 3.984375 0 ) )
-( ( 3315.25 -768 -14 7.484375 0.5 ) ( 3283.25 -768 -14 7.484375 0.25 ) ( 3251.25 -768 -14 7.484375 0 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( 2805.25 -1152 -14 0 0.015625 ) ( 2805.25 -1152 -15 0 0.0078130001 ) ( 2805.25 -1152 -16 0 0 ) )
-( ( 3269.9951171875 -1170.7451171875 -14 3.984375 0.015625 ) ( 3269.9951171875 -1170.7451171875 -15 3.984375 0.0078130001 ) ( 3269.9951171875 -1170.7451171875 -16 3.984375 0 ) )
-( ( 3251.25 -768 -14 7.484375 0.015625 ) ( 3251.25 -768 -15 7.484375 0.0078130001 ) ( 3251.25 -768 -16 7.484375 0 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( 2805.25 -1216 -16 0 0 ) ( 2805.25 -1216 -15 0 0.0078130001 ) ( 2805.25 -1216 -14 0 0.015625 ) )
-( ( 3315.25 -1216 -16 3.984375 0 ) ( 3315.25 -1216 -15 3.984375 0.0078130001 ) ( 3315.25 -1216 -14 3.984375 0.015625 ) )
-( ( 3315.25 -768 -16 7.484375 0 ) ( 3315.25 -768 -15 7.484375 0.0078130001 ) ( 3315.25 -768 -14 7.484375 0.015625 ) )
-)
-}
-}
-}
-// entity 212
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( 2805.25 -1152 -14 0 0 ) ( 2805.25 -1184 -14 0 0.25 ) ( 2805.25 -1216 -14 0 0.5 ) )
-( ( 2656.5048828125 -1170.7451171875 -14 1.515625 0 ) ( 2633.8774414062 -1193.3725585938 -14 1.515625 0.25 ) ( 2611.25 -1216 -14 1.515625 0.5 ) )
-( ( 2675.25 -1024 -14 3.015625 0 ) ( 2643.25 -1024 -14 3.015625 0.25 ) ( 2611.25 -1024 -14 3.015625 0.5 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( 2805.25 -1152 -16 0 0 ) ( 2805.25 -1152 -15 0 0.0078130001 ) ( 2805.25 -1152 -14 0 0.015625 ) )
-( ( 2656.5048828125 -1170.7451171875 -16 1.515625 0 ) ( 2656.5048828125 -1170.7451171875 -15 1.515625 0.0078130001 ) ( 2656.5048828125 -1170.7451171875 -14 1.515625 0.015625 ) )
-( ( 2675.25 -1024 -16 3.015625 0 ) ( 2675.25 -1024 -15 3.015625 0.0078130001 ) ( 2675.25 -1024 -14 3.015625 0.015625 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( 2805.25 -1216 -14 0 0.015625 ) ( 2805.25 -1216 -15 0 0.0078130001 ) ( 2805.25 -1216 -16 0 0 ) )
-( ( 2611.25 -1216 -14 1.515625 0.015625 ) ( 2611.25 -1216 -15 1.515625 0.0078130001 ) ( 2611.25 -1216 -16 1.515625 0 ) )
-( ( 2611.25 -1024 -14 3.015625 0.015625 ) ( 2611.25 -1024 -15 3.015625 0.0078130001 ) ( 2611.25 -1024 -16 3.015625 0 ) )
-)
-}
-}
-}
-// entity 213
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( 2805.25 -832 -14 0 0.5 ) ( 2805.25 -864 -14 0 0.25 ) ( 2805.25 -896 -14 0 0 ) )
-( ( 2611.25 -832 -14 1.515625 0.5 ) ( 2633.8774414062 -854.6274414062 -14 1.515625 0.25 ) ( 2656.5048828125 -877.2548217773 -14 1.515625 0 ) )
-( ( 2611.25 -1024 -14 3.015625 0.5 ) ( 2643.25 -1024 -14 3.015625 0.25 ) ( 2675.25 -1024 -14 3.015625 0 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( 2805.25 -832 -14 0 0.015625 ) ( 2805.25 -832 -15 0 0.0078130001 ) ( 2805.25 -832 -16 0 0 ) )
-( ( 2805.25 -864 -14 0.25 0.015625 ) ( 2805.25 -864 -15 0.25 0.0078130001 ) ( 2805.25 -864 -16 0.25 0 ) )
-( ( 2805.25 -896 -14 0.5 0.015625 ) ( 2805.25 -896 -15 0.5 0.0078130001 ) ( 2805.25 -896 -16 0.5 0 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( 2805.25 -896 -14 0 0.015625 ) ( 2805.25 -896 -15 0 0.0078130001 ) ( 2805.25 -896 -16 0 0 ) )
-( ( 2656.5048828125 -877.2548217773 -14 1.515625 0.015625 ) ( 2656.5048828125 -877.2548217773 -15 1.515625 0.0078130001 ) ( 2656.5048828125 -877.2548217773 -16 1.515625 0 ) )
-( ( 2675.25 -1024 -14 3.015625 0.015625 ) ( 2675.25 -1024 -15 3.015625 0.0078130001 ) ( 2675.25 -1024 -16 3.015625 0 ) )
-)
-}
-}
-// brush 3
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( 2805.25 -832 -16 0 0 ) ( 2805.25 -832 -15 0 0.0078130001 ) ( 2805.25 -832 -14 0 0.015625 ) )
-( ( 2611.25 -832 -16 1.515625 0 ) ( 2611.25 -832 -15 1.515625 0.0078130001 ) ( 2611.25 -832 -14 1.515625 0.015625 ) )
-( ( 2611.25 -1024 -16 3.015625 0 ) ( 2611.25 -1024 -15 3.015625 0.0078130001 ) ( 2611.25 -1024 -14 3.015625 0.015625 ) )
-)
-}
-}
-}
-// entity 214
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( 2805.25 448 -14 0 0.5 ) ( 2805.25 416 -14 0 0.25 ) ( 2805.25 384 -14 0 0 ) )
-( ( 2611.25 448 -14 1.515625 0.5 ) ( 2633.8774414062 425.3725585938 -14 1.515625 0.25 ) ( 2656.5048828125 402.7451171875 -14 1.515625 0 ) )
-( ( 2611.25 256 -14 3.015625 0.5 ) ( 2643.25 256 -14 3.015625 0.25 ) ( 2675.25 256 -14 3.015625 0 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( 2805.25 384 -14 0 0.015625 ) ( 2805.25 384 -15 0 0.0078130001 ) ( 2805.25 384 -16 0 0 ) )
-( ( 2656.5048828125 402.7451171875 -14 1.515625 0.015625 ) ( 2656.5048828125 402.7451171875 -15 1.515625 0.0078130001 ) ( 2656.5048828125 402.7451171875 -16 1.515625 0 ) )
-( ( 2675.25 256 -14 3.015625 0.015625 ) ( 2675.25 256 -15 3.015625 0.0078130001 ) ( 2675.25 256 -16 3.015625 0 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( 2805.25 448 -16 0 0 ) ( 2805.25 448 -15 0 0.0078130001 ) ( 2805.25 448 -14 0 0.015625 ) )
-( ( 2611.25 448 -16 1.515625 0 ) ( 2611.25 448 -15 1.515625 0.0078130001 ) ( 2611.25 448 -14 1.515625 0.015625 ) )
-( ( 2611.25 256 -16 3.015625 0 ) ( 2611.25 256 -15 3.015625 0.0078130001 ) ( 2611.25 256 -14 3.015625 0.015625 ) )
-)
-}
-}
-}
-// entity 215
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( 2805.25 128 -14 0 0 ) ( 2805.25 96 -14 0 0.25 ) ( 2805.25 64 -14 0 0.5 ) )
-( ( 2656.5048828125 109.2548217773 -14 1.515625 0 ) ( 2633.8774414062 86.6274414062 -14 1.515625 0.25 ) ( 2611.25 64 -14 1.515625 0.5 ) )
-( ( 2675.25 256 -14 3.015625 0 ) ( 2643.25 256 -14 3.015625 0.25 ) ( 2611.25 256 -14 3.015625 0.5 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( 2805.25 64 -16 0 0 ) ( 2805.25 64 -15 0 0.0078130001 ) ( 2805.25 64 -14 0 0.015625 ) )
-( ( 2805.25 96 -16 0.25 0 ) ( 2805.25 96 -15 0.25 0.0078130001 ) ( 2805.25 96 -14 0.25 0.015625 ) )
-( ( 2805.25 128 -16 0.5 0 ) ( 2805.25 128 -15 0.5 0.0078130001 ) ( 2805.25 128 -14 0.5 0.015625 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( 2805.25 128 -16 0 0 ) ( 2805.25 128 -15 0 0.0078130001 ) ( 2805.25 128 -14 0 0.015625 ) )
-( ( 2656.5048828125 109.2548217773 -16 1.515625 0 ) ( 2656.5048828125 109.2548217773 -15 1.515625 0.0078130001 ) ( 2656.5048828125 109.2548217773 -14 1.515625 0.015625 ) )
-( ( 2675.25 256 -16 3.015625 0 ) ( 2675.25 256 -15 3.015625 0.0078130001 ) ( 2675.25 256 -14 3.015625 0.015625 ) )
-)
-}
-}
-// brush 3
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( 2805.25 64 -14 0 0.015625 ) ( 2805.25 64 -15 0 0.0078130001 ) ( 2805.25 64 -16 0 0 ) )
-( ( 2611.25 64 -14 1.515625 0.015625 ) ( 2611.25 64 -15 1.515625 0.0078130001 ) ( 2611.25 64 -16 1.515625 0 ) )
-( ( 2611.25 256 -14 3.015625 0.015625 ) ( 2611.25 256 -15 3.015625 0.0078130001 ) ( 2611.25 256 -16 3.015625 0 ) )
-)
-}
-}
-}
-// entity 216
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( 2757.5 223.5 -14 0 0 ) ( 2757.5 255.5 -14 0 0.25 ) ( 2757.5 287.5 -14 0 0.5 ) )
-( ( 2906.2451171875 242.2451171875 -14 1.515625 0 ) ( 2928.8725585938 264.8725585938 -14 1.515625 0.25 ) ( 2951.5 287.5 -14 1.515625 0.5 ) )
-( ( 2887.5 95.5 -14 3.015625 0 ) ( 2919.5 95.5 -14 3.015625 0.25 ) ( 2951.5 95.5 -14 3.015625 0.5 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( 2757.5 287.5 -16 0 0 ) ( 2757.5 287.5 -15 0 0.0078130001 ) ( 2757.5 287.5 -14 0 0.015625 ) )
-( ( 2757.5 255.5 -16 0.25 0 ) ( 2757.5 255.5 -15 0.25 0.0078130001 ) ( 2757.5 255.5 -14 0.25 0.015625 ) )
-( ( 2757.5 223.5 -16 0.5 0 ) ( 2757.5 223.5 -15 0.5 0.0078130001 ) ( 2757.5 223.5 -14 0.5 0.015625 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( 2757.5 223.5 -16 0 0 ) ( 2757.5 223.5 -15 0 0.0078130001 ) ( 2757.5 223.5 -14 0 0.015625 ) )
-( ( 2906.2451171875 242.2451171875 -16 1.515625 0 ) ( 2906.2451171875 242.2451171875 -15 1.515625 0.0078130001 ) ( 2906.2451171875 242.2451171875 -14 1.515625 0.015625 ) )
-( ( 2887.5 95.5 -16 3.015625 0 ) ( 2887.5 95.5 -15 3.015625 0.0078130001 ) ( 2887.5 95.5 -14 3.015625 0.015625 ) )
-)
-}
-}
-// brush 3
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( 2757.5 287.5 -14 0 0.015625 ) ( 2757.5 287.5 -15 0 0.0078130001 ) ( 2757.5 287.5 -16 0 0 ) )
-( ( 2951.5 287.5 -14 1.515625 0.015625 ) ( 2951.5 287.5 -15 1.515625 0.0078130001 ) ( 2951.5 287.5 -16 1.515625 0 ) )
-( ( 2951.5 95.5 -14 3.015625 0.015625 ) ( 2951.5 95.5 -15 3.015625 0.0078130001 ) ( 2951.5 95.5 -16 3.015625 0 ) )
-)
-}
-}
-}
-// entity 217
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( 2757.5 -96.5 -14 0 0.5 ) ( 2757.5 -64.5 -14 0 0.25 ) ( 2757.5 -32.5 -14 0 0 ) )
-( ( 2951.5 -96.5 -14 1.515625 0.5 ) ( 2928.8725585938 -73.8725585938 -14 1.515625 0.25 ) ( 2906.2451171875 -51.2451171875 -14 1.515625 0 ) )
-( ( 2951.5 95.5 -14 3.015625 0.5 ) ( 2919.5 95.5 -14 3.015625 0.25 ) ( 2887.5 95.5 -14 3.015625 0 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( 2757.5 -96.5 -14 0 0.015625 ) ( 2757.5 -96.5 -15 0 0.0078130001 ) ( 2757.5 -96.5 -16 0 0 ) )
-( ( 2757.5 -64.5 -14 0.25 0.015625 ) ( 2757.5 -64.5 -15 0.25 0.0078130001 ) ( 2757.5 -64.5 -16 0.25 0 ) )
-( ( 2757.5 -32.5 -14 0.5 0.015625 ) ( 2757.5 -32.5 -15 0.5 0.0078130001 ) ( 2757.5 -32.5 -16 0.5 0 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( 2757.5 -32.5 -14 0 0.015625 ) ( 2757.5 -32.5 -15 0 0.0078130001 ) ( 2757.5 -32.5 -16 0 0 ) )
-( ( 2906.2451171875 -51.2451171875 -14 1.515625 0.015625 ) ( 2906.2451171875 -51.2451171875 -15 1.515625 0.0078130001 ) ( 2906.2451171875 -51.2451171875 -16 1.515625 0 ) )
-( ( 2887.5 95.5 -14 3.015625 0.015625 ) ( 2887.5 95.5 -15 3.015625 0.0078130001 ) ( 2887.5 95.5 -16 3.015625 0 ) )
-)
-}
-}
-// brush 3
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( 2757.5 -96.5 -16 0 0 ) ( 2757.5 -96.5 -15 0 0.0078130001 ) ( 2757.5 -96.5 -14 0 0.015625 ) )
-( ( 2951.5 -96.5 -16 1.515625 0 ) ( 2951.5 -96.5 -15 1.515625 0.0078130001 ) ( 2951.5 -96.5 -14 1.515625 0.015625 ) )
-( ( 2951.5 95.5 -16 3.015625 0 ) ( 2951.5 95.5 -15 3.015625 0.0078130001 ) ( 2951.5 95.5 -14 3.015625 0.015625 ) )
-)
-}
-}
-}
-// entity 218
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( 2757.5 -1056.25 -14 0 0.5 ) ( 2757.5 -1024.25 -14 0 0.25 ) ( 2757.5 -992.25 -14 0 0 ) )
-( ( 2951.5 -1056.25 -14 1.515625 0.5 ) ( 2928.8725585938 -1033.6225585938 -14 1.515625 0.25 ) ( 2906.2451171875 -1010.9951171875 -14 1.515625 0 ) )
-( ( 2951.5 -864.25 -14 3.015625 0.5 ) ( 2919.5 -864.25 -14 3.015625 0.25 ) ( 2887.5 -864.25 -14 3.015625 0 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( 2757.5 -1056.25 -14 0 0.015625 ) ( 2757.5 -1056.25 -15 0 0.0078130001 ) ( 2757.5 -1056.25 -16 0 0 ) )
-( ( 2757.5 -1024.25 -14 0.25 0.015625 ) ( 2757.5 -1024.25 -15 0.25 0.0078130001 ) ( 2757.5 -1024.25 -16 0.25 0 ) )
-( ( 2757.5 -992.25 -14 0.5 0.015625 ) ( 2757.5 -992.25 -15 0.5 0.0078130001 ) ( 2757.5 -992.25 -16 0.5 0 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( 2757.5 -992.25 -14 0 0.015625 ) ( 2757.5 -992.25 -15 0 0.0078130001 ) ( 2757.5 -992.25 -16 0 0 ) )
-( ( 2906.2451171875 -1010.9951171875 -14 1.515625 0.015625 ) ( 2906.2451171875 -1010.9951171875 -15 1.515625 0.0078130001 ) ( 2906.2451171875 -1010.9951171875 -16 1.515625 0 ) )
-( ( 2887.5 -864.25 -14 3.015625 0.015625 ) ( 2887.5 -864.25 -15 3.015625 0.0078130001 ) ( 2887.5 -864.25 -16 3.015625 0 ) )
-)
-}
-}
-// brush 3
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( 2757.5 -1056.25 -16 0 0 ) ( 2757.5 -1056.25 -15 0 0.0078130001 ) ( 2757.5 -1056.25 -14 0 0.015625 ) )
-( ( 2951.5 -1056.25 -16 1.515625 0 ) ( 2951.5 -1056.25 -15 1.515625 0.0078130001 ) ( 2951.5 -1056.25 -14 1.515625 0.015625 ) )
-( ( 2951.5 -864.25 -16 3.015625 0 ) ( 2951.5 -864.25 -15 3.015625 0.0078130001 ) ( 2951.5 -864.25 -14 3.015625 0.015625 ) )
-)
-}
-}
-}
-// entity 219
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( 2757.5 -736.25 -14 0 0 ) ( 2757.5 -704.25 -14 0 0.25 ) ( 2757.5 -672.25 -14 0 0.5 ) )
-( ( 2906.2451171875 -717.5048828125 -14 1.515625 0 ) ( 2928.8725585938 -694.8774414062 -14 1.515625 0.25 ) ( 2951.5 -672.25 -14 1.515625 0.5 ) )
-( ( 2887.5 -864.25 -14 3.015625 0 ) ( 2919.5 -864.25 -14 3.015625 0.25 ) ( 2951.5 -864.25 -14 3.015625 0.5 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( 2757.5 -672.25 -16 0 0 ) ( 2757.5 -672.25 -15 0 0.0078130001 ) ( 2757.5 -672.25 -14 0 0.015625 ) )
-( ( 2757.5 -704.25 -16 0.25 0 ) ( 2757.5 -704.25 -15 0.25 0.0078130001 ) ( 2757.5 -704.25 -14 0.25 0.015625 ) )
-( ( 2757.5 -736.25 -16 0.5 0 ) ( 2757.5 -736.25 -15 0.5 0.0078130001 ) ( 2757.5 -736.25 -14 0.5 0.015625 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( 2757.5 -736.25 -16 0 0 ) ( 2757.5 -736.25 -15 0 0.0078130001 ) ( 2757.5 -736.25 -14 0 0.015625 ) )
-( ( 2906.2451171875 -717.5048828125 -16 1.515625 0 ) ( 2906.2451171875 -717.5048828125 -15 1.515625 0.0078130001 ) ( 2906.2451171875 -717.5048828125 -14 1.515625 0.015625 ) )
-( ( 2887.5 -864.25 -16 3.015625 0 ) ( 2887.5 -864.25 -15 3.015625 0.0078130001 ) ( 2887.5 -864.25 -14 3.015625 0.015625 ) )
-)
-}
-}
-// brush 3
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( 2757.5 -672.25 -14 0 0.015625 ) ( 2757.5 -672.25 -15 0 0.0078130001 ) ( 2757.5 -672.25 -16 0 0 ) )
-( ( 2951.5 -672.25 -14 1.515625 0.015625 ) ( 2951.5 -672.25 -15 1.515625 0.0078130001 ) ( 2951.5 -672.25 -16 1.515625 0 ) )
-( ( 2951.5 -864.25 -14 3.015625 0.015625 ) ( 2951.5 -864.25 -15 3.015625 0.0078130001 ) ( 2951.5 -864.25 -16 3.015625 0 ) )
-)
-}
-}
-}
-// entity 220
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( -18.25 -31.75 -14 0 0 ) ( -18.25 -63.75 -14 0 0.25 ) ( -18.25 -95.75 -14 0 0.5 ) )
-( ( -166.9952392578 -50.4951171875 -14 1.515625 0 ) ( -189.6225585938 -73.1225585938 -14 1.515625 0.25 ) ( -212.25 -95.75 -14 1.515625 0.5 ) )
-( ( -148.25 96.25 -14 3.015625 0 ) ( -180.25 96.25 -14 3.015625 0.25 ) ( -212.25 96.25 -14 3.015625 0.5 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( -18.25 -95.75 -16 0 0 ) ( -18.25 -95.75 -15 0 0.0078130001 ) ( -18.25 -95.75 -14 0 0.015625 ) )
-( ( -18.25 -63.75 -16 0.25 0 ) ( -18.25 -63.75 -15 0.25 0.0078130001 ) ( -18.25 -63.75 -14 0.25 0.015625 ) )
-( ( -18.25 -31.75 -16 0.5 0 ) ( -18.25 -31.75 -15 0.5 0.0078130001 ) ( -18.25 -31.75 -14 0.5 0.015625 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( -18.25 -31.75 -16 0 0 ) ( -18.25 -31.75 -15 0 0.0078130001 ) ( -18.25 -31.75 -14 0 0.015625 ) )
-( ( -166.9952392578 -50.4951171875 -16 1.515625 0 ) ( -166.9952392578 -50.4951171875 -15 1.515625 0.0078130001 ) ( -166.9952392578 -50.4951171875 -14 1.515625 0.015625 ) )
-( ( -148.25 96.25 -16 3.015625 0 ) ( -148.25 96.25 -15 3.015625 0.0078130001 ) ( -148.25 96.25 -14 3.015625 0.015625 ) )
-)
-}
-}
-// brush 3
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( -18.25 -95.75 -14 0 0.015625 ) ( -18.25 -95.75 -15 0 0.0078130001 ) ( -18.25 -95.75 -16 0 0 ) )
-( ( -212.25 -95.75 -14 1.515625 0.015625 ) ( -212.25 -95.75 -15 1.515625 0.0078130001 ) ( -212.25 -95.75 -16 1.515625 0 ) )
-( ( -212.25 96.25 -14 3.015625 0.015625 ) ( -212.25 96.25 -15 3.015625 0.0078130001 ) ( -212.25 96.25 -16 3.015625 0 ) )
-)
-}
-}
-}
-// entity 221
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( -18.25 288.25 -14 0 0.5 ) ( -18.25 256.25 -14 0 0.25 ) ( -18.25 224.25 -14 0 0 ) )
-( ( -212.25 288.25 -14 1.515625 0.5 ) ( -189.6225585938 265.6225585938 -14 1.515625 0.25 ) ( -166.9952392578 242.9951171875 -14 1.515625 0 ) )
-( ( -212.25 96.25 -14 3.015625 0.5 ) ( -180.25 96.25 -14 3.015625 0.25 ) ( -148.25 96.25 -14 3.015625 0 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( -18.25 288.25 -14 0 0.015625 ) ( -18.25 288.25 -15 0 0.0078130001 ) ( -18.25 288.25 -16 0 0 ) )
-( ( -18.25 256.25 -14 0.25 0.015625 ) ( -18.25 256.25 -15 0.25 0.0078130001 ) ( -18.25 256.25 -16 0.25 0 ) )
-( ( -18.25 224.25 -14 0.5 0.015625 ) ( -18.25 224.25 -15 0.5 0.0078130001 ) ( -18.25 224.25 -16 0.5 0 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( -18.25 224.25 -14 0 0.015625 ) ( -18.25 224.25 -15 0 0.0078130001 ) ( -18.25 224.25 -16 0 0 ) )
-( ( -166.9952392578 242.9951171875 -14 1.515625 0.015625 ) ( -166.9952392578 242.9951171875 -15 1.515625 0.0078130001 ) ( -166.9952392578 242.9951171875 -16 1.515625 0 ) )
-( ( -148.25 96.25 -14 3.015625 0.015625 ) ( -148.25 96.25 -15 3.015625 0.0078130001 ) ( -148.25 96.25 -16 3.015625 0 ) )
-)
-}
-}
-// brush 3
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( -18.25 288.25 -16 0 0 ) ( -18.25 288.25 -15 0 0.0078130001 ) ( -18.25 288.25 -14 0 0.015625 ) )
-( ( -212.25 288.25 -16 1.515625 0 ) ( -212.25 288.25 -15 1.515625 0.0078130001 ) ( -212.25 288.25 -14 1.515625 0.015625 ) )
-( ( -212.25 96.25 -16 3.015625 0 ) ( -212.25 96.25 -15 3.015625 0.0078130001 ) ( -212.25 96.25 -14 3.015625 0.015625 ) )
-)
-}
-}
-}
-// entity 222
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( -18.25 -671.5 -14 0 0.5 ) ( -18.25 -703.5 -14 0 0.25 ) ( -18.25 -735.5 -14 0 0 ) )
-( ( -212.25 -671.5 -14 1.515625 0.5 ) ( -189.6225585938 -694.1274414062 -14 1.515625 0.25 ) ( -166.9952392578 -716.7548828125 -14 1.515625 0 ) )
-( ( -212.25 -863.5 -14 3.015625 0.5 ) ( -180.25 -863.5 -14 3.015625 0.25 ) ( -148.25 -863.5 -14 3.015625 0 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( -18.25 -671.5 -14 0 0.015625 ) ( -18.25 -671.5 -15 0 0.0078130001 ) ( -18.25 -671.5 -16 0 0 ) )
-( ( -18.25 -703.5 -14 0.25 0.015625 ) ( -18.25 -703.5 -15 0.25 0.0078130001 ) ( -18.25 -703.5 -16 0.25 0 ) )
-( ( -18.25 -735.5 -14 0.5 0.015625 ) ( -18.25 -735.5 -15 0.5 0.0078130001 ) ( -18.25 -735.5 -16 0.5 0 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( -18.25 -735.5 -14 0 0.015625 ) ( -18.25 -735.5 -15 0 0.0078130001 ) ( -18.25 -735.5 -16 0 0 ) )
-( ( -166.9952392578 -716.7548828125 -14 1.515625 0.015625 ) ( -166.9952392578 -716.7548828125 -15 1.515625 0.0078130001 ) ( -166.9952392578 -716.7548828125 -16 1.515625 0 ) )
-( ( -148.25 -863.5 -14 3.015625 0.015625 ) ( -148.25 -863.5 -15 3.015625 0.0078130001 ) ( -148.25 -863.5 -16 3.015625 0 ) )
-)
-}
-}
-// brush 3
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( -18.25 -671.5 -16 0 0 ) ( -18.25 -671.5 -15 0 0.0078130001 ) ( -18.25 -671.5 -14 0 0.015625 ) )
-( ( -212.25 -671.5 -16 1.515625 0 ) ( -212.25 -671.5 -15 1.515625 0.0078130001 ) ( -212.25 -671.5 -14 1.515625 0.015625 ) )
-( ( -212.25 -863.5 -16 3.015625 0 ) ( -212.25 -863.5 -15 3.015625 0.0078130001 ) ( -212.25 -863.5 -14 3.015625 0.015625 ) )
-)
-}
-}
-}
-// entity 223
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( -18.25 -991.5 -14 0 0 ) ( -18.25 -1023.5 -14 0 0.25 ) ( -18.25 -1055.5 -14 0 0.5 ) )
-( ( -166.9952392578 -1010.2451171875 -14 1.515625 0 ) ( -189.6225585938 -1032.8725585938 -14 1.515625 0.25 ) ( -212.25 -1055.5 -14 1.515625 0.5 ) )
-( ( -148.25 -863.5 -14 3.015625 0 ) ( -180.25 -863.5 -14 3.015625 0.25 ) ( -212.25 -863.5 -14 3.015625 0.5 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( -18.25 -1055.5 -16 0 0 ) ( -18.25 -1055.5 -15 0 0.0078130001 ) ( -18.25 -1055.5 -14 0 0.015625 ) )
-( ( -18.25 -1023.5 -16 0.25 0 ) ( -18.25 -1023.5 -15 0.25 0.0078130001 ) ( -18.25 -1023.5 -14 0.25 0.015625 ) )
-( ( -18.25 -991.5 -16 0.5 0 ) ( -18.25 -991.5 -15 0.5 0.0078130001 ) ( -18.25 -991.5 -14 0.5 0.015625 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( -18.25 -991.5 -16 0 0 ) ( -18.25 -991.5 -15 0 0.0078130001 ) ( -18.25 -991.5 -14 0 0.015625 ) )
-( ( -166.9952392578 -1010.2451171875 -16 1.515625 0 ) ( -166.9952392578 -1010.2451171875 -15 1.515625 0.0078130001 ) ( -166.9952392578 -1010.2451171875 -14 1.515625 0.015625 ) )
-( ( -148.25 -863.5 -16 3.015625 0 ) ( -148.25 -863.5 -15 3.015625 0.0078130001 ) ( -148.25 -863.5 -14 3.015625 0.015625 ) )
-)
-}
-}
-// brush 3
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( -18.25 -1055.5 -14 0 0.015625 ) ( -18.25 -1055.5 -15 0 0.0078130001 ) ( -18.25 -1055.5 -16 0 0 ) )
-( ( -212.25 -1055.5 -14 1.515625 0.015625 ) ( -212.25 -1055.5 -15 1.515625 0.0078130001 ) ( -212.25 -1055.5 -16 1.515625 0 ) )
-( ( -212.25 -863.5 -14 3.015625 0.015625 ) ( -212.25 -863.5 -15 3.015625 0.0078130001 ) ( -212.25 -863.5 -16 3.015625 0 ) )
-)
-}
-}
-}
-// entity 224
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( -66 -896 -14 0 0 ) ( -66 -864 -14 0 0.25 ) ( -66 -832 -14 0 0.5 ) )
-( ( 82.7451934814 -877.2548217773 -14 1.515625 0 ) ( 105.3726119995 -854.6274414062 -14 1.515625 0.25 ) ( 128.0000305176 -832 -14 1.515625 0.5 ) )
-( ( 64.0000305176 -1024 -14 3.015625 0 ) ( 96.0000305176 -1024 -14 3.015625 0.25 ) ( 128.0000305176 -1024 -14 3.015625 0.5 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( -66 -832 -16 0 0 ) ( -66 -832 -15 0 0.0078130001 ) ( -66 -832 -14 0 0.015625 ) )
-( ( -66 -864 -16 0.25 0 ) ( -66 -864 -15 0.25 0.0078130001 ) ( -66 -864 -14 0.25 0.015625 ) )
-( ( -66 -896 -16 0.5 0 ) ( -66 -896 -15 0.5 0.0078130001 ) ( -66 -896 -14 0.5 0.015625 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( -66 -896 -16 0 0 ) ( -66 -896 -15 0 0.0078130001 ) ( -66 -896 -14 0 0.015625 ) )
-( ( 82.7451934814 -877.2548217773 -16 1.515625 0 ) ( 82.7451934814 -877.2548217773 -15 1.515625 0.0078130001 ) ( 82.7451934814 -877.2548217773 -14 1.515625 0.015625 ) )
-( ( 64.0000305176 -1024 -16 3.015625 0 ) ( 64.0000305176 -1024 -15 3.015625 0.0078130001 ) ( 64.0000305176 -1024 -14 3.015625 0.015625 ) )
-)
-}
-}
-// brush 3
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( -66 -832 -14 0 0.015625 ) ( -66 -832 -15 0 0.0078130001 ) ( -66 -832 -16 0 0 ) )
-( ( 128.0000305176 -832 -14 1.515625 0.015625 ) ( 128.0000305176 -832 -15 1.515625 0.0078130001 ) ( 128.0000305176 -832 -16 1.515625 0 ) )
-( ( 128.0000305176 -1024 -14 3.015625 0.015625 ) ( 128.0000305176 -1024 -15 3.015625 0.0078130001 ) ( 128.0000305176 -1024 -16 3.015625 0 ) )
-)
-}
-}
-}
-// entity 225
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( -66 -1216 -14 0 0.5 ) ( -66 -1184 -14 0 0.25 ) ( -66 -1152 -14 0 0 ) )
-( ( 128.0000305176 -1216 -14 1.515625 0.5 ) ( 105.3726119995 -1193.3725585938 -14 1.515625 0.25 ) ( 82.7451934814 -1170.7451171875 -14 1.515625 0 ) )
-( ( 128.0000305176 -1024 -14 3.015625 0.5 ) ( 96.0000305176 -1024 -14 3.015625 0.25 ) ( 64.0000305176 -1024 -14 3.015625 0 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( -66 -1152 -14 0 0.015625 ) ( -66 -1152 -15 0 0.0078130001 ) ( -66 -1152 -16 0 0 ) )
-( ( 82.7451934814 -1170.7451171875 -14 1.515625 0.015625 ) ( 82.7451934814 -1170.7451171875 -15 1.515625 0.0078130001 ) ( 82.7451934814 -1170.7451171875 -16 1.515625 0 ) )
-( ( 64.0000305176 -1024 -14 3.015625 0.015625 ) ( 64.0000305176 -1024 -15 3.015625 0.0078130001 ) ( 64.0000305176 -1024 -16 3.015625 0 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( -66 -1216 -16 0 0 ) ( -66 -1216 -15 0 0.0078130001 ) ( -66 -1216 -14 0 0.015625 ) )
-( ( 128.0000305176 -1216 -16 1.515625 0 ) ( 128.0000305176 -1216 -15 1.515625 0.0078130001 ) ( 128.0000305176 -1216 -14 1.515625 0.015625 ) )
-( ( 128.0000305176 -1024 -16 3.015625 0 ) ( 128.0000305176 -1024 -15 3.015625 0.0078130001 ) ( 128.0000305176 -1024 -14 3.015625 0.015625 ) )
-)
-}
-}
-}
-// entity 226
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( -66 64 -14 0 0.5 ) ( -66 96 -14 0 0.25 ) ( -66 128 -14 0 0 ) )
-( ( 128.0000305176 64 -14 1.515625 0.5 ) ( 105.3726119995 86.6274108887 -14 1.515625 0.25 ) ( 82.7451934814 109.2548217773 -14 1.515625 0 ) )
-( ( 128.0000305176 256 -14 3.015625 0.5 ) ( 96.0000305176 256 -14 3.015625 0.25 ) ( 64.0000305176 256 -14 3.015625 0 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( -66 64 -14 0 0.015625 ) ( -66 64 -15 0 0.0078130001 ) ( -66 64 -16 0 0 ) )
-( ( -66 96 -14 0.25 0.015625 ) ( -66 96 -15 0.25 0.0078130001 ) ( -66 96 -16 0.25 0 ) )
-( ( -66 128 -14 0.5 0.015625 ) ( -66 128 -15 0.5 0.0078130001 ) ( -66 128 -16 0.5 0 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( -66 128 -14 0 0.015625 ) ( -66 128 -15 0 0.0078130001 ) ( -66 128 -16 0 0 ) )
-( ( 82.7451934814 109.2548217773 -14 1.515625 0.015625 ) ( 82.7451934814 109.2548217773 -15 1.515625 0.0078130001 ) ( 82.7451934814 109.2548217773 -16 1.515625 0 ) )
-( ( 64.0000305176 256 -14 3.015625 0.015625 ) ( 64.0000305176 256 -15 3.015625 0.0078130001 ) ( 64.0000305176 256 -16 3.015625 0 ) )
-)
-}
-}
-// brush 3
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( -66 64 -16 0 0 ) ( -66 64 -15 0 0.0078130001 ) ( -66 64 -14 0 0.015625 ) )
-( ( 128.0000305176 64 -16 1.515625 0 ) ( 128.0000305176 64 -15 1.515625 0.0078130001 ) ( 128.0000305176 64 -14 1.515625 0.015625 ) )
-( ( 128.0000305176 256 -16 3.015625 0 ) ( 128.0000305176 256 -15 3.015625 0.0078130001 ) ( 128.0000305176 256 -14 3.015625 0.015625 ) )
-)
-}
-}
-}
-// entity 227
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( -66 384 -14 0 0 ) ( -66 416 -14 0 0.25 ) ( -66 448 -14 0 0.5 ) )
-( ( 82.7451934814 402.7451782227 -14 1.515625 0 ) ( 105.3726119995 425.3725891113 -14 1.515625 0.25 ) ( 128.0000305176 448 -14 1.515625 0.5 ) )
-( ( 64.0000305176 256 -14 3.015625 0 ) ( 96.0000305176 256 -14 3.015625 0.25 ) ( 128.0000305176 256 -14 3.015625 0.5 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( -66 384 -16 0 0 ) ( -66 384 -15 0 0.0078130001 ) ( -66 384 -14 0 0.015625 ) )
-( ( 82.7451934814 402.7451782227 -16 1.515625 0 ) ( 82.7451934814 402.7451782227 -15 1.515625 0.0078130001 ) ( 82.7451934814 402.7451782227 -14 1.515625 0.015625 ) )
-( ( 64.0000305176 256 -16 3.015625 0 ) ( 64.0000305176 256 -15 3.015625 0.0078130001 ) ( 64.0000305176 256 -14 3.015625 0.015625 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( -66 448 -14 0 0.015625 ) ( -66 448 -15 0 0.0078130001 ) ( -66 448 -16 0 0 ) )
-( ( 128.0000305176 448 -14 1.515625 0.015625 ) ( 128.0000305176 448 -15 1.515625 0.0078130001 ) ( 128.0000305176 448 -16 1.515625 0 ) )
-( ( 128.0000305176 256 -14 3.015625 0.015625 ) ( 128.0000305176 256 -15 3.015625 0.0078130001 ) ( 128.0000305176 256 -16 3.015625 0 ) )
-)
-}
-}
-}
-// entity 228
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( -66.0000305176 448 -14 0 0.5 ) ( -66.0000305176 416 -14 0 0.25 ) ( -66.0000305176 384 -14 0 0 ) )
-( ( -576 448 -14 3.984375 0.5 ) ( -553.3725585938 425.3725585938 -14 3.984375 0.25 ) ( -530.7451782227 402.7451171875 -14 3.984375 0 ) )
-( ( -576 0 -14 7.484375 0.5 ) ( -544 0 -14 7.484375 0.25 ) ( -512 0 -14 7.484375 0 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( -66.0000305176 384 -14 0 0.015625 ) ( -66.0000305176 384 -15 0 0.0078130001 ) ( -66.0000305176 384 -16 0 0 ) )
-( ( -530.7451782227 402.7451171875 -14 3.984375 0.015625 ) ( -530.7451782227 402.7451171875 -15 3.984375 0.0078130001 ) ( -530.7451782227 402.7451171875 -16 3.984375 0 ) )
-( ( -512 0 -14 7.484375 0.015625 ) ( -512 0 -15 7.484375 0.0078130001 ) ( -512 0 -16 7.484375 0 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( -66.0000305176 448 -16 0 0 ) ( -66.0000305176 448 -15 0 0.0078130001 ) ( -66.0000305176 448 -14 0 0.015625 ) )
-( ( -576 448 -16 3.984375 0 ) ( -576 448 -15 3.984375 0.0078130001 ) ( -576 448 -14 3.984375 0.015625 ) )
-( ( -576 0 -16 7.484375 0 ) ( -576 0 -15 7.484375 0.0078130001 ) ( -576 0 -14 7.484375 0.015625 ) )
-)
-}
-}
-}
-// entity 229
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( -66.0000228882 -1152 -14 0 0 ) ( -66.0000228882 -1184 -14 0 0.25 ) ( -66.0000228882 -1216 -14 0 0.5 ) )
-( ( -530.7451782227 -1170.7451171875 -14 3.984375 0 ) ( -553.3725585938 -1193.3725585938 -14 3.984375 0.25 ) ( -576 -1216 -14 3.984375 0.5 ) )
-( ( -512 -768 -14 7.484375 0 ) ( -544 -768 -14 7.484375 0.25 ) ( -576 -768 -14 7.484375 0.5 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( -66.0000228882 -1152 -16 0 0 ) ( -66.0000228882 -1152 -15 0 0.0078130001 ) ( -66.0000228882 -1152 -14 0 0.015625 ) )
-( ( -530.7451782227 -1170.7451171875 -16 3.984375 0 ) ( -530.7451782227 -1170.7451171875 -15 3.984375 0.0078130001 ) ( -530.7451782227 -1170.7451171875 -14 3.984375 0.015625 ) )
-( ( -512 -768 -16 7.484375 0 ) ( -512 -768 -15 7.484375 0.0078130001 ) ( -512 -768 -14 7.484375 0.015625 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( -66.0000228882 -1216 -14 0 0.015625 ) ( -66.0000228882 -1216 -15 0 0.0078130001 ) ( -66.0000228882 -1216 -16 0 0 ) )
-( ( -576 -1216 -14 3.984375 0.015625 ) ( -576 -1216 -15 3.984375 0.0078130001 ) ( -576 -1216 -16 3.984375 0 ) )
-( ( -576 -768 -14 7.484375 0.015625 ) ( -576 -768 -15 7.484375 0.0078130001 ) ( -576 -768 -16 7.484375 0 ) )
-)
-}
-}
-}
-// entity 230
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( -512 -768 -14 0 0 ) ( -544 -768 -14 0 0.25 ) ( -576 -768 -14 0 0.5 ) )
-( ( -530.7451782227 -621.2548217773 -14 1.5 0 ) ( -553.3725585938 -598.6274414062 -14 1.5 0.25 ) ( -576 -576 -14 1.5 0.5 ) )
-( ( -384 -640 -14 3 0 ) ( -384 -608 -14 3 0.25 ) ( -384 -576 -14 3 0.5 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( -512 -768 -16 0 0.015625 ) ( -512 -768 -15 0 0.0078130001 ) ( -512 -768 -14 0 0 ) )
-( ( -530.7451782227 -621.2548217773 -16 1.5 0.015625 ) ( -530.7451782227 -621.2548217773 -15 1.5 0.0078130001 ) ( -530.7451782227 -621.2548217773 -14 1.5 0 ) )
-( ( -384 -640 -16 3 0.015625 ) ( -384 -640 -15 3 0.0078130001 ) ( -384 -640 -14 3 0 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( -576 -768 -14 0 0 ) ( -576 -768 -15 0 0.0078130001 ) ( -576 -768 -16 0 0.015625 ) )
-( ( -576 -576 -14 1.5 0 ) ( -576 -576 -15 1.5 0.0078130001 ) ( -576 -576 -16 1.5 0.015625 ) )
-( ( -384 -576 -14 3 0 ) ( -384 -576 -15 3 0.0078130001 ) ( -384 -576 -16 3 0.015625 ) )
-)
-}
-}
-}
-// entity 231
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( -576 0.000023 -14 0 0.5 ) ( -544 0.000023 -14 0 0.25 ) ( -512 0.000023 -14 0 0 ) )
-( ( -576 -192 -14 1.5 0.5 ) ( -553.3725585938 -169.3725891113 -14 1.5 0.25 ) ( -530.7451782227 -146.7451629639 -14 1.5 0 ) )
-( ( -384 -192 -14 3 0.5 ) ( -384 -160 -14 3 0.25 ) ( -384 -128 -14 3 0 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( -512 0.000023 -14 0 0 ) ( -512 0.000023 -15 0 0.0078130001 ) ( -512 0.000023 -16 0 0.015625 ) )
-( ( -530.7451782227 -146.7451629639 -14 1.5 0 ) ( -530.7451782227 -146.7451629639 -15 1.5 0.0078130001 ) ( -530.7451782227 -146.7451629639 -16 1.5 0.015625 ) )
-( ( -384 -128 -14 3 0 ) ( -384 -128 -15 3 0.0078130001 ) ( -384 -128 -16 3 0.015625 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( -576 0.000023 -16 0 0.015625 ) ( -576 0.000023 -15 0 0.0078130001 ) ( -576 0.000023 -14 0 0 ) )
-( ( -576 -192 -16 1.5 0.015625 ) ( -576 -192 -15 1.5 0.0078130001 ) ( -576 -192 -14 1.5 0 ) )
-( ( -384 -192 -16 3 0.015625 ) ( -384 -192 -15 3 0.0078130001 ) ( -384 -192 -14 3 0 ) )
-)
-}
-}
-}
-// entity 232
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( -256 -384 -13.9999990463 0 0 ) ( -224 -384 -13.9999990463 0 0.25 ) ( -192 -384 -13.9999990463 0 0.5 ) )
-( ( -237.2548370361 -594.7451782227 -13.9999990463 2 0 ) ( -214.6274108887 -617.3725585938 -13.9999990463 2 0.25 ) ( -192 -640 -13.9999990463 2 0.5 ) )
-( ( -384 -576 -13.9999990463 3.5 0 ) ( -384 -608 -13.9999990463 3.5 0.25 ) ( -384 -640 -13.9999990463 3.5 0.5 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( -256 -384 -15.9999990463 0 0.015625 ) ( -256 -384 -14.9999990463 0 0.0078130001 ) ( -256 -384 -13.9999990463 0 0 ) )
-( ( -237.2548370361 -594.7451782227 -15.9999990463 2 0.015625 ) ( -237.2548370361 -594.7451782227 -14.9999990463 2 0.0078130001 ) ( -237.2548370361 -594.7451782227 -13.9999990463 2 0 ) )
-( ( -384 -576 -15.9999990463 3.5 0.015625 ) ( -384 -576 -14.9999990463 3.5 0.0078130001 ) ( -384 -576 -13.9999990463 3.5 0 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( -192 -384 -13.9999990463 0 0 ) ( -192 -384 -14.9999990463 0 0.0078130001 ) ( -192 -384 -15.9999990463 0 0.015625 ) )
-( ( -192 -640 -13.9999990463 2 0 ) ( -192 -640 -14.9999990463 2 0.0078130001 ) ( -192 -640 -15.9999990463 2 0.015625 ) )
-( ( -384 -640 -13.9999990463 3.5 0 ) ( -384 -640 -14.9999990463 3.5 0.0078130001 ) ( -384 -640 -15.9999990463 3.5 0.015625 ) )
-)
-}
-}
-}
-// entity 233
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( -192 -384 -13.9999990463 0 0.5 ) ( -224 -384 -13.9999990463 0 0.25 ) ( -256 -384 -13.9999990463 0 0 ) )
-( ( -192 -128 -13.9999990463 2 0.5 ) ( -214.6274108887 -150.6274108887 -13.9999990463 2 0.25 ) ( -237.2548370361 -173.2548370361 -13.9999990463 2 0 ) )
-( ( -384 -128 -13.9999990463 3.5 0.5 ) ( -384 -160 -13.9999990463 3.5 0.25 ) ( -384 -192 -13.9999990463 3.5 0 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( -256 -384 -13.9999990463 0 0 ) ( -256 -384 -14.9999990463 0 0.0078130001 ) ( -256 -384 -15.9999990463 0 0.015625 ) )
-( ( -237.2548370361 -173.2548370361 -13.9999990463 2 0 ) ( -237.2548370361 -173.2548370361 -14.9999990463 2 0.0078130001 ) ( -237.2548370361 -173.2548370361 -15.9999990463 2 0.015625 ) )
-( ( -384 -192 -13.9999990463 3.5 0 ) ( -384 -192 -14.9999990463 3.5 0.0078130001 ) ( -384 -192 -15.9999990463 3.5 0.015625 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( -192 -384 -15.9999990463 0 0.015625 ) ( -192 -384 -14.9999990463 0 0.0078130001 ) ( -192 -384 -13.9999990463 0 0 ) )
-( ( -192 -128 -15.9999990463 2 0.015625 ) ( -192 -128 -14.9999990463 2 0.0078130001 ) ( -192 -128 -13.9999990463 2 0 ) )
-( ( -384 -128 -15.9999990463 3.5 0.015625 ) ( -384 -128 -14.9999990463 3.5 0.0078130001 ) ( -384 -128 -13.9999990463 3.5 0 ) )
-)
-}
-}
-}
-// entity 234
-{
-"classname" "func_group"
-"type" "patchCapped"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 2416.5 -395 -95 18.001953125 3.0019528866 ) ( 2416.5 -330.75 -95 18.001953125 2.5 ) ( 2480.375 -330.75 -95 18.5009765625 2.5 ) )
-( ( 2416.5 -459.25 -95 18.001953125 3.5039060116 ) ( 2480.375 -395 -190 18.5009765625 3.0019528866 ) ( 2544.25 -330.75 -95 19 2.5 ) )
-( ( 2480.375 -459.25 -95 18.5009765625 3.5039060116 ) ( 2544.25 -459.25 -95 19 3.5039060116 ) ( 2544.25 -395 -95 19 3.0019528866 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 2480.375 -330.75 -111 18.5009765625 2.5 ) ( 2416.5 -330.75 -111 18.001953125 2.5 ) ( 2416.5 -395 -111 18.001953125 3.0019528866 ) )
-( ( 2544.25 -330.75 -111 19 2.5 ) ( 2481.375 -395 -223 18.5009765625 3.0019528866 ) ( 2416.5 -459.25 -111 18.001953125 3.5039060116 ) )
-( ( 2544.25 -395 -111 19 3.0019528866 ) ( 2544.25 -459.25 -111 19 3.5039060116 ) ( 2480.375 -459.25 -111 18.5009765625 3.5039060116 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 9 3 0 0 0 )
-(
-( ( 2416.5 -395 -111 0 0.125 ) ( 2416.5 -395 -103 0 0.0625 ) ( 2416.5 -395 -95 0 0 ) )
-( ( 2416.5 -459.25 -111 0.5019530058 0.125 ) ( 2416.5 -459.25 -103 0.5019530058 0.0625 ) ( 2416.5 -459.25 -95 0.5019530058 0 ) )
-( ( 2480.375 -459.25 -111 1.0009770393 0.125 ) ( 2480.375 -459.25 -103 1.0009770393 0.0625 ) ( 2480.375 -459.25 -95 1.0009770393 0 ) )
-( ( 2544.25 -459.25 -111 1.5 0.125 ) ( 2544.25 -459.25 -103 1.5 0.0625 ) ( 2544.25 -459.25 -95 1.5 0 ) )
-( ( 2544.25 -395 -111 2.0019528866 0.125 ) ( 2544.25 -395 -103 2.0019528866 0.0625 ) ( 2544.25 -395 -95 2.0019528866 0 ) )
-( ( 2544.25 -330.75 -111 2.5039060116 0.125 ) ( 2544.25 -330.75 -103 2.5039060116 0.0625 ) ( 2544.25 -330.75 -95 2.5039060116 0 ) )
-( ( 2480.375 -330.75 -111 3.0029299259 0.125 ) ( 2480.375 -330.75 -103 3.0029299259 0.0625 ) ( 2480.375 -330.75 -95 3.0029299259 0 ) )
-( ( 2416.5 -330.75 -111 3.5019528866 0.125 ) ( 2416.5 -330.75 -103 3.5019528866 0.0625 ) ( 2416.5 -330.75 -95 3.5019528866 0 ) )
-( ( 2416.5 -395 -111 4.0039057732 0.125 ) ( 2416.5 -395 -103 4.0039057732 0.0625 ) ( 2416.5 -395 -95 4.0039057732 0 ) )
-)
-}
-}
-}
-// entity 235
-{
-"classname" "light"
-"_color" "1.000000 0.930311 0.704394"
-"light" "100"
-"origin" "1312 156 507"
-}
-// entity 236
-{
-"classname" "light"
-"_color" "1.000000 0.930311 0.704394"
-"light" "100"
-"origin" "1492 0 507"
-}
-// entity 237
-{
-"classname" "light"
-"_color" "1.000000 0.930311 0.704394"
-"light" "100"
-"origin" "1131 -24 507"
-}
-// entity 238
-{
-"classname" "light"
-"_color" "1.000000 0.930311 0.704394"
-"light" "100"
-"origin" "1132 -751 507"
-}
-// entity 239
-{
-"classname" "light"
-"_color" "1.000000 0.930311 0.704394"
-"light" "100"
-"origin" "1376 -206 507"
-}
-// entity 240
-{
-"classname" "light"
-"_color" "1.000000 0.930311 0.704394"
-"light" "100"
-"origin" "1383 -917 507"
-}
-// entity 241
-{
-"classname" "light"
-"_color" "1.000000 0.930311 0.704394"
-"light" "100"
-"origin" "1286 -556 507"
-}
-// entity 242
-{
-"classname" "light"
-"_color" "1.000000 0.930311 0.704394"
-"light" "100"
-"origin" "1490 -701 507"
-}
-// entity 243
-{
-"classname" "light"
-"_color" "0.668241 0.881508 1.000000"
-"light" "50"
-"origin" "1456 -840 458"
-}
-// entity 244
-{
-"classname" "light"
-"_color" "0.668241 0.881508 1.000000"
-"light" "50"
-"origin" "1160 -639 458"
-}
-// entity 245
-{
-"classname" "light"
-"_color" "0.668241 0.881508 1.000000"
-"light" "50"
-"origin" "1417 -591 458"
-}
-// entity 246
-{
-"classname" "light"
-"_color" "0.668241 0.881508 1.000000"
-"light" "50"
-"origin" "1210 -171 458"
-}
-// entity 247
-{
-"classname" "light"
-"_color" "0.668241 0.881508 1.000000"
-"light" "50"
-"origin" "1416 119 458"
-}
-// entity 248
-{
-"classname" "light"
-"_color" "0.668241 0.881508 1.000000"
-"light" "50"
-"origin" "1459 -128 458"
-}
-// entity 249
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-evil8_lights/e8minitrimlight
-( 9 3 0 0 0 )
-(
-( ( 1140.25 -28 514 0 0.125 ) ( 1140.75 -28 514 0 0.0625 ) ( 1141.25 -28 514 0 0 ) )
-( ( 1140.25 -203.75 514 1.3730469942 0.125 ) ( 1140.603515625 -203.396484375 514 1.3730469942 0.0625 ) ( 1140.9571533203 -203.0429077148 514 1.3730469942 0 ) )
-( ( 1312 -203.75 514 2.7148439884 0.125 ) ( 1312 -203.25 514 2.7148439884 0.0625 ) ( 1312 -202.75 514 2.7148439884 0 ) )
-( ( 1483.75 -203.75 514 4.0566411018 0.125 ) ( 1483.396484375 -203.396484375 514 4.0566411018 0.0625 ) ( 1483.0428466797 -203.0429077148 514 4.0566411018 0 ) )
-( ( 1483.75 -28 514 5.4296879768 0.125 ) ( 1483.25 -28 514 5.4296879768 0.0625 ) ( 1482.75 -28 514 5.4296879768 0 ) )
-( ( 1483.75 147.75 514 6.8027338982 0.125 ) ( 1483.396484375 147.396484375 514 6.8027338982 0.0625 ) ( 1483.0428466797 147.0429077148 514 6.8027338982 0 ) )
-( ( 1312 147.75 514 8.14453125 0.125 ) ( 1312 147.25 514 8.14453125 0.0625 ) ( 1312 146.75 514 8.14453125 0 ) )
-( ( 1140.25 147.75 514 9.486328125 0.125 ) ( 1140.603515625 147.396484375 514 9.486328125 0.0625 ) ( 1140.9571533203 147.0429077148 514 9.486328125 0 ) )
-( ( 1140.25 -28 514 10.859375 0.125 ) ( 1140.75 -28 514 10.859375 0.0625 ) ( 1141.25 -28 514 10.859375 0 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-evil8_lights/e8minitrimlight
-( 9 3 0 0 0 )
-(
-( ( 1141.25 -28 501 0 0 ) ( 1140.75 -28 501 0 0.0625 ) ( 1140.25 -28 501 0 0.125 ) )
-( ( 1140.9571533203 -203.0429077148 501 1.3730469942 0 ) ( 1140.603515625 -203.396484375 501 1.3730469942 0.0625 ) ( 1140.25 -203.75 501 1.3730469942 0.125 ) )
-( ( 1312 -202.75 501 2.7148439884 0 ) ( 1312 -203.25 501 2.7148439884 0.0625 ) ( 1312 -203.75 501 2.7148439884 0.125 ) )
-( ( 1483.0428466797 -203.0429077148 501 4.0566411018 0 ) ( 1483.396484375 -203.396484375 501 4.0566411018 0.0625 ) ( 1483.75 -203.75 501 4.0566411018 0.125 ) )
-( ( 1482.75 -28 501 5.4296879768 0 ) ( 1483.25 -28 501 5.4296879768 0.0625 ) ( 1483.75 -28 501 5.4296879768 0.125 ) )
-( ( 1483.0428466797 147.0429077148 501 6.8027338982 0 ) ( 1483.396484375 147.396484375 501 6.8027338982 0.0625 ) ( 1483.75 147.75 501 6.8027338982 0.125 ) )
-( ( 1312 146.75 501 8.14453125 0 ) ( 1312 147.25 501 8.14453125 0.0625 ) ( 1312 147.75 501 8.14453125 0.125 ) )
-( ( 1140.9571533203 147.0429077148 501 9.486328125 0 ) ( 1140.603515625 147.396484375 501 9.486328125 0.0625 ) ( 1140.25 147.75 501 9.486328125 0.125 ) )
-( ( 1141.25 -28 501 10.859375 0 ) ( 1140.75 -28 501 10.859375 0.0625 ) ( 1140.25 -28 501 10.859375 0.125 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-evil8_lights/e8minitrimlight
-( 9 3 0 0 0 )
-(
-( ( 1141.25 -28 514 0.0039059999 -0.25 ) ( 1141.25 -28 507.5 0.0039059999 0.5625 ) ( 1141.25 -28 501 0.0039059999 1.375 ) )
-( ( 1140.9571533203 -203.0429077148 514 1.3769530058 -0.25 ) ( 1140.9571533203 -203.0429077148 507.5 1.3769530058 0.5625 ) ( 1140.9571533203 -203.0429077148 501 1.3769530058 1.375 ) )
-( ( 1312 -202.75 514 2.71875 -0.25 ) ( 1312 -202.75 507.5 2.71875 0.5625 ) ( 1312 -202.75 501 2.71875 1.375 ) )
-( ( 1483.0428466797 -203.0429077148 514 4.060546875 -0.25 ) ( 1483.0428466797 -203.0429077148 507.5 4.060546875 0.5625 ) ( 1483.0428466797 -203.0429077148 501 4.060546875 1.375 ) )
-( ( 1482.75 -28 514 5.4335942268 -0.25 ) ( 1482.75 -28 507.5 5.4335942268 0.5625 ) ( 1482.75 -28 501 5.4335942268 1.375 ) )
-( ( 1483.0428466797 147.0429077148 514 6.8066411018 -0.25 ) ( 1483.0428466797 147.0429077148 507.5 6.8066411018 0.5625 ) ( 1483.0428466797 147.0429077148 501 6.8066411018 1.375 ) )
-( ( 1312 146.75 514 8.1484384537 -0.25 ) ( 1312 146.75 507.5 8.1484384537 0.5625 ) ( 1312 146.75 501 8.1484384537 1.375 ) )
-( ( 1140.9571533203 147.0429077148 514 9.490234375 -0.25 ) ( 1140.9571533203 147.0429077148 507.5 9.490234375 0.5625 ) ( 1140.9571533203 147.0429077148 501 9.490234375 1.375 ) )
-( ( 1141.25 -28 514 10.86328125 -0.25 ) ( 1141.25 -28 507.5 10.86328125 0.5625 ) ( 1141.25 -28 501 10.86328125 1.375 ) )
-)
-}
-}
-// brush 3
-{
-patchDef2
-{
-evil8_lights/e8minitrimlight
-( 9 3 0 0 0 )
-(
-( ( 1140.25 -28 501 0.0039059999 1.375 ) ( 1140.25 -28 507.5 0.0039059999 0.5625 ) ( 1140.25 -28 514 0.0039059999 -0.25 ) )
-( ( 1140.25 -203.75 501 1.3769530058 1.375 ) ( 1140.25 -203.75 507.5 1.3769530058 0.5625 ) ( 1140.25 -203.75 514 1.3769530058 -0.25 ) )
-( ( 1312 -203.75 501 2.71875 1.375 ) ( 1312 -203.75 507.5 2.71875 0.5625 ) ( 1312 -203.75 514 2.71875 -0.25 ) )
-( ( 1483.75 -203.75 501 4.060546875 1.375 ) ( 1483.75 -203.75 507.5 4.060546875 0.5625 ) ( 1483.75 -203.75 514 4.060546875 -0.25 ) )
-( ( 1483.75 -28 501 5.4335942268 1.375 ) ( 1483.75 -28 507.5 5.4335942268 0.5625 ) ( 1483.75 -28 514 5.4335942268 -0.25 ) )
-( ( 1483.75 147.75 501 6.8066411018 1.375 ) ( 1483.75 147.75 507.5 6.8066411018 0.5625 ) ( 1483.75 147.75 514 6.8066411018 -0.25 ) )
-( ( 1312 147.75 501 8.1484384537 1.375 ) ( 1312 147.75 507.5 8.1484384537 0.5625 ) ( 1312 147.75 514 8.1484384537 -0.25 ) )
-( ( 1140.25 147.75 501 9.490234375 1.375 ) ( 1140.25 147.75 507.5 9.490234375 0.5625 ) ( 1140.25 147.75 514 9.490234375 -0.25 ) )
-( ( 1140.25 -28 501 10.86328125 1.375 ) ( 1140.25 -28 507.5 10.86328125 0.5625 ) ( 1140.25 -28 514 10.86328125 -0.25 ) )
-)
-}
-}
-}
-// entity 250
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-evil8_lights/e8minitrimlight
-( 9 3 0 0 0 )
-(
-( ( 1140.25 -739.75 514 0 0.125 ) ( 1140.75 -739.75 514 0 0.0625 ) ( 1141.25 -739.75 514 0 0 ) )
-( ( 1140.25 -915.5 514 1.3730469942 0.125 ) ( 1140.603515625 -915.146484375 514 1.3730469942 0.0625 ) ( 1140.9571533203 -914.7929077148 514 1.3730469942 0 ) )
-( ( 1312 -915.5 514 2.7148439884 0.125 ) ( 1312 -915 514 2.7148439884 0.0625 ) ( 1312 -914.5 514 2.7148439884 0 ) )
-( ( 1483.75 -915.5 514 4.0566411018 0.125 ) ( 1483.396484375 -915.146484375 514 4.0566411018 0.0625 ) ( 1483.0428466797 -914.7929077148 514 4.0566411018 0 ) )
-( ( 1483.75 -739.75 514 5.4296879768 0.125 ) ( 1483.25 -739.75 514 5.4296879768 0.0625 ) ( 1482.75 -739.75 514 5.4296879768 0 ) )
-( ( 1483.75 -564 514 6.8027338982 0.125 ) ( 1483.396484375 -564.353515625 514 6.8027338982 0.0625 ) ( 1483.0428466797 -564.7070922852 514 6.8027338982 0 ) )
-( ( 1312 -564 514 8.14453125 0.125 ) ( 1312 -564.5 514 8.14453125 0.0625 ) ( 1312 -565 514 8.14453125 0 ) )
-( ( 1140.25 -564 514 9.486328125 0.125 ) ( 1140.603515625 -564.353515625 514 9.486328125 0.0625 ) ( 1140.9571533203 -564.7070922852 514 9.486328125 0 ) )
-( ( 1140.25 -739.75 514 10.859375 0.125 ) ( 1140.75 -739.75 514 10.859375 0.0625 ) ( 1141.25 -739.75 514 10.859375 0 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-evil8_lights/e8minitrimlight
-( 9 3 0 0 0 )
-(
-( ( 1141.25 -739.75 501 0 0 ) ( 1140.75 -739.75 501 0 0.0625 ) ( 1140.25 -739.75 501 0 0.125 ) )
-( ( 1140.9571533203 -914.7929077148 501 1.3730469942 0 ) ( 1140.603515625 -915.146484375 501 1.3730469942 0.0625 ) ( 1140.25 -915.5 501 1.3730469942 0.125 ) )
-( ( 1312 -914.5 501 2.7148439884 0 ) ( 1312 -915 501 2.7148439884 0.0625 ) ( 1312 -915.5 501 2.7148439884 0.125 ) )
-( ( 1483.0428466797 -914.7929077148 501 4.0566411018 0 ) ( 1483.396484375 -915.146484375 501 4.0566411018 0.0625 ) ( 1483.75 -915.5 501 4.0566411018 0.125 ) )
-( ( 1482.75 -739.75 501 5.4296879768 0 ) ( 1483.25 -739.75 501 5.4296879768 0.0625 ) ( 1483.75 -739.75 501 5.4296879768 0.125 ) )
-( ( 1483.0428466797 -564.7070922852 501 6.8027338982 0 ) ( 1483.396484375 -564.353515625 501 6.8027338982 0.0625 ) ( 1483.75 -564 501 6.8027338982 0.125 ) )
-( ( 1312 -565 501 8.14453125 0 ) ( 1312 -564.5 501 8.14453125 0.0625 ) ( 1312 -564 501 8.14453125 0.125 ) )
-( ( 1140.9571533203 -564.7070922852 501 9.486328125 0 ) ( 1140.603515625 -564.353515625 501 9.486328125 0.0625 ) ( 1140.25 -564 501 9.486328125 0.125 ) )
-( ( 1141.25 -739.75 501 10.859375 0 ) ( 1140.75 -739.75 501 10.859375 0.0625 ) ( 1140.25 -739.75 501 10.859375 0.125 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-evil8_lights/e8minitrimlight
-( 9 3 0 0 0 )
-(
-( ( 1141.25 -739.75 514 0.0039059999 -0.25 ) ( 1141.25 -739.75 507.5 0.0039059999 0.5625 ) ( 1141.25 -739.75 501 0.0039059999 1.375 ) )
-( ( 1140.9571533203 -914.7929077148 514 1.3769530058 -0.25 ) ( 1140.9571533203 -914.7929077148 507.5 1.3769530058 0.5625 ) ( 1140.9571533203 -914.7929077148 501 1.3769530058 1.375 ) )
-( ( 1312 -914.5 514 2.71875 -0.25 ) ( 1312 -914.5 507.5 2.71875 0.5625 ) ( 1312 -914.5 501 2.71875 1.375 ) )
-( ( 1483.0428466797 -914.7929077148 514 4.060546875 -0.25 ) ( 1483.0428466797 -914.7929077148 507.5 4.060546875 0.5625 ) ( 1483.0428466797 -914.7929077148 501 4.060546875 1.375 ) )
-( ( 1482.75 -739.75 514 5.4335942268 -0.25 ) ( 1482.75 -739.75 507.5 5.4335942268 0.5625 ) ( 1482.75 -739.75 501 5.4335942268 1.375 ) )
-( ( 1483.0428466797 -564.7070922852 514 6.8066411018 -0.25 ) ( 1483.0428466797 -564.7070922852 507.5 6.8066411018 0.5625 ) ( 1483.0428466797 -564.7070922852 501 6.8066411018 1.375 ) )
-( ( 1312 -565 514 8.1484384537 -0.25 ) ( 1312 -565 507.5 8.1484384537 0.5625 ) ( 1312 -565 501 8.1484384537 1.375 ) )
-( ( 1140.9571533203 -564.7070922852 514 9.490234375 -0.25 ) ( 1140.9571533203 -564.7070922852 507.5 9.490234375 0.5625 ) ( 1140.9571533203 -564.7070922852 501 9.490234375 1.375 ) )
-( ( 1141.25 -739.75 514 10.86328125 -0.25 ) ( 1141.25 -739.75 507.5 10.86328125 0.5625 ) ( 1141.25 -739.75 501 10.86328125 1.375 ) )
-)
-}
-}
-// brush 3
-{
-patchDef2
-{
-evil8_lights/e8minitrimlight
-( 9 3 0 0 0 )
-(
-( ( 1140.25 -739.75 501 0.0039059999 1.375 ) ( 1140.25 -739.75 507.5 0.0039059999 0.5625 ) ( 1140.25 -739.75 514 0.0039059999 -0.25 ) )
-( ( 1140.25 -915.5 501 1.3769530058 1.375 ) ( 1140.25 -915.5 507.5 1.3769530058 0.5625 ) ( 1140.25 -915.5 514 1.3769530058 -0.25 ) )
-( ( 1312 -915.5 501 2.71875 1.375 ) ( 1312 -915.5 507.5 2.71875 0.5625 ) ( 1312 -915.5 514 2.71875 -0.25 ) )
-( ( 1483.75 -915.5 501 4.060546875 1.375 ) ( 1483.75 -915.5 507.5 4.060546875 0.5625 ) ( 1483.75 -915.5 514 4.060546875 -0.25 ) )
-( ( 1483.75 -739.75 501 5.4335942268 1.375 ) ( 1483.75 -739.75 507.5 5.4335942268 0.5625 ) ( 1483.75 -739.75 514 5.4335942268 -0.25 ) )
-( ( 1483.75 -564 501 6.8066411018 1.375 ) ( 1483.75 -564 507.5 6.8066411018 0.5625 ) ( 1483.75 -564 514 6.8066411018 -0.25 ) )
-( ( 1312 -564 501 8.1484384537 1.375 ) ( 1312 -564 507.5 8.1484384537 0.5625 ) ( 1312 -564 514 8.1484384537 -0.25 ) )
-( ( 1140.25 -564 501 9.490234375 1.375 ) ( 1140.25 -564 507.5 9.490234375 0.5625 ) ( 1140.25 -564 514 9.490234375 -0.25 ) )
-( ( 1140.25 -739.75 501 10.86328125 1.375 ) ( 1140.25 -739.75 507.5 10.86328125 0.5625 ) ( 1140.25 -739.75 514 10.86328125 -0.25 ) )
-)
-}
-}
-}
-// entity 251
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 1196.4334716797 -624.9694824219 470.1057739258 0 0.1406240016 ) ( 1196.9829101562 -625.2830810547 461.1280822754 0 0.0703120008 ) ( 1197.5323486328 -625.5961914062 452.1504211426 0 0 ) )
-( ( 1174.1629638672 -643.0083007812 469.3728637695 0.2239760011 0.1406240016 ) ( 1174.7124023438 -643.3215332031 460.3950805664 0.2239760011 0.0703120008 ) ( 1175.2618408203 -643.6350097656 451.4172668457 0.2239760011 0 ) )
-( ( 1167.4267578125 -673.390625 470.0215454102 0.4671550095 0.1406240016 ) ( 1167.9761962891 -673.7043457031 461.0437316895 0.4671550095 0.0703120008 ) ( 1168.5256347656 -674.0179443359 452.0660400391 0.4671550095 0 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 1195.1739501953 -623.4213867188 469.9746398926 0 0.140625 ) ( 1195.7233886719 -623.7351074219 460.9968261719 0 0.0703120008 ) ( 1196.2728271484 -624.0482177734 452.0191955566 0 0 ) )
-( ( 1195.8037109375 -624.1951904297 470.0401306152 0.0078110001 0.140625 ) ( 1196.3531494141 -624.5090332031 461.0625610352 0.0078110001 0.0703120008 ) ( 1196.9025878906 -624.8225097656 452.0848083496 0.0078110001 0 ) )
-( ( 1196.4334716797 -624.9694824219 470.1057739258 0.015625 0.140625 ) ( 1196.9829101562 -625.2830810547 461.1280822754 0.015625 0.0703120008 ) ( 1197.5323486328 -625.5961914062 452.1504211426 0.015625 0 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 1166.5783691406 -673.5817871094 451.9315795898 0 0.1406259984 ) ( 1166.0289306641 -673.2679443359 460.9093322754 0 0.0703129992 ) ( 1165.4794921875 -672.9547119141 469.8871765137 0 0 ) )
-( ( 1167.5520019531 -673.7994384766 451.9987792969 0.0078119999 0.1406259984 ) ( 1167.0025634766 -673.4860839844 460.9765014648 0.0078119999 0.0703129992 ) ( 1166.453125 -673.1724853516 469.9542236328 0.0078119999 0 ) )
-( ( 1168.5256347656 -674.0179443359 452.0660400391 0.015625 0.1406259984 ) ( 1167.9761962891 -673.7043457031 461.0437316895 0.015625 0.0703129992 ) ( 1167.4267578125 -673.390625 470.0215454102 0.015625 0 ) )
-)
-}
-}
-// brush 3
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 1197.5323486328 -625.5961914062 452.1504211426 0 0.0156239998 ) ( 1196.9025878906 -624.8225097656 452.0848083496 0 0.0078140004 ) ( 1196.2728271484 -624.0482177734 452.0191955566 0 0 ) )
-( ( 1175.2618408203 -643.6350097656 451.4172668457 0.2239760011 0.0156239998 ) ( 1174.4135742188 -643.1105957031 451.3471679688 0.2239760011 0.0078140004 ) ( 1173.5653076172 -642.5855712891 451.2768554688 0.2239760011 0 ) )
-( ( 1168.5256347656 -674.0179443359 452.0660400391 0.4671599865 0.0156239998 ) ( 1167.5520019531 -673.7994384766 451.9987792969 0.4671599865 0.0078140004 ) ( 1166.5783691406 -673.5817871094 451.9315795898 0.4671599865 0 ) )
-)
-}
-}
-// brush 4
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 1195.1739501953 -623.4213867188 469.9746398926 0 0.015625 ) ( 1195.8037109375 -624.1951904297 470.0401306152 0 0.0078140004 ) ( 1196.4334716797 -624.9694824219 470.1057739258 0 0 ) )
-( ( 1172.4664306641 -641.9587402344 469.2322998047 0.2290830016 0.015625 ) ( 1173.3146972656 -642.4833984375 469.3024902344 0.2290830016 0.0078140004 ) ( 1174.1629638672 -643.0083007812 469.3728637695 0.2290830016 0 ) )
-( ( 1165.4794921875 -672.9547119141 469.8871765137 0.4773679972 0.015625 ) ( 1166.453125 -673.1724853516 469.9542236328 0.4773679972 0.0078140004 ) ( 1167.4267578125 -673.390625 470.0215454102 0.4773679972 0 ) )
-)
-}
-}
-// brush 5
-{
-patchDef2
-{
-evil_lights/s_bluelight
-( 3 3 0 0 0 )
-(
-( ( 1196.2728271484 -624.0482177734 452.0191955566 0 1 ) ( 1195.7233886719 -623.7351074219 460.9968261719 0 0.5 ) ( 1195.1739501953 -623.4213867188 469.9746398926 0 0 ) )
-( ( 1173.5653076172 -642.5855712891 451.2768554688 0.5 1 ) ( 1173.0158691406 -642.2722167969 460.2545471191 0.5 0.5 ) ( 1172.4664306641 -641.9587402344 469.2322998047 0.5 0 ) )
-( ( 1166.5783691406 -673.5817871094 451.9315795898 1 1 ) ( 1166.0289306641 -673.2679443359 460.9093322754 1 0.5 ) ( 1165.4794921875 -672.9547119141 469.8871765137 1 0 ) )
-)
-}
-}
-}
-// entity 252
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 1425.2805175781 -625.9334716797 470.1057739258 0 0.1406240016 ) ( 1424.9669189453 -626.4829101562 461.1280822754 0 0.0703120008 ) ( 1424.6538085938 -627.0323486328 452.1504211426 0 0 ) )
-( ( 1407.2416992188 -603.6629638672 469.3728637695 0.2239760011 0.1406240016 ) ( 1406.9284667969 -604.2124023438 460.3950805664 0.2239760011 0.0703120008 ) ( 1406.6149902344 -604.7618408203 451.4172668457 0.2239760011 0 ) )
-( ( 1376.859375 -596.9267578125 470.0215454102 0.4671550095 0.1406240016 ) ( 1376.5456542969 -597.4761962891 461.0437316895 0.4671550095 0.0703120008 ) ( 1376.2320556641 -598.0256347656 452.0660400391 0.4671550095 0 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 1426.8286132812 -624.6739501953 469.9746398926 0 0.140625 ) ( 1426.5148925781 -625.2233886719 460.9968261719 0 0.0703120008 ) ( 1426.2017822266 -625.7728271484 452.0191955566 0 0 ) )
-( ( 1426.0548095703 -625.3037109375 470.0401306152 0.0078110001 0.140625 ) ( 1425.7409667969 -625.8531494141 461.0625610352 0.0078110001 0.0703120008 ) ( 1425.4274902344 -626.4025878906 452.0848083496 0.0078110001 0 ) )
-( ( 1425.2805175781 -625.9334716797 470.1057739258 0.015625 0.140625 ) ( 1424.9669189453 -626.4829101562 461.1280822754 0.015625 0.0703120008 ) ( 1424.6538085938 -627.0323486328 452.1504211426 0.015625 0 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 1376.6682128906 -596.0783691406 451.9315795898 0 0.1406259984 ) ( 1376.9820556641 -595.5289306641 460.9093322754 0 0.0703129992 ) ( 1377.2952880859 -594.9794921875 469.8871765137 0 0 ) )
-( ( 1376.4505615234 -597.0520019531 451.9987792969 0.0078119999 0.1406259984 ) ( 1376.7639160156 -596.5025634766 460.9765014648 0.0078119999 0.0703129992 ) ( 1377.0775146484 -595.953125 469.9542236328 0.0078119999 0 ) )
-( ( 1376.2320556641 -598.0256347656 452.0660400391 0.015625 0.1406259984 ) ( 1376.5456542969 -597.4761962891 461.0437316895 0.015625 0.0703129992 ) ( 1376.859375 -596.9267578125 470.0215454102 0.015625 0 ) )
-)
-}
-}
-// brush 3
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 1424.6538085938 -627.0323486328 452.1504211426 0 0.0156239998 ) ( 1425.4274902344 -626.4025878906 452.0848083496 0 0.0078140004 ) ( 1426.2017822266 -625.7728271484 452.0191955566 0 0 ) )
-( ( 1406.6149902344 -604.7618408203 451.4172668457 0.2239760011 0.0156239998 ) ( 1407.1394042969 -603.9135742188 451.3471679688 0.2239760011 0.0078140004 ) ( 1407.6644287109 -603.0653076172 451.2768554688 0.2239760011 0 ) )
-( ( 1376.2320556641 -598.0256347656 452.0660400391 0.4671599865 0.0156239998 ) ( 1376.4505615234 -597.0520019531 451.9987792969 0.4671599865 0.0078140004 ) ( 1376.6682128906 -596.0783691406 451.9315795898 0.4671599865 0 ) )
-)
-}
-}
-// brush 4
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 1426.8286132812 -624.6739501953 469.9746398926 0 0.015625 ) ( 1426.0548095703 -625.3037109375 470.0401306152 0 0.0078140004 ) ( 1425.2805175781 -625.9334716797 470.1057739258 0 0 ) )
-( ( 1408.2912597656 -601.9664306641 469.2322998047 0.2290830016 0.015625 ) ( 1407.7666015625 -602.8146972656 469.3024902344 0.2290830016 0.0078140004 ) ( 1407.2416992188 -603.6629638672 469.3728637695 0.2290830016 0 ) )
-( ( 1377.2952880859 -594.9794921875 469.8871765137 0.4773679972 0.015625 ) ( 1377.0775146484 -595.953125 469.9542236328 0.4773679972 0.0078140004 ) ( 1376.859375 -596.9267578125 470.0215454102 0.4773679972 0 ) )
-)
-}
-}
-// brush 5
-{
-patchDef2
-{
-evil_lights/s_bluelight
-( 3 3 0 0 0 )
-(
-( ( 1426.2017822266 -625.7728271484 452.0191955566 0 1 ) ( 1426.5148925781 -625.2233886719 460.9968261719 0 0.5 ) ( 1426.8286132812 -624.6739501953 469.9746398926 0 0 ) )
-( ( 1407.6644287109 -603.0653076172 451.2768554688 0.5 1 ) ( 1407.9777832031 -602.5158691406 460.2545471191 0.5 0.5 ) ( 1408.2912597656 -601.9664306641 469.2322998047 0.5 0 ) )
-( ( 1376.6682128906 -596.0783691406 451.9315795898 1 1 ) ( 1376.9820556641 -595.5289306641 460.9093322754 1 0.5 ) ( 1377.2952880859 -594.9794921875 469.8871765137 1 0 ) )
-)
-}
-}
-}
-// entity 253
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 1424.8165283203 -849.0305175781 470.1057739258 0 0.1406240016 ) ( 1424.2670898438 -848.7169189453 461.1280822754 0 0.0703120008 ) ( 1423.7176513672 -848.4038085938 452.1504211426 0 0 ) )
-( ( 1447.0870361328 -830.9916992188 469.3728637695 0.2239760011 0.1406240016 ) ( 1446.5375976562 -830.6784667969 460.3950805664 0.2239760011 0.0703120008 ) ( 1445.9881591797 -830.3649902344 451.4172668457 0.2239760011 0 ) )
-( ( 1453.8232421875 -800.609375 470.0215454102 0.4671550095 0.1406240016 ) ( 1453.2738037109 -800.2956542969 461.0437316895 0.4671550095 0.0703120008 ) ( 1452.7243652344 -799.9820556641 452.0660400391 0.4671550095 0 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 1426.0760498047 -850.5786132812 469.9746398926 0 0.140625 ) ( 1425.5266113281 -850.2648925781 460.9968261719 0 0.0703120008 ) ( 1424.9771728516 -849.9517822266 452.0191955566 0 0 ) )
-( ( 1425.4462890625 -849.8048095703 470.0401306152 0.0078110001 0.140625 ) ( 1424.8968505859 -849.4909667969 461.0625610352 0.0078110001 0.0703120008 ) ( 1424.3474121094 -849.1774902344 452.0848083496 0.0078110001 0 ) )
-( ( 1424.8165283203 -849.0305175781 470.1057739258 0.015625 0.140625 ) ( 1424.2670898438 -848.7169189453 461.1280822754 0.015625 0.0703120008 ) ( 1423.7176513672 -848.4038085938 452.1504211426 0.015625 0 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 1454.6716308594 -800.4182128906 451.9315795898 0 0.1406259984 ) ( 1455.2210693359 -800.7320556641 460.9093322754 0 0.0703129992 ) ( 1455.7705078125 -801.0452880859 469.8871765137 0 0 ) )
-( ( 1453.6979980469 -800.2005615234 451.9987792969 0.0078119999 0.1406259984 ) ( 1454.2474365234 -800.5139160156 460.9765014648 0.0078119999 0.0703129992 ) ( 1454.796875 -800.8275146484 469.9542236328 0.0078119999 0 ) )
-( ( 1452.7243652344 -799.9820556641 452.0660400391 0.015625 0.1406259984 ) ( 1453.2738037109 -800.2956542969 461.0437316895 0.015625 0.0703129992 ) ( 1453.8232421875 -800.609375 470.0215454102 0.015625 0 ) )
-)
-}
-}
-// brush 3
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 1423.7176513672 -848.4038085938 452.1504211426 0 0.0156239998 ) ( 1424.3474121094 -849.1774902344 452.0848083496 0 0.0078140004 ) ( 1424.9771728516 -849.9517822266 452.0191955566 0 0 ) )
-( ( 1445.9881591797 -830.3649902344 451.4172668457 0.2239760011 0.0156239998 ) ( 1446.8364257812 -830.8894042969 451.3471679688 0.2239760011 0.0078140004 ) ( 1447.6846923828 -831.4144287109 451.2768554688 0.2239760011 0 ) )
-( ( 1452.7243652344 -799.9820556641 452.0660400391 0.4671599865 0.0156239998 ) ( 1453.6979980469 -800.2005615234 451.9987792969 0.4671599865 0.0078140004 ) ( 1454.6716308594 -800.4182128906 451.9315795898 0.4671599865 0 ) )
-)
-}
-}
-// brush 4
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 1426.0760498047 -850.5786132812 469.9746398926 0 0.015625 ) ( 1425.4462890625 -849.8048095703 470.0401306152 0 0.0078140004 ) ( 1424.8165283203 -849.0305175781 470.1057739258 0 0 ) )
-( ( 1448.7835693359 -832.0412597656 469.2322998047 0.2290830016 0.015625 ) ( 1447.9353027344 -831.5166015625 469.3024902344 0.2290830016 0.0078140004 ) ( 1447.0870361328 -830.9916992188 469.3728637695 0.2290830016 0 ) )
-( ( 1455.7705078125 -801.0452880859 469.8871765137 0.4773679972 0.015625 ) ( 1454.796875 -800.8275146484 469.9542236328 0.4773679972 0.0078140004 ) ( 1453.8232421875 -800.609375 470.0215454102 0.4773679972 0 ) )
-)
-}
-}
-// brush 5
-{
-patchDef2
-{
-evil_lights/s_bluelight
-( 3 3 0 0 0 )
-(
-( ( 1424.9771728516 -849.9517822266 452.0191955566 0 1 ) ( 1425.5266113281 -850.2648925781 460.9968261719 0 0.5 ) ( 1426.0760498047 -850.5786132812 469.9746398926 0 0 ) )
-( ( 1447.6846923828 -831.4144287109 451.2768554688 0.5 1 ) ( 1448.2341308594 -831.7277832031 460.2545471191 0.5 0.5 ) ( 1448.7835693359 -832.0412597656 469.2322998047 0.5 0 ) )
-( ( 1454.6716308594 -800.4182128906 451.9315795898 1 1 ) ( 1455.2210693359 -800.7320556641 460.9093322754 1 0.5 ) ( 1455.7705078125 -801.0452880859 469.8871765137 1 0 ) )
-)
-}
-}
-}
-// entity 254
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 1199.2194824219 -140.0665283203 470.1057739258 0 0.1406240016 ) ( 1199.5330810547 -139.5170898438 461.1280822754 0 0.0703120008 ) ( 1199.8461914062 -138.9676513672 452.1504211426 0 0 ) )
-( ( 1217.2583007812 -162.3370361328 469.3728637695 0.2239760011 0.1406240016 ) ( 1217.5715332031 -161.7875976562 460.3950805664 0.2239760011 0.0703120008 ) ( 1217.8850097656 -161.2381591797 451.4172668457 0.2239760011 0 ) )
-( ( 1247.640625 -169.0732421875 470.0215454102 0.4671550095 0.1406240016 ) ( 1247.9543457031 -168.5238037109 461.0437316895 0.4671550095 0.0703120008 ) ( 1248.2679443359 -167.9743652344 452.0660400391 0.4671550095 0 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 1197.6713867188 -141.3260498047 469.9746398926 0 0.140625 ) ( 1197.9851074219 -140.7766113281 460.9968261719 0 0.0703120008 ) ( 1198.2982177734 -140.2271728516 452.0191955566 0 0 ) )
-( ( 1198.4451904297 -140.6962890625 470.0401306152 0.0078110001 0.140625 ) ( 1198.7590332031 -140.1468505859 461.0625610352 0.0078110001 0.0703120008 ) ( 1199.0725097656 -139.5974121094 452.0848083496 0.0078110001 0 ) )
-( ( 1199.2194824219 -140.0665283203 470.1057739258 0.015625 0.140625 ) ( 1199.5330810547 -139.5170898438 461.1280822754 0.015625 0.0703120008 ) ( 1199.8461914062 -138.9676513672 452.1504211426 0.015625 0 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 1247.8317871094 -169.9216308594 451.9315795898 0 0.1406259984 ) ( 1247.5179443359 -170.4710693359 460.9093322754 0 0.0703129992 ) ( 1247.2047119141 -171.0205078125 469.8871765137 0 0 ) )
-( ( 1248.0494384766 -168.9479980469 451.9987792969 0.0078119999 0.1406259984 ) ( 1247.7360839844 -169.4974365234 460.9765014648 0.0078119999 0.0703129992 ) ( 1247.4224853516 -170.046875 469.9542236328 0.0078119999 0 ) )
-( ( 1248.2679443359 -167.9743652344 452.0660400391 0.015625 0.1406259984 ) ( 1247.9543457031 -168.5238037109 461.0437316895 0.015625 0.0703129992 ) ( 1247.640625 -169.0732421875 470.0215454102 0.015625 0 ) )
-)
-}
-}
-// brush 3
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 1199.8461914062 -138.9676513672 452.1504211426 0 0.0156239998 ) ( 1199.0725097656 -139.5974121094 452.0848083496 0 0.0078140004 ) ( 1198.2982177734 -140.2271728516 452.0191955566 0 0 ) )
-( ( 1217.8850097656 -161.2381591797 451.4172668457 0.2239760011 0.0156239998 ) ( 1217.3605957031 -162.0864257812 451.3471679688 0.2239760011 0.0078140004 ) ( 1216.8355712891 -162.9346923828 451.2768554688 0.2239760011 0 ) )
-( ( 1248.2679443359 -167.9743652344 452.0660400391 0.4671599865 0.0156239998 ) ( 1248.0494384766 -168.9479980469 451.9987792969 0.4671599865 0.0078140004 ) ( 1247.8317871094 -169.9216308594 451.9315795898 0.4671599865 0 ) )
-)
-}
-}
-// brush 4
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 1197.6713867188 -141.3260498047 469.9746398926 0 0.015625 ) ( 1198.4451904297 -140.6962890625 470.0401306152 0 0.0078140004 ) ( 1199.2194824219 -140.0665283203 470.1057739258 0 0 ) )
-( ( 1216.2087402344 -164.0335693359 469.2322998047 0.2290830016 0.015625 ) ( 1216.7333984375 -163.1853027344 469.3024902344 0.2290830016 0.0078140004 ) ( 1217.2583007812 -162.3370361328 469.3728637695 0.2290830016 0 ) )
-( ( 1247.2047119141 -171.0205078125 469.8871765137 0.4773679972 0.015625 ) ( 1247.4224853516 -170.046875 469.9542236328 0.4773679972 0.0078140004 ) ( 1247.640625 -169.0732421875 470.0215454102 0.4773679972 0 ) )
-)
-}
-}
-// brush 5
-{
-patchDef2
-{
-evil_lights/s_bluelight
-( 3 3 0 0 0 )
-(
-( ( 1198.2982177734 -140.2271728516 452.0191955566 0 1 ) ( 1197.9851074219 -140.7766113281 460.9968261719 0 0.5 ) ( 1197.6713867188 -141.3260498047 469.9746398926 0 0 ) )
-( ( 1216.8355712891 -162.9346923828 451.2768554688 0.5 1 ) ( 1216.5222167969 -163.4841308594 460.2545471191 0.5 0.5 ) ( 1216.2087402344 -164.0335693359 469.2322998047 0.5 0 ) )
-( ( 1247.8317871094 -169.9216308594 451.9315795898 1 1 ) ( 1247.5179443359 -170.4710693359 460.9093322754 1 0.5 ) ( 1247.2047119141 -171.0205078125 469.8871765137 1 0 ) )
-)
-}
-}
-}
-// entity 255
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 1422.3165283203 -140.5305175781 470.1057739258 0 0.1406240016 ) ( 1421.7670898438 -140.2169189453 461.1280822754 0 0.0703120008 ) ( 1421.2176513672 -139.9038085938 452.1504211426 0 0 ) )
-( ( 1444.5870361328 -122.4916992188 469.3728637695 0.2239760011 0.1406240016 ) ( 1444.0375976562 -122.1784667969 460.3950805664 0.2239760011 0.0703120008 ) ( 1443.4881591797 -121.8649902344 451.4172668457 0.2239760011 0 ) )
-( ( 1451.3232421875 -92.109375 470.0215454102 0.4671550095 0.1406240016 ) ( 1450.7738037109 -91.7956542969 461.0437316895 0.4671550095 0.0703120008 ) ( 1450.2243652344 -91.4820556641 452.0660400391 0.4671550095 0 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 1423.5760498047 -142.0786132812 469.9746398926 0 0.140625 ) ( 1423.0266113281 -141.7648925781 460.9968261719 0 0.0703120008 ) ( 1422.4771728516 -141.4517822266 452.0191955566 0 0 ) )
-( ( 1422.9462890625 -141.3048095703 470.0401306152 0.0078110001 0.140625 ) ( 1422.3968505859 -140.9909667969 461.0625610352 0.0078110001 0.0703120008 ) ( 1421.8474121094 -140.6774902344 452.0848083496 0.0078110001 0 ) )
-( ( 1422.3165283203 -140.5305175781 470.1057739258 0.015625 0.140625 ) ( 1421.7670898438 -140.2169189453 461.1280822754 0.015625 0.0703120008 ) ( 1421.2176513672 -139.9038085938 452.1504211426 0.015625 0 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 1452.1716308594 -91.9182128906 451.9315795898 0 0.1406259984 ) ( 1452.7210693359 -92.2320556641 460.9093322754 0 0.0703129992 ) ( 1453.2705078125 -92.5452880859 469.8871765137 0 0 ) )
-( ( 1451.1979980469 -91.7005615234 451.9987792969 0.0078119999 0.1406259984 ) ( 1451.7474365234 -92.0139160156 460.9765014648 0.0078119999 0.0703129992 ) ( 1452.296875 -92.3275146484 469.9542236328 0.0078119999 0 ) )
-( ( 1450.2243652344 -91.4820556641 452.0660400391 0.015625 0.1406259984 ) ( 1450.7738037109 -91.7956542969 461.0437316895 0.015625 0.0703129992 ) ( 1451.3232421875 -92.109375 470.0215454102 0.015625 0 ) )
-)
-}
-}
-// brush 3
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 1421.2176513672 -139.9038085938 452.1504211426 0 0.0156239998 ) ( 1421.8474121094 -140.6774902344 452.0848083496 0 0.0078140004 ) ( 1422.4771728516 -141.4517822266 452.0191955566 0 0 ) )
-( ( 1443.4881591797 -121.8649902344 451.4172668457 0.2239760011 0.0156239998 ) ( 1444.3364257812 -122.3894042969 451.3471679688 0.2239760011 0.0078140004 ) ( 1445.1846923828 -122.9144287109 451.2768554688 0.2239760011 0 ) )
-( ( 1450.2243652344 -91.4820556641 452.0660400391 0.4671599865 0.0156239998 ) ( 1451.1979980469 -91.7005615234 451.9987792969 0.4671599865 0.0078140004 ) ( 1452.1716308594 -91.9182128906 451.9315795898 0.4671599865 0 ) )
-)
-}
-}
-// brush 4
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 1423.5760498047 -142.0786132812 469.9746398926 0 0.015625 ) ( 1422.9462890625 -141.3048095703 470.0401306152 0 0.0078140004 ) ( 1422.3165283203 -140.5305175781 470.1057739258 0 0 ) )
-( ( 1446.2835693359 -123.5412597656 469.2322998047 0.2290830016 0.015625 ) ( 1445.4353027344 -123.0166015625 469.3024902344 0.2290830016 0.0078140004 ) ( 1444.5870361328 -122.4916992188 469.3728637695 0.2290830016 0 ) )
-( ( 1453.2705078125 -92.5452880859 469.8871765137 0.4773679972 0.015625 ) ( 1452.296875 -92.3275146484 469.9542236328 0.4773679972 0.0078140004 ) ( 1451.3232421875 -92.109375 470.0215454102 0.4773679972 0 ) )
-)
-}
-}
-// brush 5
-{
-patchDef2
-{
-evil_lights/s_bluelight
-( 3 3 0 0 0 )
-(
-( ( 1422.4771728516 -141.4517822266 452.0191955566 0 1 ) ( 1423.0266113281 -141.7648925781 460.9968261719 0 0.5 ) ( 1423.5760498047 -142.0786132812 469.9746398926 0 0 ) )
-( ( 1445.1846923828 -122.9144287109 451.2768554688 0.5 1 ) ( 1445.7341308594 -123.2277832031 460.2545471191 0.5 0.5 ) ( 1446.2835693359 -123.5412597656 469.2322998047 0.5 0 ) )
-( ( 1452.1716308594 -91.9182128906 451.9315795898 1 1 ) ( 1452.7210693359 -92.2320556641 460.9093322754 1 0.5 ) ( 1453.2705078125 -92.5452880859 469.8871765137 1 0 ) )
-)
-}
-}
-}
-// entity 256
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 1423.2805175781 88.3165588379 470.1057739258 0 0.1406240016 ) ( 1422.9669189453 87.7671051025 461.1280822754 0 0.0703120008 ) ( 1422.6538085938 87.217666626 452.1504211426 0 0 ) )
-( ( 1405.2416992188 110.5870285034 469.3728637695 0.2239760011 0.1406240016 ) ( 1404.9284667969 110.0376052856 460.3950805664 0.2239760011 0.0703120008 ) ( 1404.6149902344 109.4881439209 451.4172668457 0.2239760011 0 ) )
-( ( 1374.859375 117.3232727051 470.0215454102 0.4671550095 0.1406240016 ) ( 1374.5456542969 116.7738418579 461.0437316895 0.4671550095 0.0703120008 ) ( 1374.2320556641 116.2244110107 452.0660400391 0.4671550095 0 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 1424.8286132812 89.5760269165 469.9746398926 0 0.140625 ) ( 1424.5148925781 89.0265808105 460.9968261719 0 0.0703120008 ) ( 1424.2017822266 88.4771499634 452.0191955566 0 0 ) )
-( ( 1424.0548095703 88.9462814331 470.0401306152 0.0078110001 0.140625 ) ( 1423.7409667969 88.3968582153 461.0625610352 0.0078110001 0.0703120008 ) ( 1423.4274902344 87.84740448 452.0848083496 0.0078110001 0 ) )
-( ( 1423.2805175781 88.3165588379 470.1057739258 0.015625 0.140625 ) ( 1422.9669189453 87.7671051025 461.1280822754 0.015625 0.0703120008 ) ( 1422.6538085938 87.217666626 452.1504211426 0.015625 0 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 1374.6682128906 118.1716537476 451.9315795898 0 0.1406259984 ) ( 1374.9820556641 118.7210922241 460.9093322754 0 0.0703129992 ) ( 1375.2952880859 119.2705154419 469.8871765137 0 0 ) )
-( ( 1374.4505615234 117.1980438232 451.9987792969 0.0078119999 0.1406259984 ) ( 1374.7639160156 117.7474594116 460.9765014648 0.0078119999 0.0703129992 ) ( 1375.0775146484 118.296913147 469.9542236328 0.0078119999 0 ) )
-( ( 1374.2320556641 116.2244110107 452.0660400391 0.015625 0.1406259984 ) ( 1374.5456542969 116.7738418579 461.0437316895 0.015625 0.0703129992 ) ( 1374.859375 117.3232727051 470.0215454102 0.015625 0 ) )
-)
-}
-}
-// brush 3
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 1422.6538085938 87.217666626 452.1504211426 0 0.0156239998 ) ( 1423.4274902344 87.84740448 452.0848083496 0 0.0078140004 ) ( 1424.2017822266 88.4771499634 452.0191955566 0 0 ) )
-( ( 1404.6149902344 109.4881439209 451.4172668457 0.2239760011 0.0156239998 ) ( 1405.1394042969 110.3364257812 451.3471679688 0.2239760011 0.0078140004 ) ( 1405.6644287109 111.1847000122 451.2768554688 0.2239760011 0 ) )
-( ( 1374.2320556641 116.2244110107 452.0660400391 0.4671599865 0.0156239998 ) ( 1374.4505615234 117.1980438232 451.9987792969 0.4671599865 0.0078140004 ) ( 1374.6682128906 118.1716537476 451.9315795898 0.4671599865 0 ) )
-)
-}
-}
-// brush 4
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 1424.8286132812 89.5760269165 469.9746398926 0 0.015625 ) ( 1424.0548095703 88.9462814331 470.0401306152 0 0.0078140004 ) ( 1423.2805175781 88.3165588379 470.1057739258 0 0 ) )
-( ( 1406.2912597656 112.2835769653 469.2322998047 0.2290830016 0.015625 ) ( 1405.7666015625 111.4353027344 469.3024902344 0.2290830016 0.0078140004 ) ( 1405.2416992188 110.5870285034 469.3728637695 0.2290830016 0 ) )
-( ( 1375.2952880859 119.2705154419 469.8871765137 0.4773679972 0.015625 ) ( 1375.0775146484 118.296913147 469.9542236328 0.4773679972 0.0078140004 ) ( 1374.859375 117.3232727051 470.0215454102 0.4773679972 0 ) )
-)
-}
-}
-// brush 5
-{
-patchDef2
-{
-evil_lights/s_bluelight
-( 3 3 0 0 0 )
-(
-( ( 1424.2017822266 88.4771499634 452.0191955566 0 1 ) ( 1424.5148925781 89.0265808105 460.9968261719 0 0.5 ) ( 1424.8286132812 89.5760269165 469.9746398926 0 0 ) )
-( ( 1405.6644287109 111.1847000122 451.2768554688 0.5 1 ) ( 1405.9777832031 111.7341537476 460.2545471191 0.5 0.5 ) ( 1406.2912597656 112.2835769653 469.2322998047 0.5 0 ) )
-( ( 1374.6682128906 118.1716537476 451.9315795898 1 1 ) ( 1374.9820556641 118.7210922241 460.9093322754 1 0.5 ) ( 1375.2952880859 119.2705154419 469.8871765137 1 0 ) )
-)
-}
-}
-}
-// entity 257
-{
-"classname" "func_group"
-"type" "patchCapped"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 1328 -48 309.25 -5.625 -2.4199221134 ) ( 1328 -48 309.25 -5.625 -2.4199221134 ) ( 1328 -48 322.5 -5.625 -2.5234379768 ) )
-( ( 1328 -48 296 -5.625 -2.3164060116 ) ( 1328 -32 309.25 -5.75 -2.4199221134 ) ( 1328 -16 322.5 -5.875 -2.5234379768 ) )
-( ( 1328 -48 296 -5.625 -2.3164060116 ) ( 1328 -16 296 -5.875 -2.3164060116 ) ( 1328 -16 322.5 -5.875 -2.5234379768 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 1296 -48 322.5 -5.625 -2.5234379768 ) ( 1296 -48 309.25 -5.625 -2.4199221134 ) ( 1296 -48 309.25 -5.625 -2.4199221134 ) )
-( ( 1296 -16 322.5 -5.875 -2.5234379768 ) ( 1296 -32 309.25 -5.75 -2.4199221134 ) ( 1296 -48 296 -5.625 -2.3164060116 ) )
-( ( 1296 -16 322.5 -5.875 -2.5234379768 ) ( 1296 -16 296 -5.875 -2.3164060116 ) ( 1296 -48 296 -5.625 -2.3164060116 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 9 3 0 0 0 )
-(
-( ( 1296 -48 309.25 0 0.25 ) ( 1312 -48 309.25 0 0.125 ) ( 1328 -48 309.25 0 0 ) )
-( ( 1296 -48 296 0.1035159975 0.25 ) ( 1312 -48 296 0.1035159975 0.125 ) ( 1328 -48 296 0.1035159975 0 ) )
-( ( 1296 -48 296 0.1035159975 0.25 ) ( 1312 -48 296 0.1035159975 0.125 ) ( 1328 -48 296 0.1035159975 0 ) )
-( ( 1296 -16 296 0.3535160124 0.25 ) ( 1312 -16 296 0.3535160124 0.125 ) ( 1328 -16 296 0.3535160124 0 ) )
-( ( 1296 -16 322.5 0.5605469942 0.25 ) ( 1312 -16 322.5 0.5605469942 0.125 ) ( 1328 -16 322.5 0.5605469942 0 ) )
-( ( 1296 -16 322.5 0.5605469942 0.25 ) ( 1312 -16 322.5 0.5605469942 0.125 ) ( 1328 -16 322.5 0.5605469942 0 ) )
-( ( 1296 -48 322.5 0.8105469942 0.25 ) ( 1312 -48 322.5 0.8105469942 0.125 ) ( 1328 -48 322.5 0.8105469942 0 ) )
-( ( 1296 -48 309.25 0.9140629768 0.25 ) ( 1312 -48 309.25 0.9140629768 0.125 ) ( 1328 -48 309.25 0.9140629768 0 ) )
-( ( 1296 -48 309.25 0.9140629768 0.25 ) ( 1312 -48 309.25 0.9140629768 0.125 ) ( 1328 -48 309.25 0.9140629768 0 ) )
-)
-}
-}
-}
-// entity 258
-{
-"classname" "func_group"
-"type" "patchCapped"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 1296 -720 309.75 -5.625 -2.4199221134 ) ( 1296 -720 309.75 -5.625 -2.4199221134 ) ( 1296 -720 323 -5.625 -2.5234379768 ) )
-( ( 1296 -720 296.5 -5.625 -2.3164060116 ) ( 1296 -736 309.75 -5.75 -2.4199221134 ) ( 1296 -752 323 -5.875 -2.5234379768 ) )
-( ( 1296 -720 296.5 -5.625 -2.3164060116 ) ( 1296 -752 296.5 -5.875 -2.3164060116 ) ( 1296 -752 323 -5.875 -2.5234379768 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 1328 -720 323 -5.625 -2.5234379768 ) ( 1328 -720 309.75 -5.625 -2.4199221134 ) ( 1328 -720 309.75 -5.625 -2.4199221134 ) )
-( ( 1328 -752 323 -5.875 -2.5234379768 ) ( 1328 -736 309.75 -5.75 -2.4199221134 ) ( 1328 -720 296.5 -5.625 -2.3164060116 ) )
-( ( 1328 -752 323 -5.875 -2.5234379768 ) ( 1328 -752 296.5 -5.875 -2.3164060116 ) ( 1328 -720 296.5 -5.625 -2.3164060116 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 9 3 0 0 0 )
-(
-( ( 1328 -720 309.75 0 0.25 ) ( 1312 -720 309.75 0 0.125 ) ( 1296 -720 309.75 0 0 ) )
-( ( 1328 -720 296.5 0.1035159975 0.25 ) ( 1312 -720 296.5 0.1035159975 0.125 ) ( 1296 -720 296.5 0.1035159975 0 ) )
-( ( 1328 -720 296.5 0.1035159975 0.25 ) ( 1312 -720 296.5 0.1035159975 0.125 ) ( 1296 -720 296.5 0.1035159975 0 ) )
-( ( 1328 -752 296.5 0.3535160124 0.25 ) ( 1312 -752 296.5 0.3535160124 0.125 ) ( 1296 -752 296.5 0.3535160124 0 ) )
-( ( 1328 -752 323 0.5605469942 0.25 ) ( 1312 -752 323 0.5605469942 0.125 ) ( 1296 -752 323 0.5605469942 0 ) )
-( ( 1328 -752 323 0.5605469942 0.25 ) ( 1312 -752 323 0.5605469942 0.125 ) ( 1296 -752 323 0.5605469942 0 ) )
-( ( 1328 -720 323 0.8105469942 0.25 ) ( 1312 -720 323 0.8105469942 0.125 ) ( 1296 -720 323 0.8105469942 0 ) )
-( ( 1328 -720 309.75 0.9140629768 0.25 ) ( 1312 -720 309.75 0.9140629768 0.125 ) ( 1296 -720 309.75 0.9140629768 0 ) )
-( ( 1328 -720 309.75 0.9140629768 0.25 ) ( 1312 -720 309.75 0.9140629768 0.125 ) ( 1296 -720 309.75 0.9140629768 0 ) )
-)
-}
-}
-}
-// entity 259
-{
-"classname" "func_group"
-"type" "patchCapped"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 1328 14.5 480 0.1132809967 -3.75 ) ( 1328 -16 480 -0.125 -3.75 ) ( 1328 -16 447 -0.125 -3.4921879768 ) )
-( ( 1328 -16 480 -0.125 -3.75 ) ( 1328 -16 480 -0.125 -3.75 ) ( 1328 -16 480 -0.125 -3.75 ) )
-( ( 1328 -16 480 -0.125 -3.75 ) ( 1328 -16 480 -0.125 -3.75 ) ( 1328 -16 480 -0.125 -3.75 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 1296 -16 447 -0.125 -3.4921879768 ) ( 1296 -16 480 -0.125 -3.75 ) ( 1296 14.5 480 0.1132809967 -3.75 ) )
-( ( 1296 -16 480 -0.125 -3.75 ) ( 1296 -16 480 -0.125 -3.75 ) ( 1296 -16 480 -0.125 -3.75 ) )
-( ( 1296 -16 480 -0.125 -3.75 ) ( 1296 -16 480 -0.125 -3.75 ) ( 1296 -16 480 -0.125 -3.75 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 1296 -16 447 0 0.25 ) ( 1312 -16 447 0 0.125 ) ( 1328 -16 447 0 0 ) )
-( ( 1296 -16 480 0.2578130066 0.25 ) ( 1312 -16 480 0.2578130066 0.125 ) ( 1328 -16 480 0.2578130066 0 ) )
-( ( 1296 14.5 480 0.4960939884 0.25 ) ( 1312 14.5 480 0.4960939884 0.125 ) ( 1328 14.5 480 0.4960939884 0 ) )
-)
-}
-}
-}
-// entity 260
-{
-"classname" "func_group"
-"type" "patchCapped"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 1328 -16 447 10.125 -3.4921879768 ) ( 1328 -16 480 10.125 -3.75 ) ( 1376 -16 480 9.75 -3.75 ) )
-( ( 1328 -16 480 10.125 -3.75 ) ( 1328 -16 480 10.125 -3.75 ) ( 1328 -16 480 10.125 -3.75 ) )
-( ( 1328 -16 480 10.125 -3.75 ) ( 1328 -16 480 10.125 -3.75 ) ( 1328 -16 480 10.125 -3.75 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 1376 -48.5 480 9.75 -3.75 ) ( 1328 -48.5 480 10.125 -3.75 ) ( 1328 -50.5 447 10.125 -3.4921879768 ) )
-( ( 1328 -48.5 480 10.125 -3.75 ) ( 1328 -48.5 480 10.125 -3.75 ) ( 1328 -48.5 480 10.125 -3.75 ) )
-( ( 1328 -48.5 480 10.125 -3.75 ) ( 1328 -48.5 480 10.125 -3.75 ) ( 1328 -48.5 480 10.125 -3.75 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 1328 -16 447 0 0 ) ( 1328 -32 447 0 0.125 ) ( 1328 -50.5 447 0 0.2695310116 ) )
-( ( 1328 -16 480 0.2585510015 0 ) ( 1328 -32 480 0.2585510015 0.125 ) ( 1328 -48.5 480 0.2585510015 0.2695310116 ) )
-( ( 1376 -16 480 0.6335510015 0 ) ( 1376 -32 480 0.6335510015 0.125 ) ( 1376 -48.5 480 0.6335510015 0.2695310116 ) )
-)
-}
-}
-}
-// entity 261
-{
-"classname" "func_group"
-"type" "patchCapped"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 1248 -15.9999990463 480 9.75 -3.75 ) ( 1296 -15.9999990463 480 10.125 -3.75 ) ( 1296 -15.9999990463 447 10.125 -3.4921879768 ) )
-( ( 1296 -15.9999990463 480 10.125 -3.75 ) ( 1296 -15.9999990463 480 10.125 -3.75 ) ( 1296 -15.9999990463 480 10.125 -3.75 ) )
-( ( 1296 -15.9999990463 480 10.125 -3.75 ) ( 1296 -15.9999990463 480 10.125 -3.75 ) ( 1296 -15.9999990463 480 10.125 -3.75 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 1296 -50.5 447 10.125 -3.4921879768 ) ( 1296 -48.5 480 10.125 -3.75 ) ( 1248 -48.5 480 9.75 -3.75 ) )
-( ( 1296 -48.5 480 10.125 -3.75 ) ( 1296 -48.5 480 10.125 -3.75 ) ( 1296 -48.5 480 10.125 -3.75 ) )
-( ( 1296 -48.5 480 10.125 -3.75 ) ( 1296 -48.5 480 10.125 -3.75 ) ( 1296 -48.5 480 10.125 -3.75 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 1296 -50.5 447 0 0.2695310116 ) ( 1296 -32 447 0 0.125 ) ( 1296 -15.9999990463 447 0 0 ) )
-( ( 1296 -48.5 480 0.2585510015 0.2695310116 ) ( 1296 -32 480 0.2585510015 0.125 ) ( 1296 -15.9999990463 480 0.2585510015 0 ) )
-( ( 1248 -48.5 480 0.6335510015 0.2695310116 ) ( 1248 -32 480 0.6335510015 0.125 ) ( 1248 -15.9999990463 480 0.6335510015 0 ) )
-)
-}
-}
-}
-// entity 262
-{
-"classname" "func_group"
-"type" "patchCapped"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 1328 -128 304 -1 -2.375 ) ( 1328 -48 304 -0.375 -2.375 ) ( 1328 -48 488 -0.375 -3.8125 ) )
-( ( 1328 -48 304 -0.375 -2.375 ) ( 1328 -48 304 -0.375 -2.375 ) ( 1328 -48 304 -0.375 -2.375 ) )
-( ( 1328 -48 304 -0.375 -2.375 ) ( 1328 -48 304 -0.375 -2.375 ) ( 1328 -48 304 -0.375 -2.375 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 1296 -48 488 -0.375 -3.8125 ) ( 1296 -48 304 -0.375 -2.375 ) ( 1296 -128 304 -1 -2.375 ) )
-( ( 1296 -48 304 -0.375 -2.375 ) ( 1296 -48 304 -0.375 -2.375 ) ( 1296 -48 304 -0.375 -2.375 ) )
-( ( 1296 -48 304 -0.375 -2.375 ) ( 1296 -48 304 -0.375 -2.375 ) ( 1296 -48 304 -0.375 -2.375 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 1296 -48 488 0 0.25 ) ( 1312 -48 488 0 0.125 ) ( 1328 -48 488 0 0 ) )
-( ( 1296 -48 304 1.4375 0.25 ) ( 1312 -48 304 1.4375 0.125 ) ( 1328 -48 304 1.4375 0 ) )
-( ( 1296 -128 304 2.0625 0.25 ) ( 1312 -128 304 2.0625 0.125 ) ( 1328 -128 304 2.0625 0 ) )
-)
-}
-}
-}
-// entity 263
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 9 3 0 0 0 )
-(
-( ( 1136 -24 495 0 0.0625 ) ( 1138.1199951172 -24 498.391998291 0 0.03125 ) ( 1140.2399902344 -24 501.783996582 0 0 ) )
-( ( 1136 -208 495 1.4375 0.0625 ) ( 1137.1433105469 -206.8566894531 498.6586303711 1.4375 0.03125 ) ( 1138.2866210938 -205.7133789062 502.3172607422 1.4375 0 ) )
-( ( 1312 -208 495 2.8125 0.0625 ) ( 1312 -205.8800048828 498.391998291 2.8125 0.03125 ) ( 1312 -203.7600097656 501.783996582 2.8125 0 ) )
-( ( 1488 -208 495 4.1875 0.0625 ) ( 1486.8566894531 -206.8566894531 498.6586303711 4.1875 0.03125 ) ( 1485.7133789062 -205.7133789062 502.3172607422 4.1875 0 ) )
-( ( 1488 -24 495 5.625 0.0625 ) ( 1485.8800048828 -24 498.391998291 5.625 0.03125 ) ( 1483.7600097656 -24 501.783996582 5.625 0 ) )
-( ( 1488 152 495 7 0.0625 ) ( 1486.8566894531 150.8566894531 498.6586303711 7 0.03125 ) ( 1485.7133789062 149.7133789062 502.3172607422 7 0 ) )
-( ( 1312 152 495 8.375 0.0625 ) ( 1312 149.8800048828 498.391998291 8.375 0.03125 ) ( 1312 147.7600097656 501.783996582 8.375 0 ) )
-( ( 1136 152 495 9.75 0.0625 ) ( 1137.1433105469 150.8566894531 498.6586303711 9.75 0.03125 ) ( 1138.2866210938 149.7133789062 502.3172607422 9.75 0 ) )
-( ( 1136 -24 495 11.125 0.0625 ) ( 1138.1199951172 -24 498.391998291 11.125 0.03125 ) ( 1140.2399902344 -24 501.783996582 11.125 0 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 9 3 0 0 0 )
-(
-( ( 1166.7381591797 -24 440.6875610352 0 0 ) ( 1163.369140625 -24 442.8437805176 0 0.03125 ) ( 1160 -24 445 0 0.0625 ) )
-( ( 1164.4156494141 -171.0068359375 440.576171875 1.1875 0 ) ( 1162.2077636719 -173.5034179688 442.7880859375 1.1875 0.03125 ) ( 1160 -176 445 1.1875 0.0625 ) )
-( ( 1312 -168.3806152344 442.5617980957 2.375 0 ) ( 1312 -172.1903076172 443.7808837891 2.375 0.03125 ) ( 1312 -176 445 2.375 0.0625 ) )
-( ( 1459.5843505859 -171.0068359375 440.576171875 3.5625 0 ) ( 1461.7922363281 -173.5034179688 442.7880859375 3.5625 0.03125 ) ( 1464 -176 445 3.5625 0.0625 ) )
-( ( 1457.2618408203 -24 440.6875610352 4.75 0 ) ( 1460.630859375 -24 442.8437805176 4.75 0.03125 ) ( 1464 -24 445 4.75 0.0625 ) )
-( ( 1459.8059082031 123.8059082031 439.6315917969 5.9375 0 ) ( 1461.9029541016 125.9029541016 442.3157958984 5.9375 0.03125 ) ( 1464 128 445 5.9375 0.0625 ) )
-( ( 1312 121.2618408203 440.6875610352 7.125 0 ) ( 1312 124.6309204102 442.8437805176 7.125 0.03125 ) ( 1312 128 445 7.125 0.0625 ) )
-( ( 1164.1940917969 123.8059082031 439.6315917969 8.3125 0 ) ( 1162.0970458984 125.9029541016 442.3157958984 8.3125 0.03125 ) ( 1160 128 445 8.3125 0.0625 ) )
-( ( 1166.7381591797 -24 440.6875610352 9.5 0 ) ( 1163.369140625 -24 442.8437805176 9.5 0.03125 ) ( 1160 -24 445 9.5 0.0625 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 9 3 0 0 0 )
-(
-( ( 1140.2399902344 -24 501.783996582 0 0 ) ( 1183.8046875 -24 471.7570800781 0 0.3685150146 ) ( 1166.7381591797 -24 440.6875610352 0 0.6004030108 ) )
-( ( 1138.2866210938 -205.7133789062 502.3172607422 1.1875 0 ) ( 1181.0072021484 -162.5908203125 473.1094360352 1.1875 0.3685150146 ) ( 1164.4156494141 -171.0068359375 440.576171875 1.1875 0.6004030108 ) )
-( ( 1312 -203.7600097656 501.783996582 2.375 0 ) ( 1312 -160.4884643555 472.7525634766 2.375 0.3685150146 ) ( 1312 -168.3806152344 442.5617980957 2.375 0.6004030108 ) )
-( ( 1485.7133789062 -205.7133789062 502.3172607422 3.5625 0 ) ( 1442.9927978516 -162.5908203125 473.1094360352 3.5625 0.3685150146 ) ( 1459.5843505859 -171.0068359375 440.576171875 3.5625 0.6004030108 ) )
-( ( 1483.7600097656 -24 501.783996582 4.75 0 ) ( 1440.1953125 -24 471.7570800781 4.75 0.3685150146 ) ( 1457.2618408203 -24 440.6875610352 4.75 0.6004030108 ) )
-( ( 1485.7133789062 149.7133789062 502.3172607422 5.9375 0 ) ( 1442.6097412109 106.6097412109 472.4270629883 5.9375 0.3685150146 ) ( 1459.8059082031 123.8059082031 439.6315917969 5.9375 0.6004030108 ) )
-( ( 1312 147.7600097656 501.783996582 7.125 0 ) ( 1312 104.1953735352 471.7570800781 7.125 0.3685150146 ) ( 1312 121.2618408203 440.6875610352 7.125 0.6004030108 ) )
-( ( 1138.2866210938 149.7133789062 502.3172607422 8.3125 0 ) ( 1181.3902587891 106.6097412109 472.4270629883 8.3125 0.3685150146 ) ( 1164.1940917969 123.8059082031 439.6315917969 8.3125 0.6004030108 ) )
-( ( 1140.2399902344 -24 501.783996582 9.5 0 ) ( 1183.8046875 -24 471.7570800781 9.5 0.3685150146 ) ( 1166.7381591797 -24 440.6875610352 9.5 0.6004030108 ) )
-)
-}
-}
-// brush 3
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 9 3 0 0 0 )
-(
-( ( 1160 -24 445 0 0.6004030108 ) ( 1176 -24 470 0 0.3685150146 ) ( 1136 -24 495 0 0 ) )
-( ( 1160 -176 445 1.1875 0.6004030108 ) ( 1176 -168 470 1.1875 0.3685150146 ) ( 1136 -208 495 1.1875 0 ) )
-( ( 1312 -176 445 2.375 0.6004030108 ) ( 1312 -168 470 2.375 0.3685150146 ) ( 1312 -208 495 2.375 0 ) )
-( ( 1464 -176 445 3.5625 0.6004030108 ) ( 1448 -168 470 3.5625 0.3685150146 ) ( 1488 -208 495 3.5625 0 ) )
-( ( 1464 -24 445 4.75 0.6004030108 ) ( 1448 -24 470 4.75 0.3685150146 ) ( 1488 -24 495 4.75 0 ) )
-( ( 1464 128 445 5.9375 0.6004030108 ) ( 1448 112 470 5.9375 0.3685150146 ) ( 1488 152 495 5.9375 0 ) )
-( ( 1312 128 445 7.125 0.6004030108 ) ( 1312 112 470 7.125 0.3685150146 ) ( 1312 152 495 7.125 0 ) )
-( ( 1160 128 445 8.3125 0.6004030108 ) ( 1176 112 470 8.3125 0.3685150146 ) ( 1136 152 495 8.3125 0 ) )
-( ( 1160 -24 445 9.5 0.6004030108 ) ( 1176 -24 470 9.5 0.3685150146 ) ( 1136 -24 495 9.5 0 ) )
-)
-}
-}
-}
-// entity 264
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 9 3 0 0 0 )
-(
-( ( 1136 -736 495 0 0.0625 ) ( 1138.1199951172 -736 498.391998291 0 0.03125 ) ( 1140.2399902344 -736 501.783996582 0 0 ) )
-( ( 1136 -920 495 1.4375 0.0625 ) ( 1137.1433105469 -918.8566894531 498.6586303711 1.4375 0.03125 ) ( 1138.2866210938 -917.7133789062 502.3172607422 1.4375 0 ) )
-( ( 1312 -920 495 2.8125 0.0625 ) ( 1312 -917.8800048828 498.391998291 2.8125 0.03125 ) ( 1312 -915.7600097656 501.783996582 2.8125 0 ) )
-( ( 1488 -920 495 4.1875 0.0625 ) ( 1486.8566894531 -918.8566894531 498.6586303711 4.1875 0.03125 ) ( 1485.7133789062 -917.7133789062 502.3172607422 4.1875 0 ) )
-( ( 1488 -736 495 5.625 0.0625 ) ( 1485.8800048828 -736 498.391998291 5.625 0.03125 ) ( 1483.7600097656 -736 501.783996582 5.625 0 ) )
-( ( 1488 -560 495 7 0.0625 ) ( 1486.8566894531 -561.1433105469 498.6586303711 7 0.03125 ) ( 1485.7133789062 -562.2866210938 502.3172607422 7 0 ) )
-( ( 1312 -560 495 8.375 0.0625 ) ( 1312 -562.1199951172 498.391998291 8.375 0.03125 ) ( 1312 -564.2399902344 501.783996582 8.375 0 ) )
-( ( 1136 -560 495 9.75 0.0625 ) ( 1137.1433105469 -561.1433105469 498.6586303711 9.75 0.03125 ) ( 1138.2866210938 -562.2866210938 502.3172607422 9.75 0 ) )
-( ( 1136 -736 495 11.125 0.0625 ) ( 1138.1199951172 -736 498.391998291 11.125 0.03125 ) ( 1140.2399902344 -736 501.783996582 11.125 0 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 9 3 0 0 0 )
-(
-( ( 1166.7381591797 -736 440.6875610352 0 0 ) ( 1163.369140625 -736 442.8437805176 0 0.03125 ) ( 1160 -736 445 0 0.0625 ) )
-( ( 1164.4156494141 -883.0068359375 440.576171875 1.1875 0 ) ( 1162.2077636719 -885.5034179688 442.7880859375 1.1875 0.03125 ) ( 1160 -888 445 1.1875 0.0625 ) )
-( ( 1312 -880.3806152344 442.5617980957 2.375 0 ) ( 1312 -884.1903076172 443.7808837891 2.375 0.03125 ) ( 1312 -888 445 2.375 0.0625 ) )
-( ( 1459.5843505859 -883.0068359375 440.576171875 3.5625 0 ) ( 1461.7922363281 -885.5034179688 442.7880859375 3.5625 0.03125 ) ( 1464 -888 445 3.5625 0.0625 ) )
-( ( 1457.2618408203 -736 440.6875610352 4.75 0 ) ( 1460.630859375 -736 442.8437805176 4.75 0.03125 ) ( 1464 -736 445 4.75 0.0625 ) )
-( ( 1459.8059082031 -588.1940917969 439.6315917969 5.9375 0 ) ( 1461.9029541016 -586.0970458984 442.3157958984 5.9375 0.03125 ) ( 1464 -584 445 5.9375 0.0625 ) )
-( ( 1312 -590.7381591797 440.6875610352 7.125 0 ) ( 1312 -587.3690795898 442.8437805176 7.125 0.03125 ) ( 1312 -584 445 7.125 0.0625 ) )
-( ( 1164.1940917969 -588.1940917969 439.6315917969 8.3125 0 ) ( 1162.0970458984 -586.0970458984 442.3157958984 8.3125 0.03125 ) ( 1160 -584 445 8.3125 0.0625 ) )
-( ( 1166.7381591797 -736 440.6875610352 9.5 0 ) ( 1163.369140625 -736 442.8437805176 9.5 0.03125 ) ( 1160 -736 445 9.5 0.0625 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 9 3 0 0 0 )
-(
-( ( 1140.2399902344 -736 501.783996582 0 0 ) ( 1183.8046875 -736 471.7570800781 0 0.3685150146 ) ( 1166.7381591797 -736 440.6875610352 0 0.6004030108 ) )
-( ( 1138.2866210938 -917.7133789062 502.3172607422 1.1875 0 ) ( 1181.0072021484 -874.5908203125 473.1094360352 1.1875 0.3685150146 ) ( 1164.4156494141 -883.0068359375 440.576171875 1.1875 0.6004030108 ) )
-( ( 1312 -915.7600097656 501.783996582 2.375 0 ) ( 1312 -872.4884643555 472.7525634766 2.375 0.3685150146 ) ( 1312 -880.3806152344 442.5617980957 2.375 0.6004030108 ) )
-( ( 1485.7133789062 -917.7133789062 502.3172607422 3.5625 0 ) ( 1442.9927978516 -874.5908203125 473.1094360352 3.5625 0.3685150146 ) ( 1459.5843505859 -883.0068359375 440.576171875 3.5625 0.6004030108 ) )
-( ( 1483.7600097656 -736 501.783996582 4.75 0 ) ( 1440.1953125 -736 471.7570800781 4.75 0.3685150146 ) ( 1457.2618408203 -736 440.6875610352 4.75 0.6004030108 ) )
-( ( 1485.7133789062 -562.2866210938 502.3172607422 5.9375 0 ) ( 1442.6097412109 -605.3902587891 472.4270629883 5.9375 0.3685150146 ) ( 1459.8059082031 -588.1940917969 439.6315917969 5.9375 0.6004030108 ) )
-( ( 1312 -564.2399902344 501.783996582 7.125 0 ) ( 1312 -607.8046264648 471.7570800781 7.125 0.3685150146 ) ( 1312 -590.7381591797 440.6875610352 7.125 0.6004030108 ) )
-( ( 1138.2866210938 -562.2866210938 502.3172607422 8.3125 0 ) ( 1181.3902587891 -605.3902587891 472.4270629883 8.3125 0.3685150146 ) ( 1164.1940917969 -588.1940917969 439.6315917969 8.3125 0.6004030108 ) )
-( ( 1140.2399902344 -736 501.783996582 9.5 0 ) ( 1183.8046875 -736 471.7570800781 9.5 0.3685150146 ) ( 1166.7381591797 -736 440.6875610352 9.5 0.6004030108 ) )
-)
-}
-}
-// brush 3
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 9 3 0 0 0 )
-(
-( ( 1160 -736 445 0 0.6004030108 ) ( 1176 -736 470 0 0.3685150146 ) ( 1136 -736 495 0 0 ) )
-( ( 1160 -888 445 1.1875 0.6004030108 ) ( 1176 -880 470 1.1875 0.3685150146 ) ( 1136 -920 495 1.1875 0 ) )
-( ( 1312 -888 445 2.375 0.6004030108 ) ( 1312 -880 470 2.375 0.3685150146 ) ( 1312 -920 495 2.375 0 ) )
-( ( 1464 -888 445 3.5625 0.6004030108 ) ( 1448 -880 470 3.5625 0.3685150146 ) ( 1488 -920 495 3.5625 0 ) )
-( ( 1464 -736 445 4.75 0.6004030108 ) ( 1448 -736 470 4.75 0.3685150146 ) ( 1488 -736 495 4.75 0 ) )
-( ( 1464 -584 445 5.9375 0.6004030108 ) ( 1448 -600 470 5.9375 0.3685150146 ) ( 1488 -560 495 5.9375 0 ) )
-( ( 1312 -584 445 7.125 0.6004030108 ) ( 1312 -600 470 7.125 0.3685150146 ) ( 1312 -560 495 7.125 0 ) )
-( ( 1160 -584 445 8.3125 0.6004030108 ) ( 1176 -600 470 8.3125 0.3685150146 ) ( 1136 -560 495 8.3125 0 ) )
-( ( 1160 -736 445 9.5 0.6004030108 ) ( 1176 -736 470 9.5 0.3685150146 ) ( 1136 -736 495 9.5 0 ) )
-)
-}
-}
-}
-// entity 265
-{
-"classname" "func_group"
-"type" "patchCapped"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 1599 -1088 320 12.4921884537 -2.5 ) ( 1599 -1216 320 12.4921884537 -3.5 ) ( 1599 -1216 320 12.4921884537 -3.5 ) )
-( ( 1217 -1088 320 9.5078134537 -2.5 ) ( 1408 -1216 320 11 -3.5 ) ( 1599 -1344 320 12.4921884537 -4.5 ) )
-( ( 1217 -1088 320 9.5078134537 -2.5 ) ( 1217 -1344 320 9.5078134537 -4.5 ) ( 1599 -1344 320 12.4921884537 -4.5 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 1599 -1216 296 12.4921884537 -3.5 ) ( 1599 -1216 296 12.4921884537 -3.5 ) ( 1599 -1088 296 12.4921884537 -2.5 ) )
-( ( 1599 -1344 296 12.4921884537 -4.5 ) ( 1408 -1216 296 11 -3.5 ) ( 1217 -1088 296 9.5078134537 -2.5 ) )
-( ( 1599 -1344 296 12.4921884537 -4.5 ) ( 1217 -1344 296 9.5078134537 -4.5 ) ( 1217 -1088 296 9.5078134537 -2.5 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 9 3 0 0 0 )
-(
-( ( 1599 -1216 320 0 0 ) ( 1599 -1216 308 0 0.09375 ) ( 1599 -1216 296 0 0.1875 ) )
-( ( 1599 -1344 320 1 0 ) ( 1599 -1344 308 1 0.09375 ) ( 1599 -1344 296 1 0.1875 ) )
-( ( 1599 -1344 320 1 0 ) ( 1599 -1344 308 1 0.09375 ) ( 1599 -1344 296 1 0.1875 ) )
-( ( 1217 -1344 320 3.984375 0 ) ( 1217 -1344 308 3.984375 0.09375 ) ( 1217 -1344 296 3.984375 0.1875 ) )
-( ( 1217 -1088 320 5.984375 0 ) ( 1217 -1088 308 5.984375 0.09375 ) ( 1217 -1088 296 5.984375 0.1875 ) )
-( ( 1217 -1088 320 5.984375 0 ) ( 1217 -1088 308 5.984375 0.09375 ) ( 1217 -1088 296 5.984375 0.1875 ) )
-( ( 1599 -1088 320 8.96875 0 ) ( 1599 -1088 308 8.96875 0.09375 ) ( 1599 -1088 296 8.96875 0.1875 ) )
-( ( 1599 -1216 320 9.96875 0 ) ( 1599 -1216 308 9.96875 0.09375 ) ( 1599 -1216 296 9.96875 0.1875 ) )
-( ( 1599 -1216 320 9.96875 0 ) ( 1599 -1216 308 9.96875 0.09375 ) ( 1599 -1216 296 9.96875 0.1875 ) )
-)
-}
-}
-}
-// entity 266
-{
-"classname" "func_group"
-"type" "patchCapped"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 1599 448 320 12.4921884537 -3.5 ) ( 1599 448 320 12.4921884537 -3.5 ) ( 1599 320 320 12.4921884537 -2.5 ) )
-( ( 1599 576 320 12.4921884537 -4.5 ) ( 1408 448 320 11 -3.5 ) ( 1217 320 320 9.5078134537 -2.5 ) )
-( ( 1599 576 320 12.4921884537 -4.5 ) ( 1217 576 320 9.5078134537 -4.5 ) ( 1217 320 320 9.5078134537 -2.5 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 1599 320 296 12.4921884537 -2.5 ) ( 1599 448 296 12.4921884537 -3.5 ) ( 1599 448 296 12.4921884537 -3.5 ) )
-( ( 1217 320 296 9.5078134537 -2.5 ) ( 1408 448 296 11 -3.5 ) ( 1599 576 296 12.4921884537 -4.5 ) )
-( ( 1217 320 296 9.5078134537 -2.5 ) ( 1217 576 296 9.5078134537 -4.5 ) ( 1599 576 296 12.4921884537 -4.5 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 9 3 0 0 0 )
-(
-( ( 1599 448 296 0 0.1875 ) ( 1599 448 308 0 0.09375 ) ( 1599 448 320 0 0 ) )
-( ( 1599 576 296 1 0.1875 ) ( 1599 576 308 1 0.09375 ) ( 1599 576 320 1 0 ) )
-( ( 1599 576 296 1 0.1875 ) ( 1599 576 308 1 0.09375 ) ( 1599 576 320 1 0 ) )
-( ( 1217 576 296 3.984375 0.1875 ) ( 1217 576 308 3.984375 0.09375 ) ( 1217 576 320 3.984375 0 ) )
-( ( 1217 320 296 5.984375 0.1875 ) ( 1217 320 308 5.984375 0.09375 ) ( 1217 320 320 5.984375 0 ) )
-( ( 1217 320 296 5.984375 0.1875 ) ( 1217 320 308 5.984375 0.09375 ) ( 1217 320 320 5.984375 0 ) )
-( ( 1599 320 296 8.96875 0.1875 ) ( 1599 320 308 8.96875 0.09375 ) ( 1599 320 320 8.96875 0 ) )
-( ( 1599 448 296 9.96875 0.1875 ) ( 1599 448 308 9.96875 0.09375 ) ( 1599 448 320 9.96875 0 ) )
-( ( 1599 448 296 9.96875 0.1875 ) ( 1599 448 308 9.96875 0.09375 ) ( 1599 448 320 9.96875 0 ) )
-)
-}
-}
-}
-// entity 267
-{
-"classname" "func_group"
-"type" "patchCapped"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 1599 576.0002441406 296 12.4921884537 -4.5000019073 ) ( 1599 576.0002441406 296 12.4921884537 -4.5000019073 ) ( 1599 -383.9999389648 296 12.4921884537 3 ) )
-( ( 1804 576.0002441406 296 14.09375 -4.5000019073 ) ( 1701.5 -383.9998779297 296 13.29296875 2.9999990463 ) ( 1599 -1344 296 12.4921884537 10.5 ) )
-( ( 1804 -383.9999389648 296 14.09375 3 ) ( 1804 -1344 296 14.09375 10.5 ) ( 1599 -1344 296 12.4921884537 10.5 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 9 3 0 0 0 )
-(
-( ( 1599 -383.9999389648 296 0 0.1875 ) ( 1599 -383.9999389648 308 0 0.09375 ) ( 1599 -383.9999389648 320 0 0 ) )
-( ( 1599 -1344 296 7.5 0.1875 ) ( 1599 -1344 308 7.5 0.09375 ) ( 1599 -1344 320 7.5 0 ) )
-( ( 1599 -1344 296 7.5 0.1875 ) ( 1599 -1344 308 7.5 0.09375 ) ( 1599 -1344 320 7.5 0 ) )
-( ( 1804 -1344 296 9.1015634537 0.1875 ) ( 1804 -1344 308 9.1015634537 0.09375 ) ( 1804 -1344 320 9.1015634537 0 ) )
-( ( 1804 -383.9999389648 296 16.6015625 0.1875 ) ( 1804 -383.9999389648 308 16.6015625 0.09375 ) ( 1804 -383.9999389648 320 16.6015625 0 ) )
-( ( 1804 576.0002441406 296 24.1015644073 0.1875 ) ( 1804 576.0002441406 308 24.1015644073 0.09375 ) ( 1804 576.0002441406 320 24.1015644073 0 ) )
-( ( 1599 576.0002441406 296 25.7031269073 0.1875 ) ( 1599 576.0002441406 308 25.7031269073 0.09375 ) ( 1599 576.0002441406 320 25.7031269073 0 ) )
-( ( 1599 576.0002441406 296 25.7031269073 0.1875 ) ( 1599 576.0002441406 308 25.7031269073 0.09375 ) ( 1599 576.0002441406 320 25.7031269073 0 ) )
-( ( 1599 -383.9999389648 296 33.2031288147 0.1875 ) ( 1599 -383.9999389648 308 33.2031288147 0.09375 ) ( 1599 -383.9999389648 320 33.2031288147 0 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 1599 -383.9999389648 320 12.4921884537 3 ) ( 1599 576.0002441406 320 12.4921884537 -4.5000019073 ) ( 1599 576.0002441406 320 12.4921884537 -4.5000019073 ) )
-( ( 1599 -1344 320 12.4921884537 10.5 ) ( 1701.5 -383.9998779297 320 13.29296875 2.9999990463 ) ( 1804 576.0002441406 320 14.09375 -4.5000019073 ) )
-( ( 1599 -1344 320 12.4921884537 10.5 ) ( 1804 -1344 320 14.09375 10.5 ) ( 1804 -383.9999389648 320 14.09375 3 ) )
-)
-}
-}
-}
-// entity 268
-{
-"classname" "func_group"
-"type" "patchCapped"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 1344 -1088 320 10.5 -2.5 ) ( 1280.5 -1088 320 10.00390625 -2.5 ) ( 1280.5 -1088 320 10.00390625 -2.5 ) )
-( ( 1344 -960 320 10.5 -1.5 ) ( 1280.5 -1024 320 10.00390625 -2 ) ( 1217 -1088 320 9.5078134537 -2.5 ) )
-( ( 1344 -960 320 10.5 -1.5 ) ( 1217 -960 320 9.5078134537 -1.5 ) ( 1217 -1088 320 9.5078134537 -2.5 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 1280.5 -1088 296 10.00390625 -2.5 ) ( 1280.5 -1088 296 10.00390625 -2.5 ) ( 1344 -1088 296 10.5 -2.5 ) )
-( ( 1217 -1088 296 9.5078134537 -2.5 ) ( 1280.5 -1024 296 10.00390625 -2 ) ( 1344 -960 296 10.5 -1.5 ) )
-( ( 1217 -1088 296 9.5078134537 -2.5 ) ( 1217 -960 296 9.5078134537 -1.5 ) ( 1344 -960 296 10.5 -1.5 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 9 3 0 0 0 )
-(
-( ( 1280.5 -1088 320 0 0 ) ( 1280.5 -1088 308 0 0.09375 ) ( 1280.5 -1088 296 0 0.1875 ) )
-( ( 1217 -1088 320 0.4960939884 0 ) ( 1217 -1088 308 0.4960939884 0.09375 ) ( 1217 -1088 296 0.4960939884 0.1875 ) )
-( ( 1217 -1088 320 0.4960939884 0 ) ( 1217 -1088 308 0.4960939884 0.09375 ) ( 1217 -1088 296 0.4960939884 0.1875 ) )
-( ( 1217 -960 320 1.4960939884 0 ) ( 1217 -960 308 1.4960939884 0.09375 ) ( 1217 -960 296 1.4960939884 0.1875 ) )
-( ( 1344 -960 320 2.4882810116 0 ) ( 1344 -960 308 2.4882810116 0.09375 ) ( 1344 -960 296 2.4882810116 0.1875 ) )
-( ( 1344 -960 320 2.4882810116 0 ) ( 1344 -960 308 2.4882810116 0.09375 ) ( 1344 -960 296 2.4882810116 0.1875 ) )
-( ( 1344 -1088 320 3.4882810116 0 ) ( 1344 -1088 308 3.4882810116 0.09375 ) ( 1344 -1088 296 3.4882810116 0.1875 ) )
-( ( 1280.5 -1088 320 3.984375 0 ) ( 1280.5 -1088 308 3.984375 0.09375 ) ( 1280.5 -1088 296 3.984375 0.1875 ) )
-( ( 1280.5 -1088 320 3.984375 0 ) ( 1280.5 -1088 308 3.984375 0.09375 ) ( 1280.5 -1088 296 3.984375 0.1875 ) )
-)
-}
-}
-}
-// entity 269
-{
-"classname" "func_group"
-"type" "patchCapped"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 1280.5 320 320 10.00390625 -2.5 ) ( 1280.5 320 320 10.00390625 -2.5 ) ( 1344 320 320 10.5 -2.5 ) )
-( ( 1217 320 320 9.5078134537 -2.5 ) ( 1280.5 256 320 10.00390625 -2 ) ( 1344 192 320 10.5 -1.5 ) )
-( ( 1217 320 320 9.5078134537 -2.5 ) ( 1217 192 320 9.5078134537 -1.5 ) ( 1344 192 320 10.5 -1.5 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 1344 320 296 10.5 -2.5 ) ( 1280.5 320 296 10.00390625 -2.5 ) ( 1280.5 320 296 10.00390625 -2.5 ) )
-( ( 1344 192 296 10.5 -1.5 ) ( 1280.5 256 296 10.00390625 -2 ) ( 1217 320 296 9.5078134537 -2.5 ) )
-( ( 1344 192 296 10.5 -1.5 ) ( 1217 192 296 9.5078134537 -1.5 ) ( 1217 320 296 9.5078134537 -2.5 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 9 3 0 0 0 )
-(
-( ( 1280.5 320 296 0 0.1875 ) ( 1280.5 320 308 0 0.09375 ) ( 1280.5 320 320 0 0 ) )
-( ( 1217 320 296 0.4960939884 0.1875 ) ( 1217 320 308 0.4960939884 0.09375 ) ( 1217 320 320 0.4960939884 0 ) )
-( ( 1217 320 296 0.4960939884 0.1875 ) ( 1217 320 308 0.4960939884 0.09375 ) ( 1217 320 320 0.4960939884 0 ) )
-( ( 1217 192 296 1.4960939884 0.1875 ) ( 1217 192 308 1.4960939884 0.09375 ) ( 1217 192 320 1.4960939884 0 ) )
-( ( 1344 192 296 2.4882810116 0.1875 ) ( 1344 192 308 2.4882810116 0.09375 ) ( 1344 192 320 2.4882810116 0 ) )
-( ( 1344 192 296 2.4882810116 0.1875 ) ( 1344 192 308 2.4882810116 0.09375 ) ( 1344 192 320 2.4882810116 0 ) )
-( ( 1344 320 296 3.4882810116 0.1875 ) ( 1344 320 308 3.4882810116 0.09375 ) ( 1344 320 320 3.4882810116 0 ) )
-( ( 1280.5 320 296 3.984375 0.1875 ) ( 1280.5 320 308 3.984375 0.09375 ) ( 1280.5 320 320 3.984375 0 ) )
-( ( 1280.5 320 296 3.984375 0.1875 ) ( 1280.5 320 308 3.984375 0.09375 ) ( 1280.5 320 320 3.984375 0 ) )
-)
-}
-}
-}
-// entity 270
-{
-"classname" "func_group"
-"type" "patchCapped"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 5 3 0 0 0 )
-(
-( ( 1536 -959.9999389648 320 12 2 ) ( 1536 -959.9999389648 320 12 2 ) ( 1344 -959.9999389648 320 10.5 2 ) )
-( ( 1536 -959.9999389648 320 12 2 ) ( 1536 -959.9999389648 320 12 2 ) ( 1536 -959.9999389648 320 12 2 ) )
-( ( 1536 -736 320 12 0.25 ) ( 1536 -736 320 12 0.25 ) ( 1536 -736 320 12 0.25 ) )
-( ( 1536 -512 320 12 -1.5 ) ( 1536 -512 320 12 -1.5 ) ( 1536 -512 320 12 -1.5 ) )
-( ( 1536 -512 320 12 -1.5 ) ( 1536 -512 320 12 -1.5 ) ( 1344 -512 320 10.5 -1.5 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 5 3 0 0 0 )
-(
-( ( 1344 -959.9999389648 296 10.5 2 ) ( 1536 -959.9999389648 296 12 2 ) ( 1536 -959.9999389648 296 12 2 ) )
-( ( 1536 -959.9999389648 296 12 2 ) ( 1536 -959.9999389648 296 12 2 ) ( 1536 -959.9999389648 296 12 2 ) )
-( ( 1536 -736 296 12 0.25 ) ( 1536 -736 296 12 0.25 ) ( 1536 -736 296 12 0.25 ) )
-( ( 1536 -512 296 12 -1.5 ) ( 1536 -512 296 12 -1.5 ) ( 1536 -512 296 12 -1.5 ) )
-( ( 1344 -512 296 10.5 -1.5 ) ( 1536 -512 296 12 -1.5 ) ( 1536 -512 296 12 -1.5 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 5 3 0 0 0 )
-(
-( ( 1344 -512 296 0 0.1875 ) ( 1344 -512 308 0 0.09375 ) ( 1344 -512 320 0 0 ) )
-( ( 1536 -512 296 1.5 0.1875 ) ( 1536 -512 308 1.5 0.09375 ) ( 1536 -512 320 1.5 0 ) )
-( ( 1536 -736 296 3.25 0.1875 ) ( 1536 -736 308 3.25 0.09375 ) ( 1536 -736 320 3.25 0 ) )
-( ( 1536 -959.9999389648 296 5 0.1875 ) ( 1536 -959.9999389648 308 5 0.09375 ) ( 1536 -959.9999389648 320 5 0 ) )
-( ( 1344 -959.9999389648 296 6.5 0.1875 ) ( 1344 -959.9999389648 308 6.5 0.09375 ) ( 1344 -959.9999389648 320 6.5 0 ) )
-)
-}
-}
-}
-// entity 271
-{
-"classname" "func_group"
-"type" "patchCapped"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 5 3 0 0 0 )
-(
-( ( 1536 -255.9999542236 320 12 2 ) ( 1536 -255.9999542236 320 12 2 ) ( 1344 -255.9999542236 320 10.5 2 ) )
-( ( 1536 -255.9999542236 320 12 2 ) ( 1536 -255.9999542236 320 12 2 ) ( 1536 -255.9999542236 320 12 2 ) )
-( ( 1536 -32.0000152588 320 12 0.25 ) ( 1536 -32.0000152588 320 12 0.25 ) ( 1536 -32.0000152588 320 12 0.25 ) )
-( ( 1536 192.0000152588 320 12 -1.5 ) ( 1536 192.0000152588 320 12 -1.5 ) ( 1536 192.0000152588 320 12 -1.5 ) )
-( ( 1536 192.0000152588 320 12 -1.5 ) ( 1536 192.0000152588 320 12 -1.5 ) ( 1344 192.0000152588 320 10.5 -1.5 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 5 3 0 0 0 )
-(
-( ( 1344 -255.9999542236 296 10.5 2 ) ( 1536 -255.9999542236 296 12 2 ) ( 1536 -255.9999542236 296 12 2 ) )
-( ( 1536 -255.9999542236 296 12 2 ) ( 1536 -255.9999542236 296 12 2 ) ( 1536 -255.9999542236 296 12 2 ) )
-( ( 1536 -32.0000152588 296 12 0.25 ) ( 1536 -32.0000152588 296 12 0.25 ) ( 1536 -32.0000152588 296 12 0.25 ) )
-( ( 1536 192.0000152588 296 12 -1.5 ) ( 1536 192.0000152588 296 12 -1.5 ) ( 1536 192.0000152588 296 12 -1.5 ) )
-( ( 1344 192.0000152588 296 10.5 -1.5 ) ( 1536 192.0000152588 296 12 -1.5 ) ( 1536 192.0000152588 296 12 -1.5 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 5 3 0 0 0 )
-(
-( ( 1344 192.0000152588 296 0 0.1875 ) ( 1344 192.0000152588 308 0 0.09375 ) ( 1344 192.0000152588 320 0 0 ) )
-( ( 1536 192.0000152588 296 1.5 0.1875 ) ( 1536 192.0000152588 308 1.5 0.09375 ) ( 1536 192.0000152588 320 1.5 0 ) )
-( ( 1536 -32.0000152588 296 3.25 0.1875 ) ( 1536 -32.0000152588 308 3.25 0.09375 ) ( 1536 -32.0000152588 320 3.25 0 ) )
-( ( 1536 -255.9999542236 296 5 0.1875 ) ( 1536 -255.9999542236 308 5 0.09375 ) ( 1536 -255.9999542236 320 5 0 ) )
-( ( 1344 -255.9999542236 296 6.5 0.1875 ) ( 1344 -255.9999542236 308 6.5 0.09375 ) ( 1344 -255.9999542236 320 6.5 0 ) )
-)
-}
-}
-}
-// entity 272
-{
-"classname" "func_group"
-"type" "patchCapped"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 1088 -703.5 296 8.5 0.5 ) ( 1088 -511.5 296 8.5 2 ) ( 1344 -511.5 296 10.5 2 ) )
-( ( 1088 -511.5 296 8.5 2 ) ( 1088 -511.5 296 8.5 2 ) ( 1088 -511.5 296 8.5 2 ) )
-( ( 1088 -511.5 296 8.5 2 ) ( 1088 -511.5 296 8.5 2 ) ( 1088 -511.5 296 8.5 2 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 1344 -511.5 320 10.5 2 ) ( 1088 -511.5 320 8.5 2 ) ( 1088 -703.5 320 8.5 0.5 ) )
-( ( 1088 -511.5 320 8.5 2 ) ( 1088 -511.5 320 8.5 2 ) ( 1088 -511.5 320 8.5 2 ) )
-( ( 1088 -511.5 320 8.5 2 ) ( 1088 -511.5 320 8.5 2 ) ( 1088 -511.5 320 8.5 2 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 1088 -703.5 296 0 0 ) ( 1088 -703.5 308 0 0.09375 ) ( 1088 -703.5 320 0 0.1875 ) )
-( ( 1088 -511.5 296 1.5 0 ) ( 1088 -511.5 308 1.5 0.09375 ) ( 1088 -511.5 320 1.5 0.1875 ) )
-( ( 1344 -511.5 296 3.5 0 ) ( 1344 -511.5 308 3.5 0.09375 ) ( 1344 -511.5 320 3.5 0.1875 ) )
-)
-}
-}
-}
-// entity 273
-{
-"classname" "func_group"
-"type" "patchCapped"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 1344 -256 296 10.5 2 ) ( 1088 -256 296 8.5 2 ) ( 1088 -64 296 8.5 0.5 ) )
-( ( 1088 -256 296 8.5 2 ) ( 1088 -256 296 8.5 2 ) ( 1088 -256 296 8.5 2 ) )
-( ( 1088 -256 296 8.5 2 ) ( 1088 -256 296 8.5 2 ) ( 1088 -256 296 8.5 2 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 1088 -64 320 8.5 0.5 ) ( 1088 -256 320 8.5 2 ) ( 1344 -256 320 10.5 2 ) )
-( ( 1088 -256 320 8.5 2 ) ( 1088 -256 320 8.5 2 ) ( 1088 -256 320 8.5 2 ) )
-( ( 1088 -256 320 8.5 2 ) ( 1088 -256 320 8.5 2 ) ( 1088 -256 320 8.5 2 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 1088 -64 320 0 0.1875 ) ( 1088 -64 308 0 0.09375 ) ( 1088 -64 296 0 0 ) )
-( ( 1088 -256 320 1.5 0.1875 ) ( 1088 -256 308 1.5 0.09375 ) ( 1088 -256 296 1.5 0 ) )
-( ( 1344 -256 320 3.5 0.1875 ) ( 1344 -256 308 3.5 0.09375 ) ( 1344 -256 296 3.5 0 ) )
-)
-}
-}
-}
-// entity 274
-{
-"classname" "func_group"
-"type" "patchCapped"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 929.25 -703.5 320 7.2597661018 5.4960942268 ) ( 1088 -703.5 320 8.5 5.4960942268 ) ( 1088 -703.5 320 8.5 5.4960942268 ) )
-( ( 770.5 -703.5 320 6.0195307732 5.4960942268 ) ( 929.25 -799.5 320 7.2597661018 6.2460942268 ) ( 1088 -895.5 320 8.5 6.9960942268 ) )
-( ( 770.5 -703.5 320 6.0195307732 5.4960942268 ) ( 770.5 -895.5 320 6.0195307732 6.9960942268 ) ( 929.25 -895.5 320 7.2597661018 6.9960942268 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 1088 -703.5 296 0 1.2402340174 ) ( 1088 -703.5 296 0 1.2402340174 ) ( 929.25 -703.5 296 0 0 ) )
-( ( 1088 -895.5 296 1.5 1.2402340174 ) ( 929.25 -799.5 296 1.5 1.2402340174 ) ( 770.5 -703.5 296 1.5 0 ) )
-( ( 929.25 -895.5 296 2.7402338982 1.2402340174 ) ( 770.5 -895.5 296 2.7402338982 1.2402340174 ) ( 770.5 -703.5 296 2.7402338982 0 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 9 3 0 0 0 )
-(
-( ( 929.25 -703.5 296 0 0.1875 ) ( 929.25 -703.5 308 0 0.09375 ) ( 929.25 -703.5 320 0 0 ) )
-( ( 770.5 -703.5 296 1.2402340174 0.1875 ) ( 770.5 -703.5 308 1.2402340174 0.09375 ) ( 770.5 -703.5 320 1.2402340174 0 ) )
-( ( 770.5 -703.5 296 1.2402340174 0.1875 ) ( 770.5 -703.5 308 1.2402340174 0.09375 ) ( 770.5 -703.5 320 1.2402340174 0 ) )
-( ( 770.5 -895.5 296 2.7402338982 0.1875 ) ( 770.5 -895.5 308 2.7402338982 0.09375 ) ( 770.5 -895.5 320 2.7402338982 0 ) )
-( ( 929.25 -895.5 296 3.9804689884 0.1875 ) ( 929.25 -895.5 308 3.9804689884 0.09375 ) ( 929.25 -895.5 320 3.9804689884 0 ) )
-( ( 1088 -895.5 296 5.220703125 0.1875 ) ( 1088 -895.5 308 5.220703125 0.09375 ) ( 1088 -895.5 320 5.220703125 0 ) )
-( ( 1088 -703.5 296 6.720703125 0.1875 ) ( 1088 -703.5 308 6.720703125 0.09375 ) ( 1088 -703.5 320 6.720703125 0 ) )
-( ( 1088 -703.5 296 6.720703125 0.1875 ) ( 1088 -703.5 308 6.720703125 0.09375 ) ( 1088 -703.5 320 6.720703125 0 ) )
-( ( 929.25 -703.5 296 7.9609379768 0.1875 ) ( 929.25 -703.5 308 7.9609379768 0.09375 ) ( 929.25 -703.5 320 7.9609379768 0 ) )
-)
-}
-}
-}
-// entity 275
-{
-"classname" "func_group"
-"type" "patchCapped"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 929.25 -63.9999923706 320 7.2597661018 0.5 ) ( 770.5 -63.9999923706 320 6.0195307732 0.5 ) ( 770.5 -63.9999923706 320 6.0195307732 0.5 ) )
-( ( 1088 -63.9999923706 320 8.5 0.5 ) ( 929.25 32.0000038147 320 7.2597661018 -0.25 ) ( 770.5 128 320 6.0195307732 -1 ) )
-( ( 1088 -63.9999923706 320 8.5 0.5 ) ( 1088 128 320 8.5 -1 ) ( 929.25 128 320 7.2597661018 -1 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 770.5 -63.9999923706 296 0 1.2402340174 ) ( 770.5 -63.9999923706 296 0 1.2402340174 ) ( 929.25 -63.9999923706 296 0 0 ) )
-( ( 770.5 128 296 1.5 1.2402340174 ) ( 929.25 32.0000038147 296 1.5 1.2402340174 ) ( 1088 -63.9999923706 296 1.5 0 ) )
-( ( 929.25 128 296 2.7402338982 1.2402340174 ) ( 1088 128 296 2.7402338982 1.2402340174 ) ( 1088 -63.9999923706 296 2.7402338982 0 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 9 3 0 0 0 )
-(
-( ( 929.25 -63.9999923706 296 0 0.1875 ) ( 929.25 -63.9999923706 308 0 0.09375 ) ( 929.25 -63.9999923706 320 0 0 ) )
-( ( 1088 -63.9999923706 296 1.2402340174 0.1875 ) ( 1088 -63.9999923706 308 1.2402340174 0.09375 ) ( 1088 -63.9999923706 320 1.2402340174 0 ) )
-( ( 1088 -63.9999923706 296 1.2402340174 0.1875 ) ( 1088 -63.9999923706 308 1.2402340174 0.09375 ) ( 1088 -63.9999923706 320 1.2402340174 0 ) )
-( ( 1088 128 296 2.7402338982 0.1875 ) ( 1088 128 308 2.7402338982 0.09375 ) ( 1088 128 320 2.7402338982 0 ) )
-( ( 929.25 128 296 3.9804689884 0.1875 ) ( 929.25 128 308 3.9804689884 0.09375 ) ( 929.25 128 320 3.9804689884 0 ) )
-( ( 770.5 128 296 5.220703125 0.1875 ) ( 770.5 128 308 5.220703125 0.09375 ) ( 770.5 128 320 5.220703125 0 ) )
-( ( 770.5 -63.9999923706 296 6.720703125 0.1875 ) ( 770.5 -63.9999923706 308 6.720703125 0.09375 ) ( 770.5 -63.9999923706 320 6.720703125 0 ) )
-( ( 770.5 -63.9999923706 296 6.720703125 0.1875 ) ( 770.5 -63.9999923706 308 6.720703125 0.09375 ) ( 770.5 -63.9999923706 320 6.720703125 0 ) )
-( ( 929.25 -63.9999923706 296 7.9609379768 0.1875 ) ( 929.25 -63.9999923706 308 7.9609379768 0.09375 ) ( 929.25 -63.9999923706 320 7.9609379768 0 ) )
-)
-}
-}
-}
-// entity 276
-{
-"classname" "func_group"
-"type" "patchCapped"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 5 3 0 0 0 )
-(
-( ( 895.5 -703.5 320 6.9960942268 5.4960942268 ) ( 895.5 -703.5 320 6.9960942268 5.4960942268 ) ( 770.4999389648 -703.5 320 6.0195307732 5.4960942268 ) )
-( ( 895.5 -703.5 320 6.9960942268 5.4960942268 ) ( 895.5 -703.5 320 6.9960942268 5.4960942268 ) ( 895.5 -703.5 320 6.9960942268 5.4960942268 ) )
-( ( 895.5 -383.7500610352 320 6.9960942268 2.9980471134 ) ( 895.5 -383.7500610352 320 6.9960942268 2.9980471134 ) ( 895.5 -383.7500610352 320 6.9960942268 2.9980471134 ) )
-( ( 895.5 -64.0001449585 320 6.9960942268 0.5000010133 ) ( 895.5 -64.0001449585 320 6.9960942268 0.5000010133 ) ( 895.5 -64.0001449585 320 6.9960942268 0.5000010133 ) )
-( ( 895.5 -64.0001449585 320 6.9960942268 0.5000010133 ) ( 895.5 -64.0001449585 320 6.9960942268 0.5000010133 ) ( 770.4999389648 -64.0001449585 320 6.0195307732 0.5000010133 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 5 3 0 0 0 )
-(
-( ( 770.4999389648 -703.5 296 6.0195307732 5.4960942268 ) ( 895.5 -703.5 296 6.9960942268 5.4960942268 ) ( 895.5 -703.5 296 6.9960942268 5.4960942268 ) )
-( ( 895.5 -703.5 296 6.9960942268 5.4960942268 ) ( 895.5 -703.5 296 6.9960942268 5.4960942268 ) ( 895.5 -703.5 296 6.9960942268 5.4960942268 ) )
-( ( 895.5 -383.7500610352 296 6.9960942268 2.9980471134 ) ( 895.5 -383.7500610352 296 6.9960942268 2.9980471134 ) ( 895.5 -383.7500610352 296 6.9960942268 2.9980471134 ) )
-( ( 895.5 -64.0001296997 296 6.9960942268 0.5000010133 ) ( 895.5 -64.0001296997 296 6.9960942268 0.5000010133 ) ( 895.5 -64.0001296997 296 6.9960942268 0.5000010133 ) )
-( ( 770.4999389648 -64.0001296997 296 6.0195307732 0.5000010133 ) ( 895.5 -64.0001296997 296 6.9960942268 0.5000010133 ) ( 895.5 -64.0001296997 296 6.9960942268 0.5000010133 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 5 3 0 0 0 )
-(
-( ( 770.4999389648 -64.0001296997 296 0 0.1875 ) ( 770.4999389648 -64.0001296997 308 0 0.09375 ) ( 770.4999389648 -64.0001296997 320 0 0 ) )
-( ( 895.5 -64.0001296997 296 0.9765629768 0.1875 ) ( 895.5 -64.0001296997 308 0.9765629768 0.09375 ) ( 895.5 -64.0001296997 320 0.9765629768 0 ) )
-( ( 895.5 -383.7500610352 296 3.4746088982 0.1875 ) ( 895.5 -383.7500610352 308 3.4746088982 0.09375 ) ( 895.5 -383.7500610352 320 3.4746088982 0 ) )
-( ( 895.5 -703.5 296 5.9726557732 0.1875 ) ( 895.5 -703.5 308 5.9726557732 0.09375 ) ( 895.5 -703.5 320 5.9726557732 0 ) )
-( ( 770.4999389648 -703.5 296 6.9492192268 0.1875 ) ( 770.4999389648 -703.5 308 6.9492192268 0.09375 ) ( 770.4999389648 -703.5 320 6.9492192268 0 ) )
-)
-}
-}
-}
-// entity 277
-{
-"classname" "func_group"
-"type" "patchCapped"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 448 -1056 -24 0.5 1.25 ) ( 448 -1152 -4.5 0.5 2 ) ( 448 -1152 -4.5 0.5 2 ) )
-( ( 448 -960 -4.5 0.5 0.5 ) ( 358 -1054 -111.25 -0.203125 1.234375 ) ( 267.9999694824 -1152 -24 -0.90625 2 ) )
-( ( 448 -960 -4.5 0.5 0.5 ) ( 267.9999694824 -960 -24 -0.90625 0.5 ) ( 267.9999694824 -1056 -24 -0.90625 1.25 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 448 -1152 -40 0 0.75 ) ( 448 -1152 -40 0 0.75 ) ( 448 -1056 -40 0 0 ) )
-( ( 267.9999694824 -1152 -40 1.40625 0.75 ) ( 358 -1056 -40 1.40625 0.75 ) ( 448 -960 -40 1.40625 0 ) )
-( ( 267.9999694824 -1056 -40 2.15625 0.75 ) ( 267.9999694824 -960 -40 2.15625 0.75 ) ( 448 -960 -40 2.15625 0 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 9 3 0 0 0 )
-(
-( ( 448 -1056 -40 0 0.125 ) ( 448 -1056 -32 0 0.0625 ) ( 448 -1056 -24 0 0 ) )
-( ( 448 -960 -40 0.75 0.125 ) ( 448 -960 -32 0.75 0.0625 ) ( 448 -960 -4.5 0.75 0 ) )
-( ( 448 -960 -40 0.75 0.125 ) ( 448 -960 -32 0.75 0.0625 ) ( 448 -960 -4.5 0.75 0 ) )
-( ( 267.9999694824 -960 -40 2.15625 0.125 ) ( 267.9999694824 -960 -32 2.15625 0.0625 ) ( 267.9999694824 -960 -24 2.15625 0 ) )
-( ( 267.9999694824 -1056 -40 2.90625 0.125 ) ( 267.9999694824 -1056 -32 2.90625 0.0625 ) ( 267.9999694824 -1056 -24 2.90625 0 ) )
-( ( 267.9999694824 -1152 -40 3.65625 0.125 ) ( 267.9999694824 -1152 -32 3.65625 0.0625 ) ( 267.9999694824 -1152 -24 3.65625 0 ) )
-( ( 448 -1152 -40 5.0625 0.125 ) ( 448 -1152 -32 5.0625 0.0625 ) ( 448 -1152 -4.5 5.0625 0 ) )
-( ( 448 -1152 -40 5.0625 0.125 ) ( 448 -1152 -32 5.0625 0.0625 ) ( 448 -1152 -4.5 5.0625 0 ) )
-( ( 448 -1056 -40 5.8125 0.125 ) ( 448 -1056 -32 5.8125 0.0625 ) ( 448 -1056 -24 5.8125 0 ) )
-)
-}
-}
-}
-// entity 278
-{
-"classname" "func_group"
-"type" "patchCapped"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 448 288 -24 0.5 1.25 ) ( 448 192 -4.5 0.5 2 ) ( 448 192 -4.5 0.5 2 ) )
-( ( 448 383.9999694824 -4.5 0.5 0.5 ) ( 358 290 -111.25 -0.203125 1.234375 ) ( 267.9999694824 192 -24 -0.90625 2 ) )
-( ( 448 383.9999694824 -4.5 0.5 0.5 ) ( 267.9999694824 383.9999694824 -24 -0.90625 0.5 ) ( 267.9999694824 288 -24 -0.90625 1.25 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 448 192 -40 0 0.75 ) ( 448 192 -40 0 0.75 ) ( 448 288 -40 0 0 ) )
-( ( 267.9999694824 192 -40 1.40625 0.75 ) ( 358 288 -40 1.40625 0.75 ) ( 448 383.9999694824 -40 1.40625 0 ) )
-( ( 267.9999694824 288 -40 2.15625 0.75 ) ( 267.9999694824 383.9999694824 -40 2.15625 0.75 ) ( 448 383.9999694824 -40 2.15625 0 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 9 3 0 0 0 )
-(
-( ( 448 288 -40 0 0.125 ) ( 448 288 -32 0 0.0625 ) ( 448 288 -24 0 0 ) )
-( ( 448 383.9999694824 -40 0.75 0.125 ) ( 448 383.9999694824 -32 0.75 0.0625 ) ( 448 383.9999694824 -4.5 0.75 0 ) )
-( ( 448 383.9999694824 -40 0.75 0.125 ) ( 448 383.9999694824 -32 0.75 0.0625 ) ( 448 383.9999694824 -4.5 0.75 0 ) )
-( ( 267.9999694824 383.9999694824 -40 2.15625 0.125 ) ( 267.9999694824 383.9999694824 -32 2.15625 0.0625 ) ( 267.9999694824 383.9999694824 -24 2.15625 0 ) )
-( ( 267.9999694824 288 -40 2.90625 0.125 ) ( 267.9999694824 288 -32 2.90625 0.0625 ) ( 267.9999694824 288 -24 2.90625 0 ) )
-( ( 267.9999694824 192 -40 3.65625 0.125 ) ( 267.9999694824 192 -32 3.65625 0.0625 ) ( 267.9999694824 192 -24 3.65625 0 ) )
-( ( 448 192 -40 5.0625 0.125 ) ( 448 192 -32 5.0625 0.0625 ) ( 448 192 -4.5 5.0625 0 ) )
-( ( 448 192 -40 5.0625 0.125 ) ( 448 192 -32 5.0625 0.0625 ) ( 448 192 -4.5 5.0625 0 ) )
-( ( 448 288 -40 5.8125 0.125 ) ( 448 288 -32 5.8125 0.0625 ) ( 448 288 -24 5.8125 0 ) )
-)
-}
-}
-}
-// entity 279
-{
-"classname" "func_group"
-"type" "patchCapped"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 63.9999923706 -384 -24 0.5 1.25 ) ( 63.9999923706 -480 -4.5 0.5 2 ) ( 63.9999923706 -480 -4.5 0.5 2 ) )
-( ( 63.9999923706 -288.0000305176 -4.5 0.5 0.5 ) ( -26.0000190735 -382 -111.25 -0.203125 1.234375 ) ( -116.0000305176 -480 -24 -0.90625 2 ) )
-( ( 63.9999923706 -288.0000305176 -4.5 0.5 0.5 ) ( -116.0000305176 -288.0000305176 -24 -0.90625 0.5 ) ( -116.0000305176 -384 -24 -0.90625 1.25 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 63.9999923706 -480 -40 0 0.75 ) ( 63.9999923706 -480 -40 0 0.75 ) ( 63.9999923706 -384 -40 0 0 ) )
-( ( -116.0000305176 -480 -40 1.40625 0.75 ) ( -26.0000190735 -384 -40 1.40625 0.75 ) ( 63.9999923706 -288.0000305176 -40 1.40625 0 ) )
-( ( -116.0000305176 -384 -40 2.15625 0.75 ) ( -116.0000305176 -288.0000305176 -40 2.15625 0.75 ) ( 63.9999923706 -288.0000305176 -40 2.15625 0 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 9 3 0 0 0 )
-(
-( ( 63.9999923706 -384 -40 0 0.125 ) ( 63.9999923706 -384 -32 0 0.0625 ) ( 63.9999923706 -384 -24 0 0 ) )
-( ( 63.9999923706 -288.0000305176 -40 0.75 0.125 ) ( 63.9999923706 -288.0000305176 -32 0.75 0.0625 ) ( 63.9999923706 -288.0000305176 -4.5 0.75 0 ) )
-( ( 63.9999923706 -288.0000305176 -40 0.75 0.125 ) ( 63.9999923706 -288.0000305176 -32 0.75 0.0625 ) ( 63.9999923706 -288.0000305176 -4.5 0.75 0 ) )
-( ( -116.0000305176 -288.0000305176 -40 2.15625 0.125 ) ( -116.0000305176 -288.0000305176 -32 2.15625 0.0625 ) ( -116.0000305176 -288.0000305176 -24 2.15625 0 ) )
-( ( -116.0000305176 -384 -40 2.90625 0.125 ) ( -116.0000305176 -384 -32 2.90625 0.0625 ) ( -116.0000305176 -384 -24 2.90625 0 ) )
-( ( -116.0000305176 -480 -40 3.65625 0.125 ) ( -116.0000305176 -480 -32 3.65625 0.0625 ) ( -116.0000305176 -480 -24 3.65625 0 ) )
-( ( 63.9999923706 -480 -40 5.0625 0.125 ) ( 63.9999923706 -480 -32 5.0625 0.0625 ) ( 63.9999923706 -480 -4.5 5.0625 0 ) )
-( ( 63.9999923706 -480 -40 5.0625 0.125 ) ( 63.9999923706 -480 -32 5.0625 0.0625 ) ( 63.9999923706 -480 -4.5 5.0625 0 ) )
-( ( 63.9999923706 -384 -40 5.8125 0.125 ) ( 63.9999923706 -384 -32 5.8125 0.0625 ) ( 63.9999923706 -384 -24 5.8125 0 ) )
-)
-}
-}
-}
-// entity 280
-{
-"classname" "func_group"
-"type" "patchCapped"
-// brush 0
-{
-patchDef2
-{
-evil8_floor/e8clangfloor
-( 5 3 0 0 0 )
-(
-( ( -128 -288 -16 2 7.5 ) ( -128 -288 -16 2 7.5 ) ( 64 -288 -16 3.5 7.5 ) )
-( ( -128 -288 -16 2 7.5 ) ( -128 -288 -16 2 7.5 ) ( -128 -288 -16 2 7.5 ) )
-( ( -128 -384 -16 2 8.25 ) ( -128 -384 -16 2 8.25 ) ( -128 -384 -16 2 8.25 ) )
-( ( -128 -480 -16 2 9 ) ( -128 -480 -16 2 9 ) ( -128 -480 -16 2 9 ) )
-( ( -128 -480 -16 2 9 ) ( -128 -480 -16 2 9 ) ( 64 -480 -16 3.5 9 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 5 3 0 0 0 )
-(
-( ( 64 -480 -24 0 0.0625 ) ( 64 -480 -20 0 0.03125 ) ( 64 -480 -16 0 0 ) )
-( ( -116 -480 -24 1.40625 0.0625 ) ( -124 -480 -20 1.40625 0.03125 ) ( -128 -480 -16 1.40625 0 ) )
-( ( -116 -384 -24 2.15625 0.0625 ) ( -124 -384 -20 2.15625 0.03125 ) ( -128 -384 -16 2.15625 0 ) )
-( ( -116 -288 -24 2.90625 0.0625 ) ( -124 -288 -20 2.90625 0.03125 ) ( -128 -288 -16 2.90625 0 ) )
-( ( 64 -288 -24 4.3125 0.0625 ) ( 64 -288 -20 4.3125 0.03125 ) ( 64 -288 -16 4.3125 0 ) )
-)
-}
-}
-}
-// entity 281
-{
-"classname" "func_group"
-"type" "patchCapped"
-// brush 0
-{
-patchDef2
-{
-evil8_floor/e8clangfloor
-( 5 3 0 0 0 )
-(
-( ( 448 192 -16 3.5 7.5 ) ( 256 192 -16 2 7.5 ) ( 256 192 -16 2 7.5 ) )
-( ( 256 192 -16 2 7.5 ) ( 256 192 -16 2 7.5 ) ( 256 192 -16 2 7.5 ) )
-( ( 256 288 -16 2 8.25 ) ( 256 288 -16 2 8.25 ) ( 256 288 -16 2 8.25 ) )
-( ( 256 384 -16 2 9 ) ( 256 384 -16 2 9 ) ( 256 384 -16 2 9 ) )
-( ( 448 384 -16 3.5 9 ) ( 256 384 -16 2 9 ) ( 256 384 -16 2 9 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 5 3 0 0 0 )
-(
-( ( 448 384 -16 0 0 ) ( 448 384 -20 0 0.03125 ) ( 448 384 -24 0 0.0625 ) )
-( ( 256 384 -16 1.40625 0 ) ( 260 384 -20 1.40625 0.03125 ) ( 268 384 -24 1.40625 0.0625 ) )
-( ( 256 288 -16 2.15625 0 ) ( 260 288 -20 2.15625 0.03125 ) ( 268 288 -24 2.15625 0.0625 ) )
-( ( 256 192 -16 2.90625 0 ) ( 260 192 -20 2.90625 0.03125 ) ( 268 192 -24 2.90625 0.0625 ) )
-( ( 448 192 -16 4.3125 0 ) ( 448 192 -20 4.3125 0.03125 ) ( 448 192 -24 4.3125 0.0625 ) )
-)
-}
-}
-}
-// entity 282
-{
-"classname" "func_group"
-"type" "patchCapped"
-// brush 0
-{
-patchDef2
-{
-evil8_floor/e8clangfloor
-( 5 3 0 0 0 )
-(
-( ( 256 -960 -16 2.0273399353 7.4492201805 ) ( 256 -960 -16 2.0273439884 7.4492192268 ) ( 448 -960 -16 3.5273439884 7.4492192268 ) )
-( ( 256 -960 -16 2.0273439884 7.4492192268 ) ( 256 -960 -16 2.0273439884 7.4492192268 ) ( 256 -960 -16 2.0273439884 7.4492192268 ) )
-( ( 256 -1056 -16 2.0273439884 8.19921875 ) ( 256 -1056 -16 2.0273439884 8.19921875 ) ( 256 -1056 -16 2.0273439884 8.19921875 ) )
-( ( 256 -1152 -16 2.0273439884 8.94921875 ) ( 256 -1152 -16 2.0273439884 8.94921875 ) ( 256 -1152 -16 2.0273439884 8.94921875 ) )
-( ( 256 -1152 -16 2.0273439884 8.94921875 ) ( 256 -1152 -16 2.0273439884 8.94921875 ) ( 448 -1152 -16 3.5273439884 8.94921875 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 5 3 0 0 0 )
-(
-( ( 448 -1152 -24 0 0.0625 ) ( 448 -1152 -20 0 0.03125 ) ( 448 -1152 -16 0 0 ) )
-( ( 268 -1152 -24 1.40625 0.0625 ) ( 260 -1152 -20 1.40625 0.03125 ) ( 256 -1152 -16 1.40625 0 ) )
-( ( 268 -1056 -24 2.15625 0.0625 ) ( 260 -1056 -20 2.15625 0.03125 ) ( 256 -1056 -16 2.15625 0 ) )
-( ( 268 -960 -24 2.90625 0.0625 ) ( 260 -960 -20 2.90625 0.03125 ) ( 256 -960 -16 2.90625 0 ) )
-( ( 448 -960 -24 4.3125 0.0625 ) ( 448 -960 -20 4.3125 0.03125 ) ( 448 -960 -16 4.3125 0 ) )
-)
-}
-}
-}
-// entity 283
-{
-"classname" "func_group"
-"type" "patchCapped"
-// brush 0
-{
-patchDef2
-{
-evil8_floor/e8clangfloor
-( 3 3 0 0 0 )
-(
-( ( 192 -768 -16 1.5 0 ) ( 192 -1040 -16 1.5 -2.125 ) ( 192 -1040 -16 1.5 -2.125 ) )
-( ( -608 -768 -16 -4.75 0 ) ( -212 -1044 -16 -1.65625 -2.15625 ) ( 192 -1312 -16 1.5 -4.25 ) )
-( ( -608 -768 -16 -4.75 0 ) ( -616 -1320 -16 -4.8125 -4.3125 ) ( 192 -1312 -16 1.5 -4.25 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-evil8_floor/e8clangfloor
-( 3 3 0 0 0 )
-(
-( ( 192 -1040 -40 1.5 -2.125 ) ( 192 -1040 -40 1.5 -2.125 ) ( 192 -768 -40 1.5 0 ) )
-( ( 192 -1320 -40 1.5 -4.3125 ) ( -216 -1048 -40 -1.6875 -2.1875 ) ( -616 -768 -40 -4.8125 0 ) )
-( ( 192 -1320 -40 1.5 -4.3125 ) ( -616 -1320 -40 -4.875 -4.375 ) ( -616 -768 -40 -4.8125 0 ) )
-)
-}
-}
-}
-// entity 284
-{
-"classname" "func_group"
-"type" "patchCapped"
-// brush 0
-{
-patchDef2
-{
-evil8_floor/e8clangfloor
-( 3 3 0 0 0 )
-(
-( ( -448 -656 -16 -3.5 0.875 ) ( -448 -656 -16 -3.5 0.875 ) ( -448 -768 -16 -3.5 0 ) )
-( ( -448 -544 -16 -3.5 1.75 ) ( -532 -652 -16 -4.15625 0.90625 ) ( -608 -768 -16 -4.75 0 ) )
-( ( -448 -544 -16 -3.5 1.75 ) ( -616 -536 -16 -4.8125 1.8125 ) ( -608 -768 -16 -4.75 0 ) )
-)
-}
-}
-}
-// entity 285
-{
-"classname" "func_group"
-"type" "patchCapped"
-// brush 0
-{
-patchDef2
-{
-evil8_floor/e8clangfloor
-( 5 3 0 0 0 )
-(
-( ( -296 -536 -16 -2.3125 4.1875 ) ( -296 -536 -16 -2.3125 4.1875 ) ( -448 -544 -16 -3.5 4.25 ) )
-( ( -296 -536 -16 -2.3125 4.1875 ) ( -296 -536 -16 -2.3125 4.1875 ) ( -296 -536 -16 -2.3125 4.1875 ) )
-( ( -288 -384 -16 -2.25 3 ) ( -288 -384 -16 -2.25 3 ) ( -288 -384 -16 -2.25 3 ) )
-( ( -296 -232 -16 -2.3125 1.8125 ) ( -296 -232 -16 -2.3125 1.8125 ) ( -296 -232 -16 -2.3125 1.8125 ) )
-( ( -296 -232 -16 -2.3125 1.8125 ) ( -296 -232 -16 -2.3125 1.8125 ) ( -448 -224 -16 -3.5 1.75 ) )
-)
-}
-}
-}
-// entity 286
-{
-"classname" "func_group"
-"type" "patchCapped"
-// brush 0
-{
-patchDef2
-{
-evil8_floor/e8clangfloor
-( 3 3 0 0 0 )
-(
-( ( -448 -0.000001 -16 -3.5 0 ) ( -448 -112.0000076294 -16 -3.5 0.875 ) ( -448 -112.0000076294 -16 -3.5 0.875 ) )
-( ( -608 -0.000001 -16 -4.75 0 ) ( -532 -116 -16 -4.15625 0.90625 ) ( -448 -224 -16 -3.5 1.75 ) )
-( ( -608 -0.000001 -16 -4.75 0 ) ( -616 -232 -16 -4.8125 1.8125 ) ( -448 -224 -16 -3.5 1.75 ) )
-)
-}
-}
-}
-// entity 287
-{
-"classname" "func_group"
-"type" "patchCapped"
-// brush 0
-{
-patchDef2
-{
-evil8_floor/e8clangfloor
-( 3 3 0 0 0 )
-(
-( ( 192 272 -16 1.5 -2.125 ) ( 192 272 -16 1.5 -2.125 ) ( 192 0 -16 1.5 0 ) )
-( ( 192 544 -16 1.5 -4.25 ) ( -212 276 -16 -1.65625 -2.15625 ) ( -608 0 -16 -4.75 0 ) )
-( ( 192 544 -16 1.5 -4.25 ) ( -616 552 -16 -4.8125 -4.3125 ) ( -608 0 -16 -4.75 0 ) )
-)
-}
-}
-}
-// entity 288
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 192 -1320 -24 0 0.5068609715 ) ( 192 -1344 8 0 0.21875 ) ( 192 -1344 32 0 0 ) )
-( ( 192 -1320 -24 0.03125 0.5068609715 ) ( 192 -1344 8 0.03125 0.21875 ) ( 192 -1344 32 0.03125 0 ) )
-( ( 192 -1312 -16 0.0625 0.5068609715 ) ( 192 -1336 8 0.0625 0.21875 ) ( 192 -1336 32 0.0625 0 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 192 -1312 -16 0 0.5068609715 ) ( 192 -1336 8 0 0.21875 ) ( 192 -1336 32 0 0 ) )
-( ( -616 -1320 -16 6.3125 0.5068609715 ) ( -632 -1336 8 6.3125 0.21875 ) ( -632 -1336 32 6.3125 0 ) )
-( ( -608 -768 -16 10.625 0.5068609715 ) ( -632 -768 8 10.625 0.21875 ) ( -632 -768 32 10.625 0 ) )
-)
-}
-}
-}
-// entity 289
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( -448 -520 32 0 0.5068609715 ) ( -448 -520 8 0 0.2881110013 ) ( -448 -544 -16 0 0 ) )
-( ( -632 -520 32 1.5 0.5068609715 ) ( -632 -520 8 1.5 0.2881110013 ) ( -616 -536 -16 1.5 0 ) )
-( ( -632 -768 32 3.5 0.5068609715 ) ( -632 -768 8 3.5 0.2881110013 ) ( -608 -768 -16 3.5 0 ) )
-)
-}
-}
-}
-// entity 290
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( -312 -384 32 0 0.5 ) ( -312 -384 8 0 0.3125 ) ( -288 -384 -16 0 0 ) )
-( ( -312 -520 32 1 0.5 ) ( -312 -520 8 1 0.3125 ) ( -296 -536 -16 1 0 ) )
-( ( -448 -520 32 2 0.5 ) ( -448 -520 8 2 0.3125 ) ( -448 -544 -16 2 0 ) )
-)
-}
-}
-}
-// entity 291
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( -288 -384 -16 0 0 ) ( -312 -384 8 0 0.3125 ) ( -312 -384 32 0 0.5 ) )
-( ( -296 -232 -16 1 0 ) ( -312 -248 8 1 0.3125 ) ( -312 -248 32 1 0.5 ) )
-( ( -448 -224 -16 2 0 ) ( -448 -248 8 2 0.3125 ) ( -448 -248 32 2 0.5 ) )
-)
-}
-}
-}
-// entity 292
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( -448 -224 -16 0 0 ) ( -448 -248 8 0 0.2881110013 ) ( -448 -248 32 0 0.5068609715 ) )
-( ( -616 -232 -16 1.5 0 ) ( -632 -248 8 1.5 0.2881110013 ) ( -632 -248 32 1.5 0.5068609715 ) )
-( ( -608 0 -16 3.5 0 ) ( -632 0 8 3.5 0.2881110013 ) ( -632 0 32 3.5 0.5068609715 ) )
-)
-}
-}
-}
-// entity 293
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 192 544 -16 0 0 ) ( 192 552 -24 0 0.03125 ) ( 192 552 -24 0 0.0625 ) )
-( ( -616 552 -16 6.3125 0 ) ( -616 552 -24 6.3125 0.03125 ) ( -616 552 -24 6.3125 0.0625 ) )
-( ( -608 0 -16 10.625 0 ) ( -616 0 -24 10.625 0.03125 ) ( -616 0 -24 10.625 0.0625 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 192 576 32 0 0 ) ( 192 576 8 0 0.21875 ) ( 192 552 -24 0 0.5068609715 ) )
-( ( 192 576 32 0.03125 0 ) ( 192 576 8 0.03125 0.21875 ) ( 192 552 -24 0.03125 0.5068609715 ) )
-( ( 192 568 32 0.0625 0 ) ( 192 568 8 0.0625 0.21875 ) ( 192 544 -16 0.0625 0.5068609715 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 192 568 32 0 0 ) ( 192 568 8 0 0.21875 ) ( 192 544 -16 0 0.5068609715 ) )
-( ( -632 568 32 6.3125 0 ) ( -632 568 8 6.3125 0.21875 ) ( -616 552 -16 6.3125 0.5068609715 ) )
-( ( -632 0 32 10.625 0 ) ( -632 0 8 10.625 0.21875 ) ( -608 0 -16 10.625 0.5068609715 ) )
-)
-}
-}
-}
-// entity 294
-{
-"classname" "func_group"
-"type" "patchCapped"
-// brush 0
-{
-patchDef2
-{
-evil8_floor/e8clangfloor
-( 9 3 0 0 0 )
-(
-( ( 192.0000152588 -1044 -24 0 0 ) ( 192.0000152588 -1044 -32 0 0.03125 ) ( 192.0000152588 -1044 -40 0 0.0625 ) )
-( ( 192.0000152588 -1320 -24 2.25 0 ) ( 192.0000152588 -1320 -32 2.25 0.03125 ) ( 192.0000152588 -1320 -40 2.25 0.0625 ) )
-( ( 192.0000152588 -1320 -24 2.25 0 ) ( 192.0000152588 -1320 -32 2.25 0.03125 ) ( 192.0000152588 -1320 -40 2.25 0.0625 ) )
-( ( -616 -1320 -24 8.75 0 ) ( -616 -1320 -32 8.75 0.03125 ) ( -616 -1320 -40 8.75 0.0625 ) )
-( ( -616 -768 -24 13.25 0 ) ( -616 -768 -32 13.25 0.03125 ) ( -616 -768 -40 13.25 0.0625 ) )
-( ( -616 -768 -24 13.25 0 ) ( -616 -768 -32 13.25 0.03125 ) ( -616 -768 -40 13.25 0.0625 ) )
-( ( 192.0000152588 -768 -24 19.75 0 ) ( 192.0000152588 -768 -32 19.75 0.03125 ) ( 192.0000152588 -768 -40 19.75 0.0625 ) )
-( ( 192.0000152588 -1044 -24 22 0 ) ( 192.0000152588 -1044 -32 22 0.03125 ) ( 192.0000152588 -1044 -40 22 0.0625 ) )
-( ( 192.0000152588 -1044 -24 22 0 ) ( 192.0000152588 -1044 -32 22 0.03125 ) ( 192.0000152588 -1044 -40 22 0.0625 ) )
-)
-}
-}
-}
-// entity 295
-{
-"classname" "func_group"
-"type" "patchCapped"
-// brush 0
-{
-patchDef2
-{
-evil8_floor/e8clangfloor
-( 3 3 0 0 0 )
-(
-( ( -448 -768 -40 -3.5 6 ) ( -448 -652 -40 -3.5 5.09375 ) ( -448 -652 -40 -3.5 5.09375 ) )
-( ( -616 -768 -40 -4.8125 6 ) ( -532 -652 -40 -4.15625 5.09375 ) ( -448 -536 -40 -3.5 4.1875 ) )
-( ( -616 -768 -40 -4.8125 6 ) ( -616 -536 -40 -4.8125 4.1875 ) ( -448 -536 -40 -3.5 4.1875 ) )
-)
-}
-}
-}
-// entity 296
-{
-"classname" "func_group"
-"type" "patchCapped"
-// brush 0
-{
-patchDef2
-{
-evil8_floor/e8clangfloor
-( 3 3 0 0 0 )
-(
-( ( -448 -116 -40 -3.5 0.90625 ) ( -448 -116 -40 -3.5 0.90625 ) ( -448 0 -40 -3.5 0 ) )
-( ( -448 -232 -40 -3.5 1.8125 ) ( -532 -116 -40 -4.15625 0.90625 ) ( -616 0 -40 -4.8125 0 ) )
-( ( -448 -232 -40 -3.5 1.8125 ) ( -616 -232 -40 -4.8125 1.8125 ) ( -616 0 -40 -4.8125 0 ) )
-)
-}
-}
-}
-// entity 297
-{
-"classname" "func_group"
-"type" "patchCapped"
-// brush 0
-{
-patchDef2
-{
-evil8_floor/e8clangfloor
-( 3 3 0 0 0 )
-(
-( ( 192 0 -40 1.5 0 ) ( 192 276 -40 1.5 -2.15625 ) ( 192 276 -40 1.5 -2.15625 ) )
-( ( -616 0 -40 -4.8125 0 ) ( -212 276 -40 -1.65625 -2.15625 ) ( 192 552 -40 1.5 -4.3125 ) )
-( ( -616 0 -40 -4.8125 0 ) ( -616 552 -40 -4.8125 -4.3125 ) ( 192 552 -40 1.5 -4.3125 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-evil8_floor/e8clangfloor
-( 9 3 0 0 0 )
-(
-( ( 192 276 -40 0 0.125 ) ( 192 276 -32 0 0.0625 ) ( 192 276 -24 0 0 ) )
-( ( 192 552 -40 2.15625 0.125 ) ( 192 552 -32 2.15625 0.0625 ) ( 192 552 -24 2.15625 0 ) )
-( ( 192 552 -40 2.15625 0.125 ) ( 192 552 -32 2.15625 0.0625 ) ( 192 552 -24 2.15625 0 ) )
-( ( -616 552 -40 8.46875 0.125 ) ( -616 552 -32 8.46875 0.0625 ) ( -616 552 -24 8.46875 0 ) )
-( ( -616 0 -40 12.78125 0.125 ) ( -616 0 -32 12.78125 0.0625 ) ( -616 0 -24 12.78125 0 ) )
-( ( -616 0 -40 12.78125 0.125 ) ( -616 0 -32 12.78125 0.0625 ) ( -616 0 -24 12.78125 0 ) )
-( ( 192 0 -40 19.09375 0.125 ) ( 192 0 -32 19.09375 0.0625 ) ( 192 0 -24 19.09375 0 ) )
-( ( 192 276 -40 21.25 0.125 ) ( 192 276 -32 21.25 0.0625 ) ( 192 276 -24 21.25 0 ) )
-( ( 192 276 -40 21.25 0.125 ) ( 192 276 -32 21.25 0.0625 ) ( 192 276 -24 21.25 0 ) )
-)
-}
-}
-}
-// entity 298
-{
-"classname" "func_group"
-"type" "patchCapped"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 5 3 0 0 0 )
-(
-( ( 448 -1152 -40 0 0.125 ) ( 448 -1152 -32 0 0.0625 ) ( 448 -1152 -24 0 0 ) )
-( ( 268 -1152 -40 1.40625 0.125 ) ( 268 -1152 -32 1.40625 0.0625 ) ( 268 -1152 -24 1.40625 0 ) )
-( ( 268 -1056 -40 2.15625 0.125 ) ( 268 -1056 -32 2.15625 0.0625 ) ( 268 -1056 -24 2.15625 0 ) )
-( ( 268 -960 -40 2.90625 0.125 ) ( 268 -960 -32 2.90625 0.0625 ) ( 268 -960 -24 2.90625 0 ) )
-( ( 448 -960 -40 4.3125 0.125 ) ( 448 -960 -32 4.3125 0.0625 ) ( 448 -960 -24 4.3125 0 ) )
-)
-}
-}
-}
-// entity 299
-{
-"classname" "func_group"
-"type" "patchCapped"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 5 3 0 0 0 )
-(
-( ( 64 -288 -40 0.5 2.25 ) ( -116 -288 -40 -0.90625 2.25 ) ( -116 -288 -40 -0.90625 2.25 ) )
-( ( -116 -288 -40 -0.90625 2.25 ) ( -116 -288 -40 -0.90625 2.25 ) ( -116 -288 -40 -0.90625 2.25 ) )
-( ( -116 -384 -40 -0.90625 3 ) ( -116 -384 -40 -0.90625 3 ) ( -116 -384 -40 -0.90625 3 ) )
-( ( -116 -480 -40 -0.90625 3.75 ) ( -116 -480 -40 -0.90625 3.75 ) ( -116 -480 -40 -0.90625 3.75 ) )
-( ( 64 -480 -40 0.5 3.75 ) ( -116 -480 -40 -0.90625 3.75 ) ( -116 -480 -40 -0.90625 3.75 ) )
-)
-}
-}
-}
-// entity 300
-{
-"classname" "func_group"
-"type" "patchCapped"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 5 3 0 0 0 )
-(
-( ( 448 192 -40 0 0.125 ) ( 448 192 -32 0 0.0625 ) ( 448 192 -24 0 0 ) )
-( ( 268 192 -40 1.40625 0.125 ) ( 268 192 -32 1.40625 0.0625 ) ( 268 192 -24 1.40625 0 ) )
-( ( 268 288 -40 2.15625 0.125 ) ( 268 288 -32 2.15625 0.0625 ) ( 268 288 -24 2.15625 0 ) )
-( ( 268 384 -40 2.90625 0.125 ) ( 268 384 -32 2.90625 0.0625 ) ( 268 384 -24 2.90625 0 ) )
-( ( 448 384 -40 4.3125 0.125 ) ( 448 384 -32 4.3125 0.0625 ) ( 448 384 -24 4.3125 0 ) )
-)
-}
-}
-}
-// entity 301
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 9 3 0 0 0 )
-(
-( ( 268 -1056 -39.9999961853 0 0.0625 ) ( 268 -1056 -43.9999961853 0 0.03125 ) ( 268 -1056 -47.9999961853 0 0 ) )
-( ( 268 -1152 -39.9999961853 0.75 0.0625 ) ( 268 -1149.1716308594 -42.8284225464 0.75 0.03125 ) ( 268 -1146.3431396484 -45.6568489075 0.75 0 ) )
-( ( 448 -1152 -40 2.15625 0.0625 ) ( 448 -1148 -40 2.15625 0.03125 ) ( 448 -1144 -40 2.15625 0 ) )
-( ( 448 -1152 -128 2.84375 0.0625 ) ( 448 -1149.1716308594 -125.1715698242 2.84375 0.03125 ) ( 448 -1146.3431396484 -122.3431472778 2.84375 0 ) )
-( ( 448 -1056 -128 3.59375 0.0625 ) ( 448 -1056 -124 3.59375 0.03125 ) ( 448 -1056 -120 3.59375 0 ) )
-( ( 448 -960 -128 4.34375 0.0625 ) ( 448 -962.8284301758 -125.1715698242 4.34375 0.03125 ) ( 448 -965.6568603516 -122.3431472778 4.34375 0 ) )
-( ( 448 -960 -40 5.03125 0.0625 ) ( 448 -964 -40 5.03125 0.03125 ) ( 448 -968 -40 5.03125 0 ) )
-( ( 268 -960 -39.9999961853 6.4375 0.0625 ) ( 268 -962.8284301758 -42.8284225464 6.4375 0.03125 ) ( 268 -965.6568603516 -45.6568489075 6.4375 0 ) )
-( ( 268 -1056 -39.9999961853 7.1875 0.0625 ) ( 268 -1056 -43.9999961853 7.1875 0.03125 ) ( 268 -1056 -47.9999961853 7.1875 0 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 9 3 0 0 0 )
-(
-( ( 176 -1056 -47.9999961853 0 0.0625 ) ( 176 -1056 -43.9999961853 0 0.03125 ) ( 176 -1056 -39.9999961853 0 0 ) )
-( ( 176 -1146.3431396484 -45.6568489075 0.706043005 0.0625 ) ( 176 -1149.1716308594 -42.8284225464 0.706043005 0.03125 ) ( 176 -1152 -39.9999961853 0.706043005 0 ) )
-( ( 176 -1144 -40 0.7538779974 0.0625 ) ( 176 -1148 -40 0.7538779974 0.03125 ) ( 176 -1152 -40 0.7538779974 0 ) )
-( ( 176 -1146.3431396484 -122.3431472778 1.3974449635 0.0625 ) ( 176 -1149.1716308594 -125.1715698242 1.3974449635 0.03125 ) ( 176 -1152 -128 1.3974449635 0 ) )
-( ( 176 -1056 -120 2.1034879684 0.0625 ) ( 176 -1056 -124 2.1034879684 0.03125 ) ( 176 -1056 -128 2.1034879684 0 ) )
-( ( 176 -965.6568603516 -122.3431472778 2.8095309734 0.0625 ) ( 176 -962.8284301758 -125.1715698242 2.8095309734 0.03125 ) ( 176 -960 -128 2.8095309734 0 ) )
-( ( 176 -968 -40 3.453097105 0.0625 ) ( 176 -964 -40 3.453097105 0.03125 ) ( 176 -960 -40 3.453097105 0 ) )
-( ( 176 -965.6568603516 -45.6568489075 3.5009329319 0.0625 ) ( 176 -962.8284301758 -42.8284225464 3.5009329319 0.03125 ) ( 176 -960 -39.9999961853 3.5009329319 0 ) )
-( ( 176 -1056 -47.9999961853 4.2069759369 0.0625 ) ( 176 -1056 -43.9999961853 4.2069759369 0.03125 ) ( 176 -1056 -39.9999961853 4.2069759369 0 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 9 3 0 0 0 )
-(
-( ( 268 -1056 -47.9999961853 0 0.71875 ) ( 222 -1056 -47.9999961853 0 0.359375 ) ( 176 -1056 -47.9999961853 0 0 ) )
-( ( 268 -1146.3431396484 -45.6568489075 0.706043005 0.71875 ) ( 222 -1146.3431396484 -45.6568489075 0.706043005 0.359375 ) ( 176 -1146.3431396484 -45.6568489075 0.706043005 0 ) )
-( ( 448 -1144 -40 2.1131060123 0.71875 ) ( 222 -1144 -40 2.1131060123 0.359375 ) ( 176 -1144 -40 2.1131060123 0 ) )
-( ( 448 -1146.3431396484 -122.3431472778 2.7566730976 0.71875 ) ( 222 -1146.3431396484 -122.3431472778 2.7566730976 0.359375 ) ( 176 -1146.3431396484 -122.3431472778 2.7566730976 0 ) )
-( ( 448 -1056 -120 3.4627161026 0.71875 ) ( 222 -1056 -120 3.4627161026 0.359375 ) ( 176 -1056 -120 3.4627161026 0 ) )
-( ( 448 -965.6568603516 -122.3431472778 4.1687588692 0.71875 ) ( 222 -965.6568603516 -122.3431472778 4.1687588692 0.359375 ) ( 176 -965.6568603516 -122.3431472778 4.1687588692 0 ) )
-( ( 448 -968 -40 4.8123250008 0.71875 ) ( 222 -968 -40 4.8123250008 0.359375 ) ( 176 -968 -40 4.8123250008 0 ) )
-( ( 268 -965.6568603516 -45.6568489075 6.2193880081 0.71875 ) ( 222 -965.6568603516 -45.6568489075 6.2193880081 0.359375 ) ( 176 -965.6568603516 -45.6568489075 6.2193880081 0 ) )
-( ( 268 -1056 -47.9999961853 6.9254322052 0.71875 ) ( 222 -1056 -47.9999961853 6.9254322052 0.359375 ) ( 176 -1056 -47.9999961853 6.9254322052 0 ) )
-)
-}
-}
-// brush 3
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 9 3 0 0 0 )
-(
-( ( 176 -1056 -39.9999961853 0 0.71875 ) ( 222 -1056 -39.9999961853 0 0.359375 ) ( 268 -1056 -39.9999961853 0 0 ) )
-( ( 176 -1152 -39.9999961853 0.75 0.71875 ) ( 222 -1152 -39.9999961853 0.75 0.359375 ) ( 268 -1152 -39.9999961853 0.75 0 ) )
-( ( 176 -1152 -40 0.75 0.71875 ) ( 222 -1152 -40 0.75 0.359375 ) ( 448 -1152 -40 0.75 0 ) )
-( ( 176 -1152 -128 1.4375 0.71875 ) ( 222 -1152 -128 1.4375 0.359375 ) ( 448 -1152 -128 1.4375 0 ) )
-( ( 176 -1056 -128 2.1875 0.71875 ) ( 222 -1056 -128 2.1875 0.359375 ) ( 448 -1056 -128 2.1875 0 ) )
-( ( 176 -960 -128 2.9375 0.71875 ) ( 222 -960 -128 2.9375 0.359375 ) ( 448 -960 -128 2.9375 0 ) )
-( ( 176 -960 -40 3.625 0.71875 ) ( 222 -960 -40 3.625 0.359375 ) ( 448 -960 -40 3.625 0 ) )
-( ( 176 -960 -39.9999961853 3.625 0.71875 ) ( 222 -960 -39.9999961853 3.625 0.359375 ) ( 268 -960 -39.9999961853 3.625 0 ) )
-( ( 176 -1056 -39.9999961853 4.375 0.71875 ) ( 222 -1056 -39.9999961853 4.375 0.359375 ) ( 268 -1056 -39.9999961853 4.375 0 ) )
-)
-}
-}
-}
-// entity 302
-{
-"classname" "func_group"
-"type" "patchCapped"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( 176 -1056 -48.0000038147 0 0.6903349757 ) ( 176 -1144 -40.0000038147 0 0 ) ( 176 -1144 -40.0000038147 0 0 ) )
-( ( 176 -968 -40.0000038147 0.6903349757 0.6903349757 ) ( 176 -1055.5 -81.5 0.6903349757 0 ) ( 176 -1146 -123 0.6903349757 0 ) )
-( ( 176 -968 -40.0000038147 0.6903349757 0.6903349757 ) ( 176 -965 -123 0.6903349757 0 ) ( 176 -1056 -120 0.6903349757 0 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( 192 -1144 -40.0000038147 1.5 8.9375 ) ( 192 -1144 -40.0000038147 1.5 8.9375 ) ( 196 -1056 -48.0000038147 1.53125 8.25 ) )
-( ( 233 -1146 -123 1.8203129768 8.953125 ) ( 212.5 -1055.5 -81.5 1.6601560116 8.24609375 ) ( 192 -968 -40.0000038147 1.5 7.5625 ) )
-( ( 231 -1056 -120 1.8046879768 8.25 ) ( 233 -965 -123 1.8203129768 7.5390629768 ) ( 192 -968 -40.0000038147 1.5 7.5625 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 9 3 0 0 0 )
-(
-( ( 196 -1056 -48.0000038147 0 0.15625 ) ( 184 -1056 -48.0000038147 0 0.0625 ) ( 176 -1056 -48.0000038147 0 0 ) )
-( ( 192 -968 -40.0000038147 0.691042006 0.15625 ) ( 184 -968 -40.0000038147 0.691042006 0.0625 ) ( 176 -968 -40.0000038147 0.691042006 0 ) )
-( ( 192 -968 -40.0000038147 0.691042006 0.15625 ) ( 184 -968 -40.0000038147 0.691042006 0.0625 ) ( 176 -968 -40.0000038147 0.691042006 0 ) )
-( ( 233 -965 -123 1.4146579504 0.15625 ) ( 184 -965 -123 1.4146579504 0.0625 ) ( 176 -965 -123 1.4146579504 0 ) )
-( ( 231 -1056 -120 2.1261539459 0.15625 ) ( 184 -1056 -120 2.1261539459 0.0625 ) ( 176 -1056 -120 2.1261539459 0 ) )
-( ( 233 -1146 -123 2.8298430443 0.15625 ) ( 184 -1146 -123 2.8298430443 0.0625 ) ( 176 -1146 -123 2.8298430443 0 ) )
-( ( 192 -1144 -40.0000038147 3.5532479286 0.15625 ) ( 184 -1144 -40.0000038147 3.5532479286 0.0625 ) ( 176 -1144 -40.0000038147 3.5532479286 0 ) )
-( ( 192 -1144 -40.0000038147 3.5532479286 0.15625 ) ( 184 -1144 -40.0000038147 3.5532479286 0.0625 ) ( 176 -1144 -40.0000038147 3.5532479286 0 ) )
-( ( 196 -1056 -48.0000038147 4.244289875 0.15625 ) ( 184 -1056 -48.0000038147 4.244289875 0.0625 ) ( 176 -1056 -48.0000038147 4.244289875 0 ) )
-)
-}
-}
-}
-// entity 303
-{
-"classname" "func_group"
-"type" "patchCapped"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( -192 -472 -40.0000038147 1.5 8.9375 ) ( -192 -472 -40.0000038147 1.5 8.9375 ) ( -188 -384 -48.0000038147 1.53125 8.25 ) )
-( ( -151 -474 -123 1.8203129768 8.953125 ) ( -171.5 -383.5 -81.5 1.6601560116 8.24609375 ) ( -192 -296 -40.0000038147 1.5 7.5625 ) )
-( ( -153 -384 -120 1.8046879768 8.25 ) ( -151 -293 -123 1.8203129768 7.5390629768 ) ( -192 -296 -40.0000038147 1.5 7.5625 ) )
-)
-}
-}
-}
-// entity 304
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 9 3 0 0 0 )
-(
-( ( -116 -384 -39.9999961853 0 0.0625 ) ( -116 -384 -43.9999961853 0 0.03125 ) ( -116 -384 -47.9999961853 0 0 ) )
-( ( -116 -480 -39.9999961853 0.75 0.0625 ) ( -116 -477.1716308594 -42.8284225464 0.75 0.03125 ) ( -116 -474.3431396484 -45.6568489075 0.75 0 ) )
-( ( 64 -480 -40 2.15625 0.0625 ) ( 64 -476 -40 2.15625 0.03125 ) ( 64 -472 -40 2.15625 0 ) )
-( ( 64 -480 -128 2.84375 0.0625 ) ( 64 -477.1716308594 -125.1715698242 2.84375 0.03125 ) ( 64 -474.3431396484 -122.3431472778 2.84375 0 ) )
-( ( 64 -384 -128 3.59375 0.0625 ) ( 64 -384 -124 3.59375 0.03125 ) ( 64 -384 -120 3.59375 0 ) )
-( ( 64 -288 -128 4.34375 0.0625 ) ( 64 -290.8284301758 -125.1715698242 4.34375 0.03125 ) ( 64 -293.6568603516 -122.3431472778 4.34375 0 ) )
-( ( 64 -288 -40 5.03125 0.0625 ) ( 64 -292 -40 5.03125 0.03125 ) ( 64 -296 -40 5.03125 0 ) )
-( ( -116 -288 -39.9999961853 6.4375 0.0625 ) ( -116 -290.8284301758 -42.8284225464 6.4375 0.03125 ) ( -116 -293.6568603516 -45.6568489075 6.4375 0 ) )
-( ( -116 -384 -39.9999961853 7.1875 0.0625 ) ( -116 -384 -43.9999961853 7.1875 0.03125 ) ( -116 -384 -47.9999961853 7.1875 0 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 9 3 0 0 0 )
-(
-( ( -116 -384 -47.9999961853 0 0.71875 ) ( -162 -384 -47.9999961853 0 0.359375 ) ( -208 -384 -47.9999961853 0 0 ) )
-( ( -116 -474.3431396484 -45.6568489075 0.706043005 0.71875 ) ( -162 -474.3431396484 -45.6568489075 0.706043005 0.359375 ) ( -208 -474.3431396484 -45.6568489075 0.706043005 0 ) )
-( ( 64 -472 -40 2.1131060123 0.71875 ) ( -162 -472 -40 2.1131060123 0.359375 ) ( -208 -472 -40 2.1131060123 0 ) )
-( ( 64 -474.3431396484 -122.3431472778 2.7566730976 0.71875 ) ( -162 -474.3431396484 -122.3431472778 2.7566730976 0.359375 ) ( -208 -474.3431396484 -122.3431472778 2.7566730976 0 ) )
-( ( 64 -384 -120 3.4627161026 0.71875 ) ( -162 -384 -120 3.4627161026 0.359375 ) ( -208 -384 -120 3.4627161026 0 ) )
-( ( 64 -293.6568603516 -122.3431472778 4.1687588692 0.71875 ) ( -162 -293.6568603516 -122.3431472778 4.1687588692 0.359375 ) ( -208 -293.6568603516 -122.3431472778 4.1687588692 0 ) )
-( ( 64 -296 -40 4.8123250008 0.71875 ) ( -162 -296 -40 4.8123250008 0.359375 ) ( -208 -296 -40 4.8123250008 0 ) )
-( ( -116 -293.6568603516 -45.6568489075 6.2193880081 0.71875 ) ( -162 -293.6568603516 -45.6568489075 6.2193880081 0.359375 ) ( -208 -293.6568603516 -45.6568489075 6.2193880081 0 ) )
-( ( -116 -384 -47.9999961853 6.9254322052 0.71875 ) ( -162 -384 -47.9999961853 6.9254322052 0.359375 ) ( -208 -384 -47.9999961853 6.9254322052 0 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 9 3 0 0 0 )
-(
-( ( -208 -384 -39.9999961853 0 0.71875 ) ( -162 -384 -39.9999961853 0 0.359375 ) ( -116 -384 -39.9999961853 0 0 ) )
-( ( -208 -480 -39.9999961853 0.75 0.71875 ) ( -162 -480 -39.9999961853 0.75 0.359375 ) ( -116 -480 -39.9999961853 0.75 0 ) )
-( ( -208 -480 -40 0.75 0.71875 ) ( -162 -480 -40 0.75 0.359375 ) ( 64 -480 -40 0.75 0 ) )
-( ( -208 -480 -128 1.4375 0.71875 ) ( -162 -480 -128 1.4375 0.359375 ) ( 64 -480 -128 1.4375 0 ) )
-( ( -208 -384 -128 2.1875 0.71875 ) ( -162 -384 -128 2.1875 0.359375 ) ( 64 -384 -128 2.1875 0 ) )
-( ( -208 -288 -128 2.9375 0.71875 ) ( -162 -288 -128 2.9375 0.359375 ) ( 64 -288 -128 2.9375 0 ) )
-( ( -208 -288 -40 3.625 0.71875 ) ( -162 -288 -40 3.625 0.359375 ) ( 64 -288 -40 3.625 0 ) )
-( ( -208 -288 -39.9999961853 3.625 0.71875 ) ( -162 -288 -39.9999961853 3.625 0.359375 ) ( -116 -288 -39.9999961853 3.625 0 ) )
-( ( -208 -384 -39.9999961853 4.375 0.71875 ) ( -162 -384 -39.9999961853 4.375 0.359375 ) ( -116 -384 -39.9999961853 4.375 0 ) )
-)
-}
-}
-}
-// entity 305
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 9 3 0 0 0 )
-(
-( ( 268 288 -39.9999961853 0 0.0625 ) ( 268 288 -43.9999961853 0 0.03125 ) ( 268 288 -47.9999961853 0 0 ) )
-( ( 268 192 -39.9999961853 0.75 0.0625 ) ( 268 194.8283691406 -42.8284225464 0.75 0.03125 ) ( 268 197.6568603516 -45.6568489075 0.75 0 ) )
-( ( 448 192 -40 2.15625 0.0625 ) ( 448 196 -40 2.15625 0.03125 ) ( 448 200 -40 2.15625 0 ) )
-( ( 448 192 -128 2.84375 0.0625 ) ( 448 194.8283691406 -125.1715698242 2.84375 0.03125 ) ( 448 197.6568603516 -122.3431472778 2.84375 0 ) )
-( ( 448 288 -128 3.59375 0.0625 ) ( 448 288 -124 3.59375 0.03125 ) ( 448 288 -120 3.59375 0 ) )
-( ( 448 384 -128 4.34375 0.0625 ) ( 448 381.1715698242 -125.1715698242 4.34375 0.03125 ) ( 448 378.3431396484 -122.3431472778 4.34375 0 ) )
-( ( 448 384 -40 5.03125 0.0625 ) ( 448 380 -40 5.03125 0.03125 ) ( 448 376 -40 5.03125 0 ) )
-( ( 268 384 -39.9999961853 6.4375 0.0625 ) ( 268 381.1715698242 -42.8284225464 6.4375 0.03125 ) ( 268 378.3431396484 -45.6568489075 6.4375 0 ) )
-( ( 268 288 -39.9999961853 7.1875 0.0625 ) ( 268 288 -43.9999961853 7.1875 0.03125 ) ( 268 288 -47.9999961853 7.1875 0 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 9 3 0 0 0 )
-(
-( ( 176 288 -47.9999961853 0 0.0625 ) ( 176 288 -43.9999961853 0 0.03125 ) ( 176 288 -39.9999961853 0 0 ) )
-( ( 176 197.6568603516 -45.6568489075 0.706043005 0.0625 ) ( 176 194.8283691406 -42.8284225464 0.706043005 0.03125 ) ( 176 192 -39.9999961853 0.706043005 0 ) )
-( ( 176 200 -40 0.7538779974 0.0625 ) ( 176 196 -40 0.7538779974 0.03125 ) ( 176 192 -40 0.7538779974 0 ) )
-( ( 176 197.6568603516 -122.3431472778 1.3974449635 0.0625 ) ( 176 194.8283691406 -125.1715698242 1.3974449635 0.03125 ) ( 176 192 -128 1.3974449635 0 ) )
-( ( 176 288 -120 2.1034879684 0.0625 ) ( 176 288 -124 2.1034879684 0.03125 ) ( 176 288 -128 2.1034879684 0 ) )
-( ( 176 378.3431396484 -122.3431472778 2.8095309734 0.0625 ) ( 176 381.1715698242 -125.1715698242 2.8095309734 0.03125 ) ( 176 384 -128 2.8095309734 0 ) )
-( ( 176 376 -40 3.453097105 0.0625 ) ( 176 380 -40 3.453097105 0.03125 ) ( 176 384 -40 3.453097105 0 ) )
-( ( 176 378.3431396484 -45.6568489075 3.5009329319 0.0625 ) ( 176 381.1715698242 -42.8284225464 3.5009329319 0.03125 ) ( 176 384 -39.9999961853 3.5009329319 0 ) )
-( ( 176 288 -47.9999961853 4.2069759369 0.0625 ) ( 176 288 -43.9999961853 4.2069759369 0.03125 ) ( 176 288 -39.9999961853 4.2069759369 0 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 9 3 0 0 0 )
-(
-( ( 268 288 -47.9999961853 0 0.71875 ) ( 222 288 -47.9999961853 0 0.359375 ) ( 176 288 -47.9999961853 0 0 ) )
-( ( 268 197.6568603516 -45.6568489075 0.706043005 0.71875 ) ( 222 197.6568603516 -45.6568489075 0.706043005 0.359375 ) ( 176 197.6568603516 -45.6568489075 0.706043005 0 ) )
-( ( 448 200 -40 2.1131060123 0.71875 ) ( 222 200 -40 2.1131060123 0.359375 ) ( 176 200 -40 2.1131060123 0 ) )
-( ( 448 197.6568603516 -122.3431472778 2.7566730976 0.71875 ) ( 222 197.6568603516 -122.3431472778 2.7566730976 0.359375 ) ( 176 197.6568603516 -122.3431472778 2.7566730976 0 ) )
-( ( 448 288 -120 3.4627161026 0.71875 ) ( 222 288 -120 3.4627161026 0.359375 ) ( 176 288 -120 3.4627161026 0 ) )
-( ( 448 378.3431396484 -122.3431472778 4.1687588692 0.71875 ) ( 222 378.3431396484 -122.3431472778 4.1687588692 0.359375 ) ( 176 378.3431396484 -122.3431472778 4.1687588692 0 ) )
-( ( 448 376 -40 4.8123250008 0.71875 ) ( 222 376 -40 4.8123250008 0.359375 ) ( 176 376 -40 4.8123250008 0 ) )
-( ( 268 378.3431396484 -45.6568489075 6.2193880081 0.71875 ) ( 222 378.3431396484 -45.6568489075 6.2193880081 0.359375 ) ( 176 378.3431396484 -45.6568489075 6.2193880081 0 ) )
-( ( 268 288 -47.9999961853 6.9254322052 0.71875 ) ( 222 288 -47.9999961853 6.9254322052 0.359375 ) ( 176 288 -47.9999961853 6.9254322052 0 ) )
-)
-}
-}
-// brush 3
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 9 3 0 0 0 )
-(
-( ( 176 288 -39.9999961853 0 0.71875 ) ( 222 288 -39.9999961853 0 0.359375 ) ( 268 288 -39.9999961853 0 0 ) )
-( ( 176 192 -39.9999961853 0.75 0.71875 ) ( 222 192 -39.9999961853 0.75 0.359375 ) ( 268 192 -39.9999961853 0.75 0 ) )
-( ( 176 192 -40 0.75 0.71875 ) ( 222 192 -40 0.75 0.359375 ) ( 448 192 -40 0.75 0 ) )
-( ( 176 192 -128 1.4375 0.71875 ) ( 222 192 -128 1.4375 0.359375 ) ( 448 192 -128 1.4375 0 ) )
-( ( 176 288 -128 2.1875 0.71875 ) ( 222 288 -128 2.1875 0.359375 ) ( 448 288 -128 2.1875 0 ) )
-( ( 176 384 -128 2.9375 0.71875 ) ( 222 384 -128 2.9375 0.359375 ) ( 448 384 -128 2.9375 0 ) )
-( ( 176 384 -40 3.625 0.71875 ) ( 222 384 -40 3.625 0.359375 ) ( 448 384 -40 3.625 0 ) )
-( ( 176 384 -39.9999961853 3.625 0.71875 ) ( 222 384 -39.9999961853 3.625 0.359375 ) ( 268 384 -39.9999961853 3.625 0 ) )
-( ( 176 288 -39.9999961853 4.375 0.71875 ) ( 222 288 -39.9999961853 4.375 0.359375 ) ( 268 288 -39.9999961853 4.375 0 ) )
-)
-}
-}
-}
-// entity 306
-{
-"classname" "func_group"
-"type" "patchCapped"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( 176 288 -48.0000038147 0 0.6903349757 ) ( 176 200 -40.0000038147 0 0 ) ( 176 200 -40.0000038147 0 0 ) )
-( ( 176 376 -40.0000038147 0.6903349757 0.6903349757 ) ( 176 288.5 -81.5 0.6903349757 0 ) ( 176 198 -123 0.6903349757 0 ) )
-( ( 176 376 -40.0000038147 0.6903349757 0.6903349757 ) ( 176 379 -123 0.6903349757 0 ) ( 176 288 -120 0.6903349757 0 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 3 3 0 0 0 )
-(
-( ( 192 200 -40.0000038147 1.5 8.9375 ) ( 192 200 -40.0000038147 1.5 8.9375 ) ( 196 288 -48.0000038147 1.53125 8.25 ) )
-( ( 233 198 -123 1.8203129768 8.953125 ) ( 212.5 288.5 -81.5 1.6601560116 8.24609375 ) ( 192 376 -40.0000038147 1.5 7.5625 ) )
-( ( 231 288 -120 1.8046879768 8.25 ) ( 233 379 -123 1.8203129768 7.5390629768 ) ( 192 376 -40.0000038147 1.5 7.5625 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase2
-( 9 3 0 0 0 )
-(
-( ( 196 288 -48.0000038147 0 0.15625 ) ( 184 288 -48.0000038147 0 0.0625 ) ( 176 288 -48.0000038147 0 0 ) )
-( ( 192 376 -40.0000038147 0.691042006 0.15625 ) ( 184 376 -40.0000038147 0.691042006 0.0625 ) ( 176 376 -40.0000038147 0.691042006 0 ) )
-( ( 192 376 -40.0000038147 0.691042006 0.15625 ) ( 184 376 -40.0000038147 0.691042006 0.0625 ) ( 176 376 -40.0000038147 0.691042006 0 ) )
-( ( 233 379 -123 1.4146579504 0.15625 ) ( 184 379 -123 1.4146579504 0.0625 ) ( 176 379 -123 1.4146579504 0 ) )
-( ( 231 288 -120 2.1261539459 0.15625 ) ( 184 288 -120 2.1261539459 0.0625 ) ( 176 288 -120 2.1261539459 0 ) )
-( ( 233 198 -123 2.8298430443 0.15625 ) ( 184 198 -123 2.8298430443 0.0625 ) ( 176 198 -123 2.8298430443 0 ) )
-( ( 192 200 -40.0000038147 3.5532479286 0.15625 ) ( 184 200 -40.0000038147 3.5532479286 0.0625 ) ( 176 200 -40.0000038147 3.5532479286 0 ) )
-( ( 192 200 -40.0000038147 3.5532479286 0.15625 ) ( 184 200 -40.0000038147 3.5532479286 0.0625 ) ( 176 200 -40.0000038147 3.5532479286 0 ) )
-( ( 196 288 -48.0000038147 4.244289875 0.15625 ) ( 184 288 -48.0000038147 4.244289875 0.0625 ) ( 176 288 -48.0000038147 4.244289875 0 ) )
-)
-}
-}
-}
-// entity 307
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 192 -1312 80 0 0 ) ( 192 -1320 88 0 0.03125 ) ( 192 -1320 88 0 0.0625 ) )
-( ( -616 -1320 80 6.3125 0 ) ( -616 -1320 88 6.3125 0.03125 ) ( -616 -1320 88 6.3125 0.0625 ) )
-( ( -608 -768 80 10.625 0 ) ( -616 -768 88 10.625 0.03125 ) ( -616 -768 88 10.625 0.0625 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 192 -1344 32 0 0 ) ( 192 -1344 56 0 0.21875 ) ( 192 -1320 88 0 0.5068609715 ) )
-( ( 192 -1344 32 0.03125 0 ) ( 192 -1344 56 0.03125 0.21875 ) ( 192 -1320 88 0.03125 0.5068609715 ) )
-( ( 192 -1336 32 0.0625 0 ) ( 192 -1336 56 0.0625 0.21875 ) ( 192 -1312 80 0.0625 0.5068609715 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 192 -1336 32 0 0 ) ( 192 -1336 56 0 0.21875 ) ( 192 -1312 80 0 0.5068609715 ) )
-( ( -632 -1336 32 6.3125 0 ) ( -632 -1336 56 6.3125 0.21875 ) ( -616 -1320 80 6.3125 0.5068609715 ) )
-( ( -632 -768 32 10.625 0 ) ( -632 -768 56 10.625 0.21875 ) ( -608 -768 80 10.625 0.5068609715 ) )
-)
-}
-}
-}
-// entity 308
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( -448 -536 88 0 0.0625 ) ( -448 -536 88 0 0.03125 ) ( -448 -544 80 0 0 ) )
-( ( -616 -536 88 1.3125 0.0625 ) ( -616 -536 88 1.3125 0.03125 ) ( -616 -536 80 1.3125 0 ) )
-( ( -616 -768 88 3.125 0.0625 ) ( -616 -768 88 3.125 0.03125 ) ( -608 -768 80 3.125 0 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( -448 -544 80 0 0 ) ( -448 -520 56 0 0.2881110013 ) ( -448 -520 32 0 0.5068609715 ) )
-( ( -616 -536 80 1.5 0 ) ( -632 -520 56 1.5 0.2881110013 ) ( -632 -520 32 1.5 0.5068609715 ) )
-( ( -608 -768 80 3.5 0 ) ( -632 -768 56 3.5 0.2881110013 ) ( -632 -768 32 3.5 0.5068609715 ) )
-)
-}
-}
-}
-// entity 309
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( -296 -384 88 0 0.0625 ) ( -296 -384 88 0 0.03125 ) ( -288 -384 80 0 0 ) )
-( ( -296 -536 88 1.1875 0.0625 ) ( -296 -536 88 1.1875 0.03125 ) ( -296 -536 80 1.1875 0 ) )
-( ( -448 -536 88 2.375 0.0625 ) ( -448 -536 88 2.375 0.03125 ) ( -448 -544 80 2.375 0 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( -288 -384 80 0 0 ) ( -312 -384 56 0 0.3125 ) ( -312 -384 32 0 0.5 ) )
-( ( -296 -536 80 1 0 ) ( -312 -520 56 1 0.3125 ) ( -312 -520 32 1 0.5 ) )
-( ( -448 -544 80 2 0 ) ( -448 -520 56 2 0.3125 ) ( -448 -520 32 2 0.5 ) )
-)
-}
-}
-}
-// entity 310
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( -288 -384 80 0 0 ) ( -296 -384 88 0 0.03125 ) ( -296 -384 88 0 0.0625 ) )
-( ( -296 -232 80 1.1875 0 ) ( -296 -232 88 1.1875 0.03125 ) ( -296 -232 88 1.1875 0.0625 ) )
-( ( -448 -224 80 2.375 0 ) ( -448 -232 88 2.375 0.03125 ) ( -448 -232 88 2.375 0.0625 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( -312 -384 32 0 0.5 ) ( -312 -384 56 0 0.3125 ) ( -288 -384 80 0 0 ) )
-( ( -312 -248 32 1 0.5 ) ( -312 -248 56 1 0.3125 ) ( -296 -232 80 1 0 ) )
-( ( -448 -248 32 2 0.5 ) ( -448 -248 56 2 0.3125 ) ( -448 -224 80 2 0 ) )
-)
-}
-}
-}
-// entity 311
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( -448 -224 80 0 0 ) ( -448 -232 88 0 0.03125 ) ( -448 -232 88 0 0.0625 ) )
-( ( -616 -232 80 1.3125 0 ) ( -616 -232 88 1.3125 0.03125 ) ( -616 -232 88 1.3125 0.0625 ) )
-( ( -608 0 80 3.125 0 ) ( -616 0 88 3.125 0.03125 ) ( -616 0 88 3.125 0.0625 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( -448 -248 32 0 0.5068609715 ) ( -448 -248 56 0 0.2881110013 ) ( -448 -224 80 0 0 ) )
-( ( -632 -248 32 1.5 0.5068609715 ) ( -632 -248 56 1.5 0.2881110013 ) ( -616 -232 80 1.5 0 ) )
-( ( -632 0 32 3.5 0.5068609715 ) ( -632 0 56 3.5 0.2881110013 ) ( -608 0 80 3.5 0 ) )
-)
-}
-}
-}
-// entity 312
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 192 552 88 0 0.0625 ) ( 192 552 88 0 0.03125 ) ( 192 544 80 0 0 ) )
-( ( -616 552 88 6.3125 0.0625 ) ( -616 552 88 6.3125 0.03125 ) ( -616 552 80 6.3125 0 ) )
-( ( -616 0 88 10.625 0.0625 ) ( -616 0 88 10.625 0.03125 ) ( -608 0 80 10.625 0 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 192 552 88 0 0.5068609715 ) ( 192 576 56 0 0.21875 ) ( 192 576 32 0 0 ) )
-( ( 192 552 88 0.03125 0.5068609715 ) ( 192 576 56 0.03125 0.21875 ) ( 192 576 32 0.03125 0 ) )
-( ( 192 544 80 0.0625 0.5068609715 ) ( 192 568 56 0.0625 0.21875 ) ( 192 568 32 0.0625 0 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 192 544 80 0 0.5068609715 ) ( 192 568 56 0 0.21875 ) ( 192 568 32 0 0 ) )
-( ( -616 552 80 6.3125 0.5068609715 ) ( -632 568 56 6.3125 0.21875 ) ( -632 568 32 6.3125 0 ) )
-( ( -608 0 80 10.625 0.5068609715 ) ( -632 0 56 10.625 0.21875 ) ( -632 0 32 10.625 0 ) )
-)
-}
-}
-}
-// entity 313
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( -288 -384 192 0 0 ) ( -296 -384 200 0 0.03125 ) ( -296 -384 200 0 0.0625 ) )
-( ( -296 -232 192 1.1875 0 ) ( -296 -232 200 1.1875 0.03125 ) ( -296 -232 200 1.1875 0.0625 ) )
-( ( -448 -224 192 2.375 0 ) ( -448 -232 200 2.375 0.03125 ) ( -448 -232 200 2.375 0.0625 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( -312 -384 144 0 0.5 ) ( -312 -384 168 0 0.3125 ) ( -288 -384 192 0 0 ) )
-( ( -312 -248 144 1 0.5 ) ( -312 -248 168 1 0.3125 ) ( -296 -232 192 1 0 ) )
-( ( -448 -248 144 2 0.5 ) ( -448 -248 168 2 0.3125 ) ( -448 -224 192 2 0 ) )
-)
-}
-}
-}
-// entity 314
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( -296 -384 200 0 0.0625 ) ( -296 -384 200 0 0.03125 ) ( -288 -384 192 0 0 ) )
-( ( -296 -536 200 1.1875 0.0625 ) ( -296 -536 200 1.1875 0.03125 ) ( -296 -536 192 1.1875 0 ) )
-( ( -448 -536 200 2.375 0.0625 ) ( -448 -536 200 2.375 0.03125 ) ( -448 -544 192 2.375 0 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( -288 -384 192 0 0 ) ( -312 -384 168 0 0.3125 ) ( -312 -384 144 0 0.5 ) )
-( ( -296 -536 192 1 0 ) ( -312 -520 168 1 0.3125 ) ( -312 -520 144 1 0.5 ) )
-( ( -448 -544 192 2 0 ) ( -448 -520 168 2 0.3125 ) ( -448 -520 144 2 0.5 ) )
-)
-}
-}
-}
-// entity 315
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( -296 -384 88 0 0.0625 ) ( -296 -384 88 0 0.03125 ) ( -288 -384 96 0 0 ) )
-( ( -296 -232 88 1.1875 0.0625 ) ( -296 -232 88 1.1875 0.03125 ) ( -296 -232 96 1.1875 0 ) )
-( ( -448 -232 88 2.375 0.0625 ) ( -448 -232 88 2.375 0.03125 ) ( -448 -224 96 2.375 0 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( -288 -384 96 0 0 ) ( -312 -384 120 0 0.3125 ) ( -312 -384 144 0 0.5 ) )
-( ( -296 -232 96 1 0 ) ( -312 -248 120 1 0.3125 ) ( -312 -248 144 1 0.5 ) )
-( ( -448 -224 96 2 0 ) ( -448 -248 120 2 0.3125 ) ( -448 -248 144 2 0.5 ) )
-)
-}
-}
-}
-// entity 316
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( -288 -384 96 0 0 ) ( -296 -384 88 0 0.03125 ) ( -296 -384 88 0 0.0625 ) )
-( ( -296 -536 96 1.1875 0 ) ( -296 -536 88 1.1875 0.03125 ) ( -296 -536 88 1.1875 0.0625 ) )
-( ( -448 -544 96 2.375 0 ) ( -448 -536 88 2.375 0.03125 ) ( -448 -536 88 2.375 0.0625 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( -312 -384 144 0 0.5 ) ( -312 -384 120 0 0.3125 ) ( -288 -384 96 0 0 ) )
-( ( -312 -520 144 1 0.5 ) ( -312 -520 120 1 0.3125 ) ( -296 -536 96 1 0 ) )
-( ( -448 -520 144 2 0.5 ) ( -448 -520 120 2 0.3125 ) ( -448 -544 96 2 0 ) )
-)
-}
-}
-}
-// entity 317
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( -448 -536 200 0 0.0625 ) ( -448 -536 200 0 0.03125 ) ( -448 -544 192 0 0 ) )
-( ( -616 -536 200 1.3125 0.0625 ) ( -616 -536 200 1.3125 0.03125 ) ( -616 -536 192 1.3125 0 ) )
-( ( -616 -768 200 3.125 0.0625 ) ( -616 -768 200 3.125 0.03125 ) ( -608 -768 192 3.125 0 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( -448 -544 192 0 0 ) ( -448 -520 168 0 0.2881110013 ) ( -448 -520 144 0 0.5068609715 ) )
-( ( -616 -536 192 1.5 0 ) ( -632 -520 168 1.5 0.2881110013 ) ( -632 -520 144 1.5 0.5068609715 ) )
-( ( -608 -768 192 3.5 0 ) ( -632 -768 168 3.5 0.2881110013 ) ( -632 -768 144 3.5 0.5068609715 ) )
-)
-}
-}
-}
-// entity 318
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( -448 -544 96 0 0 ) ( -448 -536 88 0 0.03125 ) ( -448 -536 88 0 0.0625 ) )
-( ( -616 -536 96 1.3125 0 ) ( -616 -536 88 1.3125 0.03125 ) ( -616 -536 88 1.3125 0.0625 ) )
-( ( -608 -768 96 3.125 0 ) ( -616 -768 88 3.125 0.03125 ) ( -616 -768 88 3.125 0.0625 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( -616 -768 88 0 0 ) ( -640 -768 120 0 0.2881110013 ) ( -640 -768 144 0 0.5068609715 ) )
-( ( -616 -768 88 0.03125 0 ) ( -640 -768 120 0.03125 0.2881110013 ) ( -632 -768 144 0.03125 0.5068609715 ) )
-( ( -608 -768 96 0.0625 0 ) ( -632 -768 120 0.0625 0.2881110013 ) ( -632 -768 144 0.0625 0.5068609715 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( -448 -520 144 0 0.5068609715 ) ( -448 -520 120 0 0.2881110013 ) ( -448 -544 96 0 0 ) )
-( ( -632 -520 144 1.5 0.5068609715 ) ( -632 -520 120 1.5 0.2881110013 ) ( -616 -536 96 1.5 0 ) )
-( ( -632 -768 144 3.5 0.5068609715 ) ( -632 -768 120 3.5 0.2881110013 ) ( -608 -768 96 3.5 0 ) )
-)
-}
-}
-}
-// entity 319
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( -448 -224 192 0 0 ) ( -448 -232 200 0 0.03125 ) ( -448 -232 200 0 0.0625 ) )
-( ( -616 -232 192 1.3125 0 ) ( -616 -232 200 1.3125 0.03125 ) ( -616 -232 200 1.3125 0.0625 ) )
-( ( -608 0 192 3.125 0 ) ( -616 0 200 3.125 0.03125 ) ( -616 0 200 3.125 0.0625 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( -616 0 200 0 0 ) ( -640 0 168 0 0.2881110013 ) ( -640 0 144 0 0.5068609715 ) )
-( ( -616 0 200 0.03125 0 ) ( -640 0 168 0.03125 0.2881110013 ) ( -632 0 144 0.03125 0.5068609715 ) )
-( ( -608 0 192 0.0625 0 ) ( -632 0 168 0.0625 0.2881110013 ) ( -632 0 144 0.0625 0.5068609715 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( -448 -248 144 0 0.5068609715 ) ( -448 -248 168 0 0.2881110013 ) ( -448 -224 192 0 0 ) )
-( ( -632 -248 144 1.5 0.5068609715 ) ( -632 -248 168 1.5 0.2881110013 ) ( -616 -232 192 1.5 0 ) )
-( ( -632 0 144 3.5 0.5068609715 ) ( -632 0 168 3.5 0.2881110013 ) ( -608 0 192 3.5 0 ) )
-)
-}
-}
-}
-// entity 320
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( -448 -232 88 0 0.0625 ) ( -448 -232 88 0 0.03125 ) ( -448 -224 96 0 0 ) )
-( ( -616 -232 88 1.3125 0.0625 ) ( -616 -232 88 1.3125 0.03125 ) ( -616 -232 96 1.3125 0 ) )
-( ( -616 0 88 3.125 0.0625 ) ( -616 0 88 3.125 0.03125 ) ( -608 0 96 3.125 0 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( -640 0 144 0 0.5068609715 ) ( -640 0 120 0 0.2881110013 ) ( -616 0 88 0 0 ) )
-( ( -632 0 144 0.03125 0.5068609715 ) ( -640 0 120 0.03125 0.2881110013 ) ( -616 0 88 0.03125 0 ) )
-( ( -632 0 144 0.0625 0.5068609715 ) ( -632 0 120 0.0625 0.2881110013 ) ( -608 0 96 0.0625 0 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( -448 -224 96 0 0 ) ( -448 -248 120 0 0.2881110013 ) ( -448 -248 144 0 0.5068609715 ) )
-( ( -616 -232 96 1.5 0 ) ( -632 -248 120 1.5 0.2881110013 ) ( -632 -248 144 1.5 0.5068609715 ) )
-( ( -608 0 96 3.5 0 ) ( -632 0 120 3.5 0.2881110013 ) ( -632 0 144 3.5 0.5068609715 ) )
-)
-}
-}
-}
-// entity 321
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 192 568 144 0 0 ) ( 192 576 144 0 0.03125 ) ( 192 576 144 0 0.0625 ) )
-( ( -632 568 144 6.5 0 ) ( -640 576 144 6.5 0.03125 ) ( -640 576 144 6.5 0.0625 ) )
-( ( -632 0 144 11 0 ) ( -632 0 144 11 0.03125 ) ( -640 0 144 11 0.0625 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 192 552 200 0 0.0625 ) ( 192 552 200 0 0.03125 ) ( 192 544 192 0 0 ) )
-( ( -616 552 200 6.3125 0.0625 ) ( -616 552 200 6.3125 0.03125 ) ( -616 552 192 6.3125 0 ) )
-( ( -616 0 200 10.625 0.0625 ) ( -616 0 200 10.625 0.03125 ) ( -608 0 192 10.625 0 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( -640 0 144 0 0 ) ( -640 0 168 0 0.21875 ) ( -616 0 200 0 0.5068609715 ) )
-( ( -632 0 144 0.03125 0 ) ( -640 0 168 0.03125 0.21875 ) ( -616 0 200 0.03125 0.5068609715 ) )
-( ( -632 0 144 0.0625 0 ) ( -632 0 168 0.0625 0.21875 ) ( -608 0 192 0.0625 0.5068609715 ) )
-)
-}
-}
-// brush 3
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 192 552 200 0 0.5068609715 ) ( 192 576 168 0 0.21875 ) ( 192 576 144 0 0 ) )
-( ( 192 552 200 0.03125 0.5068609715 ) ( 192 576 168 0.03125 0.21875 ) ( 192 576 144 0.03125 0 ) )
-( ( 192 544 192 0.0625 0.5068609715 ) ( 192 568 168 0.0625 0.21875 ) ( 192 568 144 0.0625 0 ) )
-)
-}
-}
-// brush 4
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 192 544 192 0 0.5068609715 ) ( 192 568 168 0 0.21875 ) ( 192 568 144 0 0 ) )
-( ( -616 552 192 6.3125 0.5068609715 ) ( -632 568 168 6.3125 0.21875 ) ( -632 568 144 6.3125 0 ) )
-( ( -608 0 192 10.625 0.5068609715 ) ( -632 0 168 10.625 0.21875 ) ( -632 0 144 10.625 0 ) )
-)
-}
-}
-}
-// entity 322
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 192 -1344 144 0 0.0625 ) ( 192 -1344 144 0 0.03125 ) ( 192 -1336 144 0 0 ) )
-( ( -640 -1344 144 6.5 0.0625 ) ( -640 -1344 144 6.5 0.03125 ) ( -632 -1336 144 6.5 0 ) )
-( ( -640 -768 144 11 0.0625 ) ( -632 -768 144 11 0.03125 ) ( -632 -768 144 11 0 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 192 -1312 192 0 0 ) ( 192 -1320 200 0 0.03125 ) ( 192 -1320 200 0 0.0625 ) )
-( ( -616 -1320 192 6.3125 0 ) ( -616 -1320 200 6.3125 0.03125 ) ( -616 -1320 200 6.3125 0.0625 ) )
-( ( -608 -768 192 10.625 0 ) ( -616 -768 200 10.625 0.03125 ) ( -616 -768 200 10.625 0.0625 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 192 -1344 144 0 0 ) ( 192 -1344 168 0 0.21875 ) ( 192 -1320 200 0 0.5068609715 ) )
-( ( 192 -1344 144 0.03125 0 ) ( 192 -1344 168 0.03125 0.21875 ) ( 192 -1320 200 0.03125 0.5068609715 ) )
-( ( 192 -1336 144 0.0625 0 ) ( 192 -1336 168 0.0625 0.21875 ) ( 192 -1312 192 0.0625 0.5068609715 ) )
-)
-}
-}
-// brush 3
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 192 -1336 144 0 0 ) ( 192 -1336 168 0 0.21875 ) ( 192 -1312 192 0 0.5068609715 ) )
-( ( -632 -1336 144 6.3125 0 ) ( -632 -1336 168 6.3125 0.21875 ) ( -616 -1320 192 6.3125 0.5068609715 ) )
-( ( -632 -768 144 10.625 0 ) ( -632 -768 168 10.625 0.21875 ) ( -608 -768 192 10.625 0.5068609715 ) )
-)
-}
-}
-}
-// entity 323
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-evil8_lights/e8minitrimlight
-( 3 3 0 0 0 )
-(
-( ( -296 -384 200 0 1 ) ( -296 -384 204 0 0.5 ) ( -296 -384 208 0 0 ) )
-( ( -296 -232 200 1.1875 1 ) ( -296 -232 204 1.1875 0.5 ) ( -296 -232 208 1.1875 0 ) )
-( ( -448 -232 200 2.375 1 ) ( -448 -232 204 2.375 0.5 ) ( -448 -232 208 2.375 0 ) )
-)
-}
-}
-}
-// entity 324
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-evil8_lights/e8minitrimlight
-( 3 3 0 0 0 )
-(
-( ( -296 -384 208 0 -1 ) ( -296 -384 204 0 -0.5 ) ( -296 -384 200 0 0 ) )
-( ( -296 -536 208 -1.1875 -1 ) ( -296 -536 204 -1.1875 -0.5 ) ( -296 -536 200 -1.1875 0 ) )
-( ( -448 -536 208 -2.375 -1 ) ( -448 -536 204 -2.375 -0.5 ) ( -448 -536 200 -2.375 0 ) )
-)
-}
-}
-}
-// entity 325
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-evil8_lights/e8minitrimlight
-( 3 3 0 0 0 )
-(
-( ( -448 -232 200 0 1 ) ( -448 -232 204 0 0.5 ) ( -448 -232 208 0 0 ) )
-( ( -616 -232 200 1.3125 1 ) ( -616 -232 204 1.3125 0.5 ) ( -616 -232 208 1.3125 0 ) )
-( ( -616 0 200 3.125 1 ) ( -616 0 204 3.125 0.5 ) ( -616 0 208 3.125 0 ) )
-)
-}
-}
-}
-// entity 326
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-evil8_lights/e8minitrimlight
-( 3 3 0 0 0 )
-(
-( ( -448 -536 208 0 1 ) ( -448 -536 204 0 0.5 ) ( -448 -536 200 0 0 ) )
-( ( -616 -536 208 1.3125 1 ) ( -616 -536 204 1.3125 0.5 ) ( -616 -536 200 1.3125 0 ) )
-( ( -616 -768 208 3.125 1 ) ( -616 -768 204 3.125 0.5 ) ( -616 -768 200 3.125 0 ) )
-)
-}
-}
-}
-// entity 327
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-evil8_lights/e8minitrimlight
-( 3 3 0 0 0 )
-(
-( ( 192 554 208 0 0 ) ( 192 553 208 0 0.125 ) ( 192 552 208 0 0.25 ) )
-( ( -617.4141845703 553.4141845703 208 6.3125 0 ) ( -616.7070922852 552.7070922852 208 6.3125 0.125 ) ( -616 552 208 6.3125 0.25 ) )
-( ( -618 0 208 10.625 0 ) ( -617 0 208 10.625 0.125 ) ( -616 0 208 10.625 0.25 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-evil8_lights/e8minitrimlight
-( 3 3 0 0 0 )
-(
-( ( 192 552 200 0 0 ) ( 192 552 204 0 0.5 ) ( 192 552 208 0 1 ) )
-( ( 192 553 200 0.0078130001 0 ) ( 192 553 204 0.0078130001 0.5 ) ( 192 553 208 0.0078130001 1 ) )
-( ( 192 554 200 0.015625 0 ) ( 192 554 204 0.015625 0.5 ) ( 192 554 208 0.015625 1 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-evil8_lights/e8minitrimlight
-( 3 3 0 0 0 )
-(
-( ( 192 552 208 0 1 ) ( 192 552 204 0 0.5 ) ( 192 552 200 0 0 ) )
-( ( -616 552 208 6.3125 1 ) ( -616 552 204 6.3125 0.5 ) ( -616 552 200 6.3125 0 ) )
-( ( -616 0 208 10.625 1 ) ( -616 0 204 10.625 0.5 ) ( -616 0 200 10.625 0 ) )
-)
-}
-}
-}
-// entity 328
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-evil8_lights/e8minitrimlight
-( 3 3 0 0 0 )
-(
-( ( 192 -1320 200 0 0 ) ( 192 -1320 204 0 0.5 ) ( 192 -1320 208 0 1 ) )
-( ( -616 -1320 200 6.3125 0 ) ( -616 -1320 204 6.3125 0.5 ) ( -616 -1320 208 6.3125 1 ) )
-( ( -616 -768 200 10.625 0 ) ( -616 -768 204 10.625 0.5 ) ( -616 -768 208 10.625 1 ) )
-)
-}
-}
-}
-// entity 329
-{
-"classname" "light"
-"_color" "0.974271 1.000000 0.716828"
-"light" "50"
-"origin" "-518 -197 204"
-}
-// entity 330
-{
-"classname" "light"
-"_color" "0.974271 1.000000 0.716828"
-"light" "50"
-"origin" "-513 299 204"
-}
-// entity 331
-{
-"classname" "light"
-"_color" "0.974271 1.000000 0.716828"
-"light" "50"
-"origin" "-351 445 204"
-}
-// entity 332
-{
-"classname" "light"
-"_color" "0.974271 1.000000 0.716828"
-"light" "50"
-"origin" "-107 527 204"
-}
-// entity 333
-{
-"classname" "light"
-"_color" "0.974271 1.000000 0.716828"
-"light" "50"
-"origin" "187 547 204"
-}
-// entity 334
-{
-"classname" "light"
-"_color" "0.974271 1.000000 0.716828"
-"light" "50"
-"origin" "-352 -240 204"
-}
-// entity 335
-{
-"classname" "light"
-"_color" "0.974271 1.000000 0.716828"
-"light" "50"
-"origin" "-286 -387 204"
-}
-// entity 336
-{
-"classname" "light"
-"_color" "0.974271 1.000000 0.716828"
-"light" "50"
-"origin" "-339 -516 204"
-}
-// entity 337
-{
-"classname" "light"
-"_color" "0.974271 1.000000 0.716828"
-"light" "50"
-"origin" "-518 -571 204"
-}
-// entity 338
-{
-"classname" "light"
-"_color" "0.974271 1.000000 0.716828"
-"light" "50"
-"origin" "-531 -1040 204"
-}
-// entity 339
-{
-"classname" "light"
-"_color" "0.974271 1.000000 0.716828"
-"light" "50"
-"origin" "-365 -1194 204"
-}
-// entity 340
-{
-"classname" "light"
-"_color" "0.974271 1.000000 0.716828"
-"light" "50"
-"origin" "-124 -1278 204"
-}
-// entity 341
-{
-"classname" "light"
-"_color" "0.974271 1.000000 0.716828"
-"light" "50"
-"origin" "183 -1312 204"
-}
-// entity 342
-{
-"classname" "light"
-"_color" "0.974271 1.000000 0.716828"
-"light" "50"
-"origin" "-599 -772 204"
-}
-// entity 343
-{
-"classname" "light"
-"_color" "0.974271 1.000000 0.716828"
-"light" "50"
-"origin" "-596 60 204"
-}
-// entity 344
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 1088 -64 320 0 0.0625 ) ( 1091.8081054688 -64 318.775970459 0 0.03125 ) ( 1095.6162109375 -64 317.551940918 0 0 ) )
-( ( 1088 128 320 1.5 0.0625 ) ( 1090.6638183594 130.7909851074 318.9443969727 1.5 0.03125 ) ( 1093.3277587891 133.5819549561 317.8887939453 1.5 0 ) )
-( ( 929.5 128 320 2.7382810116 0.0625 ) ( 929.5 131.9898376465 319.7150268555 2.7382810116 0.03125 ) ( 929.5 135.979675293 319.4300231934 2.7382810116 0 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 1082.4000244141 -64 380.799987793 0 0 ) ( 1079.1999511719 -64 378.3999938965 0 0.03125 ) ( 1076 -64 376 0 0.0625 ) )
-( ( 1080.0434570312 121.5842514038 381.160949707 1.4140629768 0 ) ( 1078.0217285156 119.2921295166 378.5804748535 1.4140629768 0.03125 ) ( 1076 117 376 1.4140629768 0.0625 ) )
-( ( 929.5 124.256072998 379.3688964844 2.5585939884 0 ) ( 929.5 120.628036499 377.6844482422 2.5585939884 0.03125 ) ( 929.5 117 376 2.5585939884 0.0625 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 929.5 117 376 0 0.4604850113 ) ( 929.5 130 348 0 0.2193070054 ) ( 929.5 128 320 0 0 ) )
-( ( 929.5 120.628036499 377.6844482422 0.03125 0.4604850113 ) ( 929.5 133.934173584 348.7227172852 0.03125 0.2193070054 ) ( 929.5 131.9898376465 319.7150268555 0.03125 0 ) )
-( ( 929.5 124.256072998 379.3688964844 0.0625 0.4604850113 ) ( 929.5 137.8683319092 349.4454650879 0.0625 0.2193070054 ) ( 929.5 135.979675293 319.4300231934 0.0625 0 ) )
-)
-}
-}
-// brush 3
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 1088 -64 320 0 0 ) ( 1097 -64 348 0 0.2297729999 ) ( 1076 -64 376 0 0.5032100081 ) )
-( ( 1091.8081054688 -64 318.775970459 0.03125 0 ) ( 1100.9448242188 -64 348.6619262695 0.03125 0.2297729999 ) ( 1079.1999511719 -64 378.3999938965 0.03125 0.5032100081 ) )
-( ( 1095.6162109375 -64 317.551940918 0.0625 0 ) ( 1104.8896484375 -64 349.3238830566 0.0625 0.2297729999 ) ( 1082.4000244141 -64 380.799987793 0.0625 0.5032100081 ) )
-)
-}
-}
-// brush 4
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 1095.6162109375 -64 317.551940918 0 0 ) ( 1104.8896484375 -64 349.3238830566 0 0.2237160057 ) ( 1082.4000244141 -64 380.799987793 0 0.4837679863 ) )
-( ( 1093.3277587891 133.5819549561 317.8887939453 1.4140629768 0 ) ( 1102.2561035156 135.713394165 349.9315490723 1.4140629768 0.2237160057 ) ( 1080.0434570312 121.5842514038 381.160949707 1.4140629768 0.4837679863 ) )
-( ( 929.5 135.979675293 319.4300231934 2.5585939884 0 ) ( 929.5 137.8683319092 349.4454650879 2.5585939884 0.2237160057 ) ( 929.5 124.256072998 379.3688964844 2.5585939884 0.4837679863 ) )
-)
-}
-}
-// brush 5
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 1076 -64 376 0 0.4837679863 ) ( 1097 -64 348 0 0.2237160057 ) ( 1088 -64 320 0 0 ) )
-( ( 1076 117 376 1.4140629768 0.4837679863 ) ( 1097 130 348 1.4140629768 0.2237160057 ) ( 1088 128 320 1.4140629768 0 ) )
-( ( 929.5 117 376 2.5585939884 0.4837679863 ) ( 929.5 130 348 2.5585939884 0.2237160057 ) ( 929.5 128 320 2.5585939884 0 ) )
-)
-}
-}
-}
-// entity 345
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 1095.6162109375 -704 317.551940918 0 0 ) ( 1091.8081054688 -704 318.775970459 0 0.03125 ) ( 1088 -704 320 0 0.0625 ) )
-( ( 1093.3277587891 -901.5819702148 317.8887939453 1.5 0 ) ( 1090.6638183594 -898.791015625 318.9443969727 1.5 0.03125 ) ( 1088 -896 320 1.5 0.0625 ) )
-( ( 929.5 -903.979675293 319.4300231934 2.7382810116 0 ) ( 929.5 -899.9898681641 319.7150268555 2.7382810116 0.03125 ) ( 929.5 -896 320 2.7382810116 0.0625 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 1076 -704 376 0 0.0625 ) ( 1079.1999511719 -704 378.3999938965 0 0.03125 ) ( 1082.4000244141 -704 380.799987793 0 0 ) )
-( ( 1076 -885 376 1.4140629768 0.0625 ) ( 1078.0217285156 -887.2921142578 378.5804748535 1.4140629768 0.03125 ) ( 1080.0434570312 -889.5842285156 381.160949707 1.4140629768 0 ) )
-( ( 929.5 -885 376 2.5585939884 0.0625 ) ( 929.5 -888.6280517578 377.6844482422 2.5585939884 0.03125 ) ( 929.5 -892.2561035156 379.3688964844 2.5585939884 0 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 929.5 -896 320 0 0 ) ( 929.5 -898 348 0 0.2193070054 ) ( 929.5 -885 376 0 0.4604850113 ) )
-( ( 929.5 -899.9898681641 319.7150268555 0.03125 0 ) ( 929.5 -901.9342041016 348.7227172852 0.03125 0.2193070054 ) ( 929.5 -888.6280517578 377.6844482422 0.03125 0.4604850113 ) )
-( ( 929.5 -903.979675293 319.4300231934 0.0625 0 ) ( 929.5 -905.868347168 349.4454650879 0.0625 0.2193070054 ) ( 929.5 -892.2561035156 379.3688964844 0.0625 0.4604850113 ) )
-)
-}
-}
-// brush 3
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 1076 -704 376 0 0.5032100081 ) ( 1097 -704 348 0 0.2297729999 ) ( 1088 -704 320 0 0 ) )
-( ( 1079.1999511719 -704 378.3999938965 0.03125 0.5032100081 ) ( 1100.9448242188 -704 348.6619262695 0.03125 0.2297729999 ) ( 1091.8081054688 -704 318.775970459 0.03125 0 ) )
-( ( 1082.4000244141 -704 380.799987793 0.0625 0.5032100081 ) ( 1104.8896484375 -704 349.3238830566 0.0625 0.2297729999 ) ( 1095.6162109375 -704 317.551940918 0.0625 0 ) )
-)
-}
-}
-// brush 4
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 1082.4000244141 -704 380.799987793 0 0.4837679863 ) ( 1104.8896484375 -704 349.3238830566 0 0.2237160057 ) ( 1095.6162109375 -704 317.551940918 0 0 ) )
-( ( 1080.0434570312 -889.5842285156 381.160949707 1.4140629768 0.4837679863 ) ( 1102.2561035156 -903.7133789062 349.9315490723 1.4140629768 0.2237160057 ) ( 1093.3277587891 -901.5819702148 317.8887939453 1.4140629768 0 ) )
-( ( 929.5 -892.2561035156 379.3688964844 2.5585939884 0.4837679863 ) ( 929.5 -905.868347168 349.4454650879 2.5585939884 0.2237160057 ) ( 929.5 -903.979675293 319.4300231934 2.5585939884 0 ) )
-)
-}
-}
-// brush 5
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 1088 -704 320 0 0 ) ( 1097 -704 348 0 0.2237160057 ) ( 1076 -704 376 0 0.4837679863 ) )
-( ( 1088 -896 320 1.4140629768 0 ) ( 1097 -898 348 1.4140629768 0.2237160057 ) ( 1076 -885 376 1.4140629768 0.4837679863 ) )
-( ( 929.5 -896 320 2.5585939884 0 ) ( 929.5 -898 348 2.5585939884 0.2237160057 ) ( 929.5 -885 376 2.5585939884 0.4837679863 ) )
-)
-}
-}
-}
-// entity 346
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 5 3 0 0 0 )
-(
-( ( 1344 191.5000610352 320 0 0.0625 ) ( 1344 187.6194915771 319.0298461914 0 0.03125 ) ( 1344 183.7389221191 318.0597229004 0 0 ) )
-( ( 1536 191.5000610352 320 1.5 0.0625 ) ( 1533.4018554688 188.8525695801 318.5030517578 1.5 0.03125 ) ( 1530.8038330078 186.205078125 317.006072998 1.5 0 ) )
-( ( 1536 -32.2499084473 320 3.2480471134 0.0625 ) ( 1532.1918945312 -32.2499084473 318.775970459 3.2480471134 0.03125 ) ( 1528.3837890625 -32.2499084473 317.551940918 3.2480471134 0 ) )
-( ( 1536 -255.9998779297 320 4.9960927963 0.0625 ) ( 1533.3896484375 -253.3188476562 318.5864562988 4.9960927963 0.03125 ) ( 1530.779296875 -250.6378173828 317.1729125977 4.9960927963 0 ) )
-( ( 1344 -255.9998779297 320 6.4960927963 0.0625 ) ( 1344 -252.0886688232 319.1618652344 6.4960927963 0.03125 ) ( 1344 -248.1774597168 318.3237609863 6.4960927963 0 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 5 3 0 0 0 )
-(
-( ( 1344 195.7706298828 380.3260498047 0 0 ) ( 1344 199.135345459 378.1630249023 0 0.03125 ) ( 1344 202.5000610352 376 0 0.0625 ) )
-( ( 1544.0677490234 198.3653564453 381.6072387695 1.59375 0 ) ( 1546.0339355469 200.4327087402 378.8036193848 1.59375 0.03125 ) ( 1548 202.5000610352 376 1.59375 0.0625 ) )
-( ( 1541.5999755859 -32.2499084473 380.799987793 3.4277338982 0 ) ( 1544.8000488281 -32.2499084473 378.3999938965 3.4277338982 0.03125 ) ( 1548 -32.2499084473 376 3.4277338982 0.0625 ) )
-( ( 1544.0482177734 -262.7774047852 381.5275268555 5.2617177963 0 ) ( 1546.0241699219 -264.8886413574 378.7637634277 5.2617177963 0.03125 ) ( 1548 -266.9998779297 376 5.2617177963 0.0625 ) )
-( ( 1344 -260.1615905762 380.1518249512 6.8554677963 0 ) ( 1344 -263.5807495117 378.0759277344 6.8554677963 0.03125 ) ( 1344 -266.9998779297 376 6.8554677963 0.0625 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 1344 -266.9998779297 376 0 0.4796279967 ) ( 1344 -249.9998779297 348 0 0.2237160057 ) ( 1344 -255.9998779297 320 0 0 ) )
-( ( 1344 -263.5807495117 378.0759277344 0.03125 0.4796279967 ) ( 1344 -246.0557098389 348.666015625 0.03125 0.2237160057 ) ( 1344 -252.0886688232 319.1618652344 0.03125 0 ) )
-( ( 1344 -260.1615905762 380.1518249512 0.0625 0.4796279967 ) ( 1344 -242.111541748 349.3320007324 0.0625 0.2237160057 ) ( 1344 -248.1774597168 318.3237609863 0.0625 0 ) )
-)
-}
-}
-// brush 3
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 1344 191.5000610352 320 0 0 ) ( 1344 184.5000610352 348 0 0.2254820019 ) ( 1344 202.5000610352 376 0 0.4855340123 ) )
-( ( 1344 187.6194915771 319.0298461914 0.03125 0 ) ( 1344 180.5531921387 348.6498413086 0.03125 0.2254820019 ) ( 1344 199.135345459 378.1630249023 0.03125 0.4855340123 ) )
-( ( 1344 183.7389221191 318.0597229004 0.0625 0 ) ( 1344 176.606338501 349.2996520996 0.0625 0.2254820019 ) ( 1344 195.7706298828 380.3260498047 0.0625 0.4855340123 ) )
-)
-}
-}
-// brush 4
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 5 3 0 0 0 )
-(
-( ( 1344 183.7389221191 318.0597229004 0 0 ) ( 1344 176.606338501 349.2996520996 0 0.2254820019 ) ( 1344 195.7706298828 380.3260498047 0 0.4855340123 ) )
-( ( 1530.8038330078 186.205078125 317.006072998 1.59375 0 ) ( 1521.5855712891 178.9023742676 349.8301696777 1.59375 0.2254820019 ) ( 1544.0677490234 198.3653564453 381.6072387695 1.59375 0.4855340123 ) )
-( ( 1528.3837890625 -32.2499084473 317.551940918 3.4277338982 0 ) ( 1519.1103515625 -32.2499084473 349.3238830566 3.4277338982 0.2254820019 ) ( 1541.5999755859 -32.2499084473 380.799987793 3.4277338982 0.4855340123 ) )
-( ( 1530.779296875 -250.6378173828 317.1729125977 5.2617177963 0 ) ( 1521.6219482422 -244.37449646 349.852355957 5.2617177963 0.2254820019 ) ( 1544.0482177734 -262.7774047852 381.5275268555 5.2617177963 0.4855340123 ) )
-( ( 1344 -248.1774597168 318.3237609863 6.8554677963 0 ) ( 1344 -242.111541748 349.3320007324 6.8554677963 0.2254820019 ) ( 1344 -260.1615905762 380.1518249512 6.8554677963 0.4855340123 ) )
-)
-}
-}
-// brush 5
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 5 3 0 0 0 )
-(
-( ( 1344 202.5000610352 376 0 0.4855340123 ) ( 1344 184.5000610352 348 0 0.2254820019 ) ( 1344 191.5000610352 320 0 0 ) )
-( ( 1548 202.5000610352 376 1.59375 0.4855340123 ) ( 1527 184.5000610352 348 1.59375 0.2254820019 ) ( 1536 191.5000610352 320 1.59375 0 ) )
-( ( 1548 -32.2499084473 376 3.4277338982 0.4855340123 ) ( 1527 -32.2499084473 348 3.4277338982 0.2254820019 ) ( 1536 -32.2499084473 320 3.4277338982 0 ) )
-( ( 1548 -266.9998779297 376 5.2617177963 0.4855340123 ) ( 1527 -249.9998779297 348 5.2617177963 0.2254820019 ) ( 1536 -255.9998779297 320 5.2617177963 0 ) )
-( ( 1344 -266.9998779297 376 6.8554677963 0.4855340123 ) ( 1344 -249.9998779297 348 6.8554677963 0.2254820019 ) ( 1344 -255.9998779297 320 6.8554677963 0 ) )
-)
-}
-}
-}
-// entity 347
-{
-"classname" "func_group"
-"type" "patchThick"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 5 3 0 0 0 )
-(
-( ( 1344 -512.4999389648 320 0 0.0625 ) ( 1344 -516.3804931641 319.0298461914 0 0.03125 ) ( 1344 -520.2611083984 318.0597229004 0 0 ) )
-( ( 1536 -512.4999389648 320 1.5 0.0625 ) ( 1533.4018554688 -515.1474609375 318.5030517578 1.5 0.03125 ) ( 1530.8038330078 -517.794921875 317.006072998 1.5 0 ) )
-( ( 1536 -736.2498779297 320 3.2480471134 0.0625 ) ( 1532.1918945312 -736.2498779297 318.775970459 3.2480471134 0.03125 ) ( 1528.3837890625 -736.2498779297 317.551940918 3.2480471134 0 ) )
-( ( 1536 -959.9998779297 320 4.9960927963 0.0625 ) ( 1533.3896484375 -957.3188476562 318.5864562988 4.9960927963 0.03125 ) ( 1530.779296875 -954.6378173828 317.1729125977 4.9960927963 0 ) )
-( ( 1344 -959.9998779297 320 6.4960927963 0.0625 ) ( 1344 -956.088684082 319.1618652344 6.4960927963 0.03125 ) ( 1344 -952.1774902344 318.3237609863 6.4960927963 0 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 5 3 0 0 0 )
-(
-( ( 1344 -508.2293701172 380.3260498047 0 0 ) ( 1344 -504.8646240234 378.1630249023 0 0.03125 ) ( 1344 -501.4999389648 376 0 0.0625 ) )
-( ( 1544.0677490234 -505.6346435547 381.6072387695 1.59375 0 ) ( 1546.0339355469 -503.5672607422 378.8036193848 1.59375 0.03125 ) ( 1548 -501.4999389648 376 1.59375 0.0625 ) )
-( ( 1541.5999755859 -736.2498779297 380.799987793 3.4277338982 0 ) ( 1544.8000488281 -736.2498779297 378.3999938965 3.4277338982 0.03125 ) ( 1548 -736.2498779297 376 3.4277338982 0.0625 ) )
-( ( 1544.0482177734 -966.7774047852 381.5275268555 5.2617177963 0 ) ( 1546.0241699219 -968.888671875 378.7637634277 5.2617177963 0.03125 ) ( 1548 -970.9998779297 376 5.2617177963 0.0625 ) )
-( ( 1344 -964.1616210938 380.1518249512 6.8554677963 0 ) ( 1344 -967.5807495117 378.0759277344 6.8554677963 0.03125 ) ( 1344 -970.9998779297 376 6.8554677963 0.0625 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 1344 -970.9998779297 376 0 0.4796279967 ) ( 1344 -953.9998779297 348 0 0.2237160057 ) ( 1344 -959.9998779297 320 0 0 ) )
-( ( 1344 -967.5807495117 378.0759277344 0.03125 0.4796279967 ) ( 1344 -950.0557250977 348.666015625 0.03125 0.2237160057 ) ( 1344 -956.088684082 319.1618652344 0.03125 0 ) )
-( ( 1344 -964.1616210938 380.1518249512 0.0625 0.4796279967 ) ( 1344 -946.1115722656 349.3320007324 0.0625 0.2237160057 ) ( 1344 -952.1774902344 318.3237609863 0.0625 0 ) )
-)
-}
-}
-// brush 3
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 1344 -512.4999389648 320 0 0 ) ( 1344 -519.4999389648 348 0 0.2254820019 ) ( 1344 -501.4999389648 376 0 0.4855340123 ) )
-( ( 1344 -516.3804931641 319.0298461914 0.03125 0 ) ( 1344 -523.4467773438 348.6498413086 0.03125 0.2254820019 ) ( 1344 -504.8646240234 378.1630249023 0.03125 0.4855340123 ) )
-( ( 1344 -520.2611083984 318.0597229004 0.0625 0 ) ( 1344 -527.3936767578 349.2996520996 0.0625 0.2254820019 ) ( 1344 -508.2293701172 380.3260498047 0.0625 0.4855340123 ) )
-)
-}
-}
-// brush 4
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 5 3 0 0 0 )
-(
-( ( 1344 -520.2611083984 318.0597229004 0 0 ) ( 1344 -527.3936767578 349.2996520996 0 0.2254820019 ) ( 1344 -508.2293701172 380.3260498047 0 0.4855340123 ) )
-( ( 1530.8038330078 -517.794921875 317.006072998 1.59375 0 ) ( 1521.5855712891 -525.09765625 349.8301696777 1.59375 0.2254820019 ) ( 1544.0677490234 -505.6346435547 381.6072387695 1.59375 0.4855340123 ) )
-( ( 1528.3837890625 -736.2498779297 317.551940918 3.4277338982 0 ) ( 1519.1103515625 -736.2498779297 349.3238830566 3.4277338982 0.2254820019 ) ( 1541.5999755859 -736.2498779297 380.799987793 3.4277338982 0.4855340123 ) )
-( ( 1530.779296875 -954.6378173828 317.1729125977 5.2617177963 0 ) ( 1521.6219482422 -948.3745117188 349.852355957 5.2617177963 0.2254820019 ) ( 1544.0482177734 -966.7774047852 381.5275268555 5.2617177963 0.4855340123 ) )
-( ( 1344 -952.1774902344 318.3237609863 6.8554677963 0 ) ( 1344 -946.1115722656 349.3320007324 6.8554677963 0.2254820019 ) ( 1344 -964.1616210938 380.1518249512 6.8554677963 0.4855340123 ) )
-)
-}
-}
-// brush 5
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 5 3 0 0 0 )
-(
-( ( 1344 -501.4999389648 376 0 0.4855340123 ) ( 1344 -519.4999389648 348 0 0.2254820019 ) ( 1344 -512.4999389648 320 0 0 ) )
-( ( 1548 -501.4999389648 376 1.59375 0.4855340123 ) ( 1527 -519.4999389648 348 1.59375 0.2254820019 ) ( 1536 -512.4999389648 320 1.59375 0 ) )
-( ( 1548 -736.2498779297 376 3.4277338982 0.4855340123 ) ( 1527 -736.2498779297 348 3.4277338982 0.2254820019 ) ( 1536 -736.2498779297 320 3.4277338982 0 ) )
-( ( 1548 -970.9998779297 376 5.2617177963 0.4855340123 ) ( 1527 -953.9998779297 348 5.2617177963 0.2254820019 ) ( 1536 -959.9998779297 320 5.2617177963 0 ) )
-( ( 1344 -970.9998779297 376 6.8554677963 0.4855340123 ) ( 1344 -953.9998779297 348 6.8554677963 0.2254820019 ) ( 1344 -959.9998779297 320 6.8554677963 0 ) )
-)
-}
-}
-}
-// entity 348
-{
-"classname" "light"
-"_color" "1.000000 0.930311 0.704394"
-"light" "250"
-"origin" "1312 -1120 368"
-}
-// entity 349
-{
-"classname" "light"
-"_color" "1.000000 0.930311 0.704394"
-"light" "250"
-"origin" "1312 352 368"
-}
-// entity 350
-{
-"classname" "func_group"
-"type" "patchCapped"
-// brush 0
-{
-patchDef2
-{
-dsi_textures/cretebase
-( 3 3 0 0 0 )
-(
-( ( 320.5 -395 -95 18.001953125 3.0019528866 ) ( 320.5 -459.25 -95 18.001953125 2.5 ) ( 256.625 -459.25 -95 18.5009765625 2.5 ) )
-( ( 320.5 -330.75 -95 18.001953125 3.5039060116 ) ( 256.625 -395 -190 18.5009765625 3.0019528866 ) ( 192.75 -459.25 -95 19 2.5 ) )
-( ( 256.625 -330.75 -95 18.5009765625 3.5039060116 ) ( 192.75 -330.75 -95 19 3.5039060116 ) ( 192.75 -395 -95 19 3.0019528866 ) )
-)
-}
-}
-// brush 1
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 3 3 0 0 0 )
-(
-( ( 256.625 -459.25 -111 18.5009765625 2.5 ) ( 320.5 -459.25 -111 18.001953125 2.5 ) ( 320.5 -395 -111 18.001953125 3.0019528866 ) )
-( ( 192.75 -459.25 -111 19 2.5 ) ( 255.625 -395 -223 18.5009765625 3.0019528866 ) ( 320.5 -330.75 -111 18.001953125 3.5039060116 ) )
-( ( 192.75 -395 -111 19 3.0019528866 ) ( 192.75 -330.75 -111 19 3.5039060116 ) ( 256.625 -330.75 -111 18.5009765625 3.5039060116 ) )
-)
-}
-}
-// brush 2
-{
-patchDef2
-{
-dsi_textures/cretebase4
-( 9 3 0 0 0 )
-(
-( ( 320.5 -395 -111 0 0.125 ) ( 320.5 -395 -103 0 0.0625 ) ( 320.5 -395 -95 0 0 ) )
-( ( 320.5 -330.75 -111 0.5019530058 0.125 ) ( 320.5 -330.75 -103 0.5019530058 0.0625 ) ( 320.5 -330.75 -95 0.5019530058 0 ) )
-( ( 256.625 -330.75 -111 1.0009770393 0.125 ) ( 256.625 -330.75 -103 1.0009770393 0.0625 ) ( 256.625 -330.75 -95 1.0009770393 0 ) )
-( ( 192.75 -330.75 -111 1.5 0.125 ) ( 192.75 -330.75 -103 1.5 0.0625 ) ( 192.75 -330.75 -95 1.5 0 ) )
-( ( 192.75 -395 -111 2.0019528866 0.125 ) ( 192.75 -395 -103 2.0019528866 0.0625 ) ( 192.75 -395 -95 2.0019528866 0 ) )
-( ( 192.75 -459.25 -111 2.5039060116 0.125 ) ( 192.75 -459.25 -103 2.5039060116 0.0625 ) ( 192.75 -459.25 -95 2.5039060116 0 ) )
-( ( 256.625 -459.25 -111 3.0029299259 0.125 ) ( 256.625 -459.25 -103 3.0029299259 0.0625 ) ( 256.625 -459.25 -95 3.0029299259 0 ) )
-( ( 320.5 -459.25 -111 3.5019528866 0.125 ) ( 320.5 -459.25 -103 3.5019528866 0.0625 ) ( 320.5 -459.25 -95 3.5019528866 0 ) )
-( ( 320.5 -395 -111 4.0039057732 0.125 ) ( 320.5 -395 -103 4.0039057732 0.0625 ) ( 320.5 -395 -95 4.0039057732 0 ) )
-)
-}
-}
-}
-// entity 351
-{
-"classname" "func_group"
-// brush 0
-{
-( 1296 -892 479 ) ( 1296 -899 487 ) ( 1328 -899 487 ) dsi_textures/cretebase4 -128 0 -180 0.5 -0.5 0 0 0
-( 1328 -776 304 ) ( 1328 -776 488 ) ( 1328 -752 488 ) dsi_textures/cretebase4 0 0 -180 0.5 -0.5 0 0 0
-( 1320 -752 304 ) ( 1320 -752 488 ) ( 1296 -752 488 ) dsi_textures/cretebase4 -128 0 -180 0.5 -0.5 0 0 0
-( 1296 -885 480 ) ( 1296 -752 480 ) ( 1296 -752 488 ) dsi_textures/cretebase4 0 0 -180 0.5 -0.5 0 0 0
-( 1328 -752 488 ) ( 1328 -892 488 ) ( 1296 -892 488 ) dsi_textures/cretebase4 -128 0 -180 0.5 0.5 0 0 0
-( 1296 -885 480 ) ( 1296 -893 480 ) ( 1328 -893 480 ) dsi_textures/cretebase4 -128 0 -180 0.5 0.5 0 0 0
-}
-// brush 1
-{
-( 1163 -720 480 ) ( 1156 -720 488 ) ( 1156 -752 488 ) dsi_textures/cretebase4 0 0 -180 0.5 -0.5 0 0 0
-( 1272 -752 304 ) ( 1272 -752 488 ) ( 1296 -752 488 ) dsi_textures/cretebase4 -128 0 -180 0.5 -0.5 0 0 0
-( 1296 -744 304 ) ( 1296 -744 488 ) ( 1296 -720 488 ) dsi_textures/cretebase4 0 0 -180 0.5 -0.5 0 0 0
-( 1156 -720 488 ) ( 1163 -719 480 ) ( 1296 -719 480 ) dsi_textures/cretebase4 -128 0 -180 0.5 -0.5 0 0 0
-( 1296 -752 488 ) ( 1156 -752 488 ) ( 1156 -720 488 ) dsi_textures/cretebase4 -128 0 -180 0.5 0.5 0 0 0
-( 1296 -752 480 ) ( 1296 -719 480 ) ( 1163 -719 480 ) dsi_textures/cretebase4 -128 0 -180 0.5 0.5 0 0 0
-}
-// brush 2
-{
-( 1461 -719 480 ) ( 1328 -719 480 ) ( 1328 -752 480 ) dsi_textures/cretebase4 -128 0 -180 0.5 0.5 0 0 0
-( 1468 -720 488 ) ( 1468 -752 488 ) ( 1328 -752 488 ) dsi_textures/cretebase4 -128 0 -180 0.5 0.5 0 0 0
-( 1328 -719 480 ) ( 1461 -719 480 ) ( 1468 -720 488 ) dsi_textures/cretebase4 -128 0 -180 0.5 -0.5 0 0 0
-( 1328 -720 488 ) ( 1328 -744 488 ) ( 1328 -744 304 ) dsi_textures/cretebase4 0 0 -180 0.5 -0.5 0 0 0
-( 1328 -752 488 ) ( 1352 -752 488 ) ( 1352 -752 304 ) dsi_textures/cretebase4 -128 0 -180 0.5 -0.5 0 0 0
-( 1468 -752 488 ) ( 1468 -720 488 ) ( 1461 -720 480 ) dsi_textures/cretebase4 0 0 -180 0.5 -0.5 0 0 0
-}
-// brush 3
-{
-( 1288 -888 323 ) ( 1464 -888 323 ) ( 1464 -704 323 ) dsi_textures/cretebase4 -128 0 -180 0.5 0.5 0 0 0
-( 1456 -704 488 ) ( 1456 -888 488 ) ( 1280 -888 488 ) dsi_textures/cretebase4 -128 0 -180 0.5 0.5 0 0 0
-( 1448 -720 488 ) ( 1272 -720 488 ) ( 1272 -720 440 ) dsi_textures/cretebase4 -128 0 -180 0.5 -0.5 0 0 0
-( 1296 -704 488 ) ( 1296 -888 488 ) ( 1296 -888 440 ) dsi_textures/cretebase4 0 0 -180 0.5 -0.5 0 0 0
-( 1168 -752 488 ) ( 1344 -752 488 ) ( 1344 -752 440 ) dsi_textures/cretebase4 -128 0 -180 0.5 -0.5 0 0 0
-( 1328 -768 488 ) ( 1328 -584 488 ) ( 1328 -584 440 ) dsi_textures/cretebase4 0 0 -180 0.5 -0.5 0 0 0
-}
-}
-// entity 352
-{
-"classname" "misc_model"
-"model" "models/mapobjects/morphed_tele/telepad.ase"
-"origin" "1304 344 320"
-}
-// entity 353
-{
-"classname" "misc_model"
-"model" "models/mapobjects/morphed_tele/telepad.ase"
-"origin" "1304 -1128 320"
-}

Deleted: branches/nexuiz-2.0/data/maps/dismal.mapinfo
===================================================================
--- branches/nexuiz-2.0/data/maps/dismal.mapinfo	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/maps/dismal.mapinfo	2009-07-11 14:59:28 UTC (rev 7191)
@@ -1,14 +0,0 @@
-title Dismal
-description Small space map
-author HReaper
-_diameter 4258.493652
-_spawnpoints 20
-has weapons
-type dm 30 20
-type tdm 50 20 2
-type dom 200 20
-type ctf 300 20
-type rune 200 20
-type lms 9 20
-cdtrack 7
-hidden

Deleted: branches/nexuiz-2.0/data/maps/dismal.rtlights
===================================================================
--- branches/nexuiz-2.0/data/maps/dismal.rtlights	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/maps/dismal.rtlights	2009-07-11 14:59:28 UTC (rev 7191)
@@ -1,2 +0,0 @@
-2748.000000 -400.000000 652.000000 1428.571453 0.500000 0.500000 0.500000 0
-76.000000 -396.000000 652.000000 1428.571453 0.500000 0.500000 0.500000 0

Deleted: branches/nexuiz-2.0/data/maps/dismal.waypoints
===================================================================
--- branches/nexuiz-2.0/data/maps/dismal.waypoints	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/maps/dismal.waypoints	2009-07-11 14:59:28 UTC (rev 7191)
@@ -1,30 +0,0 @@
-'1641.2 -1050.0 344.0'
-'1641.2 -1050.0 344.0'
-0
-'1607.8 420.3 344.0'
-'1607.8 420.3 344.0'
-0
-'-578.3 -43.3  10.0'
-'-578.3 -43.3  10.0'
-0
-'-177.1 -112.5   8.0'
-'-177.1 -112.5   8.0'
-0
-'-11.5 166.6   8.0'
-'-11.5 166.6   8.0'
-0
-'-140.6 317.9   8.0'
-'-140.6 317.9   8.0'
-0
-'2771.5 -775.9   8.0'
-'2771.5 -775.9   8.0'
-0
-'2870.0 -1044.6  10.0'
-'2870.0 -1044.6  10.0'
-0
-'2954.2 -588.0   8.0'
-'2954.2 -588.0   8.0'
-0
-'3316.8 -704.1  10.0'
-'3316.8 -704.1  10.0'
-0

Deleted: branches/nexuiz-2.0/data/maps/dismal.waypoints.cache
===================================================================
--- branches/nexuiz-2.0/data/maps/dismal.waypoints.cache	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/maps/dismal.waypoints.cache	2009-07-11 14:59:28 UTC (rev 7191)
@@ -1,271 +0,0 @@
-'3316.8 -704.1  10.1'*'2763.5 -383.0 -21.0'
-'3316.8 -704.1  10.1'*'2954.2 -588.0   8.1'
-'3316.8 -704.1  10.1'*'3120.0 -1160.0  34.0'
-'3316.8 -704.1  10.1'*'2771.5 -775.9   8.1'
-'3316.8 -704.1  10.1'*'2870.0 -1044.6  10.1'
-'3316.8 -704.1  10.1'*'2756.0 -1120.5   8.0'
-'3316.8 -704.1  10.1'*'2544.0 -1268.0  34.0'
-'2954.2 -588.0   8.1'*'2376.0 -1057.0 -21.0'
-'2954.2 -588.0   8.1'*'2763.5 -383.0 -21.0'
-'2954.2 -588.0   8.1'*'2947.0 -384.0  34.0'
-'2954.2 -588.0   8.1'*'2972.6 -375.7  10.0'
-'2954.2 -588.0   8.1'*'2771.5 -775.9   8.1'
-'2954.2 -588.0   8.1'*'3316.8 -704.1  10.1'
-'2954.2 -588.0   8.1'*'2756.0 -1120.5   8.0'
-'2954.2 -588.0   8.1'*'3120.0 -1160.0  34.0'
-'2954.2 -588.0   8.1'*'2544.0 -1268.0  34.0'
-'2954.2 -588.0   8.1'*'2753.2 357.7   8.0'
-'2954.2 -588.0   8.1'*'3120.0 392.0  34.0'
-'2870.0 -1044.6  10.1'*'2376.0 -1057.0 -21.0'
-'2870.0 -1044.6  10.1'*'2763.5 -383.0 -21.0'
-'2870.0 -1044.6  10.1'*'2756.0 -1120.5   8.0'
-'2870.0 -1044.6  10.1'*'3120.0 -1160.0  34.0'
-'2870.0 -1044.6  10.1'*'2771.5 -775.9   8.1'
-'2870.0 -1044.6  10.1'*'2544.0 -1268.0  34.0'
-'2870.0 -1044.6  10.1'*'3316.8 -704.1  10.1'
-'2771.5 -775.9   8.1'*'2763.5 -383.0 -21.0'
-'2771.5 -775.9   8.1'*'2376.0 -1057.0 -21.0'
-'2771.5 -775.9   8.1'*'2954.2 -588.0   8.1'
-'2771.5 -775.9   8.1'*'2870.0 -1044.6  10.1'
-'2771.5 -775.9   8.1'*'2756.0 -1120.5   8.0'
-'2771.5 -775.9   8.1'*'2947.0 -384.0  34.0'
-'2771.5 -775.9   8.1'*'2972.6 -375.7  10.0'
-'2771.5 -775.9   8.1'*'2544.0 -1268.0  34.0'
-'2771.5 -775.9   8.1'*'3316.8 -704.1  10.1'
-'-140.6 317.9   8.1'*'375.5 288.0 -17.0'
-'-140.6 317.9   8.1'*'-12.0 -384.0 -21.0'
-'-140.6 317.9   8.1'*'-11.5 166.6   8.1'
-'-140.6 317.9   8.1'*' 80.2 223.4  10.0'
-'-140.6 317.9   8.1'*'-405.0 356.0  28.0'
-'-140.6 317.9   8.1'*'192.0 520.0  28.0'
-'-140.6 317.9   8.1'*'-578.3 -43.3  10.1'
-'-11.5 166.6   8.1'*' 80.2 223.4  10.0'
-'-11.5 166.6   8.1'*'375.5 288.0 -17.0'
-'-11.5 166.6   8.1'*'-140.6 317.9   8.1'
-'-11.5 166.6   8.1'*'-177.1 -112.5   8.1'
-'-11.5 166.6   8.1'*'192.0 520.0  28.0'
-'-11.5 166.6   8.1'*'-405.0 356.0  28.0'
-'-11.5 166.6   8.1'*'-209.0 -385.0  28.0'
-'-11.5 166.6   8.1'*'-235.6 -414.3  10.0'
-'-177.1 -112.5   8.1'*'-12.0 -384.0 -21.0'
-'-177.1 -112.5   8.1'*'375.5 288.0 -17.0'
-'-177.1 -112.5   8.1'*'-209.0 -385.0  28.0'
-'-177.1 -112.5   8.1'*'-235.6 -414.3  10.0'
-'-177.1 -112.5   8.1'*'-11.5 166.6   8.1'
-'-177.1 -112.5   8.1'*'-578.3 -43.3  10.1'
-'-177.1 -112.5   8.1'*' 80.2 223.4  10.0'
-'-177.1 -112.5   8.1'*'-405.0 356.0  28.0'
-'-177.1 -112.5   8.1'*'192.0 520.0  28.0'
-'-177.1 -112.5   8.1'*' 10.9 -998.3   8.0'
-'-578.3 -43.3  10.1'*'-12.0 -384.0 -21.0'
-'-578.3 -43.3  10.1'*'-177.1 -112.5   8.1'
-'-578.3 -43.3  10.1'*'-405.0 356.0  28.0'
-'-578.3 -43.3  10.1'*'-140.6 317.9   8.1'
-'-578.3 -43.3  10.1'*'192.0 520.0  28.0'
-'1607.8 420.3 344.1'*'1312.0 344.0 373.5'
-'1607.8 420.3 344.1'*'1695.6 -381.5 344.0'
-'1641.2 -1050.0 344.1'*'1312.0 -1124.0 374.0'
-'1641.2 -1050.0 344.1'*'1695.6 -381.5 344.0'
-'-235.6 -414.3  10.0'*'-209.0 -385.0  28.0'
-'-235.6 -414.3  10.0'*'-12.0 -384.0 -21.0'
-'-235.6 -414.3  10.0'*'377.5 -1057.0 -17.0'
-'-235.6 -414.3  10.0'*'375.5 288.0 -17.0'
-'-235.6 -414.3  10.0'*'-177.1 -112.5   8.1'
-'-235.6 -414.3  10.0'*'-11.5 166.6   8.1'
-'-235.6 -414.3  10.0'*' 10.9 -998.3   8.0'
-'-235.6 -414.3  10.0'*' 80.2 223.4  10.0'
-'-235.6 -414.3  10.0'*'-383.0 -1161.0  28.0'
-'-235.6 -414.3  10.0'*'-405.0 356.0  28.0'
-'-235.6 -414.3  10.0'*'191.0 -1278.0  28.0'
-'-235.6 -414.3  10.0'*'192.0 520.0  28.0'
-'1033.5 -384.0 344.0'*'1312.0 -384.0 378.0'
-'1033.5 -384.0 344.0'*'832.0 -728.0 378.0'
-'1033.5 -384.0 344.0'*'832.0 -40.0 378.0'
-'1033.5 -384.0 344.0'*'840.0 -768.0 378.0'
-'1033.5 -384.0 344.0'*'840.0   0.0 378.0'
-'1033.5 -384.0 344.0'*'1695.6 -381.5 344.0'
-'2756.0 -1120.5   8.0'*'2376.0 -1057.0 -21.0'
-'2756.0 -1120.5   8.0'*'2870.0 -1044.6  10.1'
-'2756.0 -1120.5   8.0'*'2544.0 -1268.0  34.0'
-'2756.0 -1120.5   8.0'*'2771.5 -775.9   8.1'
-'2756.0 -1120.5   8.0'*'3120.0 -1160.0  34.0'
-'2756.0 -1120.5   8.0'*'2954.2 -588.0   8.1'
-'2756.0 -1120.5   8.0'*'3316.8 -704.1  10.1'
-'2756.0 -1120.5   8.0'*'2947.0 -384.0  34.0'
-'2756.0 -1120.5   8.0'*'2972.6 -375.7  10.0'
-'2753.2 357.7   8.0'*'2370.0 284.0 -21.0'
-'2753.2 357.7   8.0'*'2544.0 508.0  26.0'
-'2753.2 357.7   8.0'*'3120.0 392.0  34.0'
-'2753.2 357.7   8.0'*'3224.0   0.0  34.0'
-'2753.2 357.7   8.0'*'3282.0   2.0  23.0'
-'2753.2 357.7   8.0'*'2972.6 -375.7  10.0'
-'2753.2 357.7   8.0'*'2947.0 -384.0  34.0'
-'2753.2 357.7   8.0'*'2954.2 -588.0   8.1'
-'-545.0 -770.0  36.0'*'-488.0 -768.0  28.0'
-'-545.0 -770.0  36.0'*'-12.0 -384.0 -21.0'
-'-545.0 -770.0  36.0'*'-383.0 -1161.0  28.0'
-'-545.0 -770.0  36.0'*'191.0 -1278.0  28.0'
-'3282.0   2.0  23.0'*'3224.0   0.0  34.0'
-'3282.0   2.0  23.0'*'2763.5 -383.0 -21.0'
-'3282.0   2.0  23.0'*'3120.0 392.0  34.0'
-'3282.0   2.0  23.0'*'2753.2 357.7   8.0'
-'3282.0   2.0  23.0'*'2544.0 508.0  26.0'
-'2972.6 -375.7  10.0'*'2947.0 -384.0  34.0'
-'2972.6 -375.7  10.0'*'2763.5 -383.0 -21.0'
-'2972.6 -375.7  10.0'*'2370.0 284.0 -21.0'
-'2972.6 -375.7  10.0'*'2376.0 -1057.0 -21.0'
-'2972.6 -375.7  10.0'*'2954.2 -588.0   8.1'
-'2972.6 -375.7  10.0'*'2771.5 -775.9   8.1'
-'2972.6 -375.7  10.0'*'2753.2 357.7   8.0'
-'2972.6 -375.7  10.0'*'2756.0 -1120.5   8.0'
-'2972.6 -375.7  10.0'*'3120.0 392.0  34.0'
-'2972.6 -375.7  10.0'*'3120.0 -1160.0  34.0'
-'2972.6 -375.7  10.0'*'2544.0 508.0  26.0'
-'2972.6 -375.7  10.0'*'2544.0 -1268.0  34.0'
-' 10.9 -998.3   8.0'*'377.5 -1057.0 -17.0'
-' 10.9 -998.3   8.0'*'191.0 -1278.0  28.0'
-' 10.9 -998.3   8.0'*'-383.0 -1161.0  28.0'
-' 10.9 -998.3   8.0'*'-235.6 -414.3  10.0'
-' 10.9 -998.3   8.0'*'-209.0 -385.0  28.0'
-' 10.9 -998.3   8.0'*'-177.1 -112.5   8.1'
-' 80.2 223.4  10.0'*'375.5 288.0 -17.0'
-' 80.2 223.4  10.0'*'-11.5 166.6   8.1'
-' 80.2 223.4  10.0'*'-140.6 317.9   8.1'
-' 80.2 223.4  10.0'*'192.0 520.0  28.0'
-' 80.2 223.4  10.0'*'-177.1 -112.5   8.1'
-' 80.2 223.4  10.0'*'-405.0 356.0  28.0'
-' 80.2 223.4  10.0'*'-209.0 -385.0  28.0'
-' 80.2 223.4  10.0'*'-235.6 -414.3  10.0'
-'257.5 -395.0 -108.0'*'-235.6 -414.3  10.0'
-'-12.0 -384.0 -21.0'*'1033.5 -384.0 344.0'
-'377.5 -1057.0 -17.0'*'2756.0 -1120.5   8.0'
-'375.5 288.0 -17.0'*'2753.2 357.7   8.0'
-'1312.0 344.0 373.5'*'-545.0 -770.0  36.0'
-'1312.0 -1124.0 374.0'*'3282.0   2.0  23.0'
-'2479.5 -395.0 -108.0'*'2972.6 -375.7  10.0'
-'2947.0 -384.0  34.0'*'2972.6 -375.7  10.0'
-'2947.0 -384.0  34.0'*'2763.5 -383.0 -21.0'
-'2947.0 -384.0  34.0'*'2370.0 284.0 -21.0'
-'2947.0 -384.0  34.0'*'2376.0 -1057.0 -21.0'
-'2947.0 -384.0  34.0'*'2954.2 -588.0   8.1'
-'2947.0 -384.0  34.0'*'2771.5 -775.9   8.1'
-'2947.0 -384.0  34.0'*'2756.0 -1120.5   8.0'
-'2947.0 -384.0  34.0'*'2753.2 357.7   8.0'
-'2947.0 -384.0  34.0'*'3120.0 392.0  34.0'
-'2947.0 -384.0  34.0'*'3120.0 -1160.0  34.0'
-'2947.0 -384.0  34.0'*'2544.0 -1268.0  34.0'
-'2947.0 -384.0  34.0'*'2544.0 508.0  26.0'
-'2376.0 -1057.0 -21.0'*' 10.9 -998.3   8.0'
-'2370.0 284.0 -21.0'*' 80.2 223.4  10.0'
-'1695.6 -381.5 344.0'*'1312.0 -384.0 378.0'
-'1695.6 -381.5 344.0'*'1033.5 -384.0 344.0'
-'1695.6 -381.5 344.0'*'1641.2 -1050.0 344.1'
-'1695.6 -381.5 344.0'*'1607.8 420.3 344.1'
-'2544.0 508.0  26.0'*'2370.0 284.0 -21.0'
-'2544.0 508.0  26.0'*'2753.2 357.7   8.0'
-'2544.0 508.0  26.0'*'3120.0 392.0  34.0'
-'2544.0 508.0  26.0'*'3224.0   0.0  34.0'
-'2544.0 508.0  26.0'*'3282.0   2.0  23.0'
-'2544.0 508.0  26.0'*'2947.0 -384.0  34.0'
-'2544.0 508.0  26.0'*'2972.6 -375.7  10.0'
-'3120.0 392.0  34.0'*'2370.0 284.0 -21.0'
-'3120.0 392.0  34.0'*'2763.5 -383.0 -21.0'
-'3120.0 392.0  34.0'*'2753.2 357.7   8.0'
-'3120.0 392.0  34.0'*'3224.0   0.0  34.0'
-'3120.0 392.0  34.0'*'3282.0   2.0  23.0'
-'3120.0 392.0  34.0'*'2972.6 -375.7  10.0'
-'3120.0 392.0  34.0'*'2947.0 -384.0  34.0'
-'3120.0 392.0  34.0'*'2954.2 -588.0   8.1'
-'3224.0   0.0  34.0'*'3282.0   2.0  23.0'
-'3224.0   0.0  34.0'*'2763.5 -383.0 -21.0'
-'3224.0   0.0  34.0'*'3120.0 392.0  34.0'
-'3224.0   0.0  34.0'*'2947.0 -384.0  34.0'
-'3224.0   0.0  34.0'*'2753.2 357.7   8.0'
-'3224.0   0.0  34.0'*'2544.0 508.0  26.0'
-'3120.0 -1160.0  34.0'*'2376.0 -1057.0 -21.0'
-'3120.0 -1160.0  34.0'*'2763.5 -383.0 -21.0'
-'3120.0 -1160.0  34.0'*'2870.0 -1044.6  10.1'
-'3120.0 -1160.0  34.0'*'2756.0 -1120.5   8.0'
-'3120.0 -1160.0  34.0'*'3316.8 -704.1  10.1'
-'3120.0 -1160.0  34.0'*'2954.2 -588.0   8.1'
-'3120.0 -1160.0  34.0'*'2947.0 -384.0  34.0'
-'3120.0 -1160.0  34.0'*'2972.6 -375.7  10.0'
-'2544.0 -1268.0  34.0'*'2376.0 -1057.0 -21.0'
-'2544.0 -1268.0  34.0'*'2756.0 -1120.5   8.0'
-'2544.0 -1268.0  34.0'*'2870.0 -1044.6  10.1'
-'2544.0 -1268.0  34.0'*'2771.5 -775.9   8.1'
-'2544.0 -1268.0  34.0'*'3120.0 -1160.0  34.0'
-'2544.0 -1268.0  34.0'*'2954.2 -588.0   8.1'
-'2544.0 -1268.0  34.0'*'3316.8 -704.1  10.1'
-'2544.0 -1268.0  34.0'*'2947.0 -384.0  34.0'
-'2544.0 -1268.0  34.0'*'2972.6 -375.7  10.0'
-'1312.0 -384.0 378.0'*'1033.5 -384.0 344.0'
-'1312.0 -384.0 378.0'*'1695.6 -381.5 344.0'
-'1312.0 -384.0 378.0'*'832.0 -728.0 378.0'
-'1312.0 -384.0 378.0'*'832.0 -40.0 378.0'
-'1312.0 -384.0 378.0'*'840.0 -768.0 378.0'
-'1312.0 -384.0 378.0'*'840.0   0.0 378.0'
-'840.0 -768.0 378.0'*'832.0 -728.0 378.0'
-'840.0 -768.0 378.0'*'1033.5 -384.0 344.0'
-'840.0 -768.0 378.0'*'1312.0 -384.0 378.0'
-'832.0 -728.0 378.0'*'840.0 -768.0 378.0'
-'832.0 -728.0 378.0'*'1033.5 -384.0 344.0'
-'832.0 -728.0 378.0'*'1312.0 -384.0 378.0'
-'832.0 -40.0 378.0'*'840.0   0.0 378.0'
-'832.0 -40.0 378.0'*'1033.5 -384.0 344.0'
-'832.0 -40.0 378.0'*'1312.0 -384.0 378.0'
-'840.0   0.0 378.0'*'832.0 -40.0 378.0'
-'840.0   0.0 378.0'*'1033.5 -384.0 344.0'
-'840.0   0.0 378.0'*'1312.0 -384.0 378.0'
-'191.0 -1278.0  28.0'*'377.5 -1057.0 -17.0'
-'191.0 -1278.0  28.0'*' 10.9 -998.3   8.0'
-'191.0 -1278.0  28.0'*'-383.0 -1161.0  28.0'
-'191.0 -1278.0  28.0'*'-488.0 -768.0  28.0'
-'191.0 -1278.0  28.0'*'-545.0 -770.0  36.0'
-'191.0 -1278.0  28.0'*'-235.6 -414.3  10.0'
-'191.0 -1278.0  28.0'*'-209.0 -385.0  28.0'
-'192.0 520.0  28.0'*'375.5 288.0 -17.0'
-'192.0 520.0  28.0'*' 80.2 223.4  10.0'
-'192.0 520.0  28.0'*'-140.6 317.9   8.1'
-'192.0 520.0  28.0'*'-11.5 166.6   8.1'
-'192.0 520.0  28.0'*'-405.0 356.0  28.0'
-'192.0 520.0  28.0'*'-177.1 -112.5   8.1'
-'192.0 520.0  28.0'*'-578.3 -43.3  10.1'
-'192.0 520.0  28.0'*'-209.0 -385.0  28.0'
-'192.0 520.0  28.0'*'-235.6 -414.3  10.0'
-'-383.0 -1161.0  28.0'*'377.5 -1057.0 -17.0'
-'-383.0 -1161.0  28.0'*'-12.0 -384.0 -21.0'
-'-383.0 -1161.0  28.0'*'-488.0 -768.0  28.0'
-'-383.0 -1161.0  28.0'*'-545.0 -770.0  36.0'
-'-383.0 -1161.0  28.0'*' 10.9 -998.3   8.0'
-'-383.0 -1161.0  28.0'*'191.0 -1278.0  28.0'
-'-383.0 -1161.0  28.0'*'-235.6 -414.3  10.0'
-'-383.0 -1161.0  28.0'*'-209.0 -385.0  28.0'
-'-209.0 -385.0  28.0'*'-235.6 -414.3  10.0'
-'-209.0 -385.0  28.0'*'-12.0 -384.0 -21.0'
-'-209.0 -385.0  28.0'*'377.5 -1057.0 -17.0'
-'-209.0 -385.0  28.0'*'375.5 288.0 -17.0'
-'-209.0 -385.0  28.0'*'-177.1 -112.5   8.1'
-'-209.0 -385.0  28.0'*'-11.5 166.6   8.1'
-'-209.0 -385.0  28.0'*' 10.9 -998.3   8.0'
-'-209.0 -385.0  28.0'*' 80.2 223.4  10.0'
-'-209.0 -385.0  28.0'*'-405.0 356.0  28.0'
-'-209.0 -385.0  28.0'*'-383.0 -1161.0  28.0'
-'-209.0 -385.0  28.0'*'191.0 -1278.0  28.0'
-'-209.0 -385.0  28.0'*'192.0 520.0  28.0'
-'-488.0 -768.0  28.0'*'-545.0 -770.0  36.0'
-'-488.0 -768.0  28.0'*'-12.0 -384.0 -21.0'
-'-488.0 -768.0  28.0'*'-383.0 -1161.0  28.0'
-'-488.0 -768.0  28.0'*'-209.0 -385.0  28.0'
-'-488.0 -768.0  28.0'*'191.0 -1278.0  28.0'
-'-405.0 356.0  28.0'*'375.5 288.0 -17.0'
-'-405.0 356.0  28.0'*'-12.0 -384.0 -21.0'
-'-405.0 356.0  28.0'*'-140.6 317.9   8.1'
-'-405.0 356.0  28.0'*'-578.3 -43.3  10.1'
-'-405.0 356.0  28.0'*'-11.5 166.6   8.1'
-'-405.0 356.0  28.0'*' 80.2 223.4  10.0'
-'-405.0 356.0  28.0'*'-177.1 -112.5   8.1'
-'-405.0 356.0  28.0'*'192.0 520.0  28.0'
-'-405.0 356.0  28.0'*'-209.0 -385.0  28.0'
-'-405.0 356.0  28.0'*'-235.6 -414.3  10.0'
-'2763.5 -383.0 -21.0'*'1695.6 -381.5 344.0'

Modified: branches/nexuiz-2.0/data/models/player/carni.zym
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/models/player/carni_lod1.zym (from rev 7188, trunk/data/models/player/carni_lod1.zym)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/models/player/carni_lod1.zym_0.skin (from rev 7188, trunk/data/models/player/carni_lod1.zym_0.skin)
===================================================================
--- branches/nexuiz-2.0/data/models/player/carni_lod1.zym_0.skin	                        (rev 0)
+++ branches/nexuiz-2.0/data/models/player/carni_lod1.zym_0.skin	2009-07-11 14:59:28 UTC (rev 7191)
@@ -0,0 +1 @@
+carni2,carni
\ No newline at end of file

Copied: branches/nexuiz-2.0/data/models/player/carni_lod1.zym_1.skin (from rev 7188, trunk/data/models/player/carni_lod1.zym_1.skin)
===================================================================
--- branches/nexuiz-2.0/data/models/player/carni_lod1.zym_1.skin	                        (rev 0)
+++ branches/nexuiz-2.0/data/models/player/carni_lod1.zym_1.skin	2009-07-11 14:59:28 UTC (rev 7191)
@@ -0,0 +1 @@
+carni2,carniarmor

Copied: branches/nexuiz-2.0/data/models/player/carni_lod2.zym (from rev 7188, trunk/data/models/player/carni_lod2.zym)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/models/player/carni_lod2.zym_0.skin (from rev 7188, trunk/data/models/player/carni_lod2.zym_0.skin)
===================================================================
--- branches/nexuiz-2.0/data/models/player/carni_lod2.zym_0.skin	                        (rev 0)
+++ branches/nexuiz-2.0/data/models/player/carni_lod2.zym_0.skin	2009-07-11 14:59:28 UTC (rev 7191)
@@ -0,0 +1 @@
+carni2,carni
\ No newline at end of file

Copied: branches/nexuiz-2.0/data/models/player/carni_lod2.zym_1.skin (from rev 7188, trunk/data/models/player/carni_lod2.zym_1.skin)
===================================================================
--- branches/nexuiz-2.0/data/models/player/carni_lod2.zym_1.skin	                        (rev 0)
+++ branches/nexuiz-2.0/data/models/player/carni_lod2.zym_1.skin	2009-07-11 14:59:28 UTC (rev 7191)
@@ -0,0 +1 @@
+carni2,carniarmor

Copied: branches/nexuiz-2.0/data/models/player/crash_lod1.zym (from rev 7188, trunk/data/models/player/crash_lod1.zym)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/models/player/crash_lod1.zym_0.skin (from rev 7188, trunk/data/models/player/crash_lod1.zym_0.skin)
===================================================================
--- branches/nexuiz-2.0/data/models/player/crash_lod1.zym_0.skin	                        (rev 0)
+++ branches/nexuiz-2.0/data/models/player/crash_lod1.zym_0.skin	2009-07-11 14:59:28 UTC (rev 7191)
@@ -0,0 +1 @@
+mechanical12,quark

Copied: branches/nexuiz-2.0/data/models/player/crash_lod2.zym (from rev 7188, trunk/data/models/player/crash_lod2.zym)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/models/player/crash_lod2.zym_0.skin (from rev 7188, trunk/data/models/player/crash_lod2.zym_0.skin)
===================================================================
--- branches/nexuiz-2.0/data/models/player/crash_lod2.zym_0.skin	                        (rev 0)
+++ branches/nexuiz-2.0/data/models/player/crash_lod2.zym_0.skin	2009-07-11 14:59:28 UTC (rev 7191)
@@ -0,0 +1 @@
+mechanical12,quark

Modified: branches/nexuiz-2.0/data/models/player/grunt.zym
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/models/player/grunt_lod1.zym (from rev 7188, trunk/data/models/player/grunt_lod1.zym)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/models/player/grunt_lod1.zym_0.skin (from rev 7188, trunk/data/models/player/grunt_lod1.zym_0.skin)
===================================================================
--- branches/nexuiz-2.0/data/models/player/grunt_lod1.zym_0.skin	                        (rev 0)
+++ branches/nexuiz-2.0/data/models/player/grunt_lod1.zym_0.skin	2009-07-11 14:59:28 UTC (rev 7191)
@@ -0,0 +1 @@
+grunt,grunt
\ No newline at end of file

Copied: branches/nexuiz-2.0/data/models/player/grunt_lod2.zym (from rev 7188, trunk/data/models/player/grunt_lod2.zym)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/models/player/grunt_lod2.zym_0.skin (from rev 7188, trunk/data/models/player/grunt_lod2.zym_0.skin)
===================================================================
--- branches/nexuiz-2.0/data/models/player/grunt_lod2.zym_0.skin	                        (rev 0)
+++ branches/nexuiz-2.0/data/models/player/grunt_lod2.zym_0.skin	2009-07-11 14:59:28 UTC (rev 7191)
@@ -0,0 +1 @@
+grunt,grunt
\ No newline at end of file

Modified: branches/nexuiz-2.0/data/models/player/headhunter.zym
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/models/player/headhunter_lod1.zym (from rev 7188, trunk/data/models/player/headhunter_lod1.zym)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/models/player/headhunter_lod1.zym_0.skin (from rev 7188, trunk/data/models/player/headhunter_lod1.zym_0.skin)
===================================================================
--- branches/nexuiz-2.0/data/models/player/headhunter_lod1.zym_0.skin	                        (rev 0)
+++ branches/nexuiz-2.0/data/models/player/headhunter_lod1.zym_0.skin	2009-07-11 14:59:28 UTC (rev 7191)
@@ -0,0 +1 @@
+headhunter,headhunter
\ No newline at end of file

Copied: branches/nexuiz-2.0/data/models/player/headhunter_lod2.zym (from rev 7188, trunk/data/models/player/headhunter_lod2.zym)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/models/player/headhunter_lod2.zym_0.skin (from rev 7188, trunk/data/models/player/headhunter_lod2.zym_0.skin)
===================================================================
--- branches/nexuiz-2.0/data/models/player/headhunter_lod2.zym_0.skin	                        (rev 0)
+++ branches/nexuiz-2.0/data/models/player/headhunter_lod2.zym_0.skin	2009-07-11 14:59:28 UTC (rev 7191)
@@ -0,0 +1 @@
+headhunter,headhunter
\ No newline at end of file

Modified: branches/nexuiz-2.0/data/models/player/insurrectionist.zym
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/models/player/insurrectionist_lod1.zym (from rev 7188, trunk/data/models/player/insurrectionist_lod1.zym)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/models/player/insurrectionist_lod1.zym_0.skin (from rev 7188, trunk/data/models/player/insurrectionist_lod1.zym_0.skin)
===================================================================
--- branches/nexuiz-2.0/data/models/player/insurrectionist_lod1.zym_0.skin	                        (rev 0)
+++ branches/nexuiz-2.0/data/models/player/insurrectionist_lod1.zym_0.skin	2009-07-11 14:59:28 UTC (rev 7191)
@@ -0,0 +1 @@
+insurrectionist,insurrectionist
\ No newline at end of file

Copied: branches/nexuiz-2.0/data/models/player/insurrectionist_lod2.zym (from rev 7188, trunk/data/models/player/insurrectionist_lod2.zym)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/models/player/insurrectionist_lod2.zym_0.skin (from rev 7188, trunk/data/models/player/insurrectionist_lod2.zym_0.skin)
===================================================================
--- branches/nexuiz-2.0/data/models/player/insurrectionist_lod2.zym_0.skin	                        (rev 0)
+++ branches/nexuiz-2.0/data/models/player/insurrectionist_lod2.zym_0.skin	2009-07-11 14:59:28 UTC (rev 7191)
@@ -0,0 +1 @@
+insurrectionist,insurrectionist
\ No newline at end of file

Modified: branches/nexuiz-2.0/data/models/player/jeandarc.zym
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/models/player/jeandarc_lod1.zym (from rev 7188, trunk/data/models/player/jeandarc_lod1.zym)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/models/player/jeandarc_lod1.zym_0.skin (from rev 7188, trunk/data/models/player/jeandarc_lod1.zym_0.skin)
===================================================================
--- branches/nexuiz-2.0/data/models/player/jeandarc_lod1.zym_0.skin	                        (rev 0)
+++ branches/nexuiz-2.0/data/models/player/jeandarc_lod1.zym_0.skin	2009-07-11 14:59:28 UTC (rev 7191)
@@ -0,0 +1 @@
+jeandarc1,heroine

Copied: branches/nexuiz-2.0/data/models/player/jeandarc_lod2.zym (from rev 7188, trunk/data/models/player/jeandarc_lod2.zym)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/models/player/jeandarc_lod2.zym_0.skin (from rev 7188, trunk/data/models/player/jeandarc_lod2.zym_0.skin)
===================================================================
--- branches/nexuiz-2.0/data/models/player/jeandarc_lod2.zym_0.skin	                        (rev 0)
+++ branches/nexuiz-2.0/data/models/player/jeandarc_lod2.zym_0.skin	2009-07-11 14:59:28 UTC (rev 7191)
@@ -0,0 +1 @@
+jeandarc1,heroine

Modified: branches/nexuiz-2.0/data/models/player/lurk.zym
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/models/player/lurk_lod1.zym (from rev 7188, trunk/data/models/player/lurk_lod1.zym)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/models/player/lurk_lod1.zym_0.skin (from rev 7188, trunk/data/models/player/lurk_lod1.zym_0.skin)
===================================================================
--- branches/nexuiz-2.0/data/models/player/lurk_lod1.zym_0.skin	                        (rev 0)
+++ branches/nexuiz-2.0/data/models/player/lurk_lod1.zym_0.skin	2009-07-11 14:59:28 UTC (rev 7191)
@@ -0,0 +1 @@
+lurk,lurk
\ No newline at end of file

Copied: branches/nexuiz-2.0/data/models/player/lurk_lod1.zym_1.skin (from rev 7188, trunk/data/models/player/lurk_lod1.zym_1.skin)
===================================================================
--- branches/nexuiz-2.0/data/models/player/lurk_lod1.zym_1.skin	                        (rev 0)
+++ branches/nexuiz-2.0/data/models/player/lurk_lod1.zym_1.skin	2009-07-11 14:59:28 UTC (rev 7191)
@@ -0,0 +1 @@
+lurk,reptile
\ No newline at end of file

Copied: branches/nexuiz-2.0/data/models/player/lurk_lod2.zym (from rev 7188, trunk/data/models/player/lurk_lod2.zym)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/models/player/lurk_lod2.zym_0.skin (from rev 7188, trunk/data/models/player/lurk_lod2.zym_0.skin)
===================================================================
--- branches/nexuiz-2.0/data/models/player/lurk_lod2.zym_0.skin	                        (rev 0)
+++ branches/nexuiz-2.0/data/models/player/lurk_lod2.zym_0.skin	2009-07-11 14:59:28 UTC (rev 7191)
@@ -0,0 +1 @@
+lurk,lurk
\ No newline at end of file

Copied: branches/nexuiz-2.0/data/models/player/lurk_lod2.zym_1.skin (from rev 7188, trunk/data/models/player/lurk_lod2.zym_1.skin)
===================================================================
--- branches/nexuiz-2.0/data/models/player/lurk_lod2.zym_1.skin	                        (rev 0)
+++ branches/nexuiz-2.0/data/models/player/lurk_lod2.zym_1.skin	2009-07-11 14:59:28 UTC (rev 7191)
@@ -0,0 +1 @@
+lurk,reptile
\ No newline at end of file

Modified: branches/nexuiz-2.0/data/models/player/lycanthrope.zym
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/models/player/lycanthrope_lod1.zym (from rev 7188, trunk/data/models/player/lycanthrope_lod1.zym)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/models/player/lycanthrope_lod1.zym_0.skin (from rev 7188, trunk/data/models/player/lycanthrope_lod1.zym_0.skin)
===================================================================
--- branches/nexuiz-2.0/data/models/player/lycanthrope_lod1.zym_0.skin	                        (rev 0)
+++ branches/nexuiz-2.0/data/models/player/lycanthrope_lod1.zym_0.skin	2009-07-11 14:59:28 UTC (rev 7191)
@@ -0,0 +1 @@
+lycanthrope1,lycanthrope

Copied: branches/nexuiz-2.0/data/models/player/lycanthrope_lod2.zym (from rev 7188, trunk/data/models/player/lycanthrope_lod2.zym)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/models/player/lycanthrope_lod2.zym_0.skin (from rev 7188, trunk/data/models/player/lycanthrope_lod2.zym_0.skin)
===================================================================
--- branches/nexuiz-2.0/data/models/player/lycanthrope_lod2.zym_0.skin	                        (rev 0)
+++ branches/nexuiz-2.0/data/models/player/lycanthrope_lod2.zym_0.skin	2009-07-11 14:59:28 UTC (rev 7191)
@@ -0,0 +1 @@
+lycanthrope1,lycanthrope

Modified: branches/nexuiz-2.0/data/models/player/marine.zym
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/models/player/marine_lod1.zym (from rev 7188, trunk/data/models/player/marine_lod1.zym)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/models/player/marine_lod1.zym_0.skin (from rev 7188, trunk/data/models/player/marine_lod1.zym_0.skin)
===================================================================
--- branches/nexuiz-2.0/data/models/player/marine_lod1.zym_0.skin	                        (rev 0)
+++ branches/nexuiz-2.0/data/models/player/marine_lod1.zym_0.skin	2009-07-11 14:59:28 UTC (rev 7191)
@@ -0,0 +1 @@
+marine,marine
\ No newline at end of file

Copied: branches/nexuiz-2.0/data/models/player/marine_lod2.zym (from rev 7188, trunk/data/models/player/marine_lod2.zym)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/models/player/marine_lod2.zym_0.skin (from rev 7188, trunk/data/models/player/marine_lod2.zym_0.skin)
===================================================================
--- branches/nexuiz-2.0/data/models/player/marine_lod2.zym_0.skin	                        (rev 0)
+++ branches/nexuiz-2.0/data/models/player/marine_lod2.zym_0.skin	2009-07-11 14:59:28 UTC (rev 7191)
@@ -0,0 +1 @@
+marine,marine
\ No newline at end of file

Modified: branches/nexuiz-2.0/data/models/player/nexus.zym
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/models/player/nexus_lod1.zym (from rev 7188, trunk/data/models/player/nexus_lod1.zym)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/models/player/nexus_lod1.zym_0.skin (from rev 7188, trunk/data/models/player/nexus_lod1.zym_0.skin)
===================================================================
--- branches/nexuiz-2.0/data/models/player/nexus_lod1.zym_0.skin	                        (rev 0)
+++ branches/nexuiz-2.0/data/models/player/nexus_lod1.zym_0.skin	2009-07-11 14:59:28 UTC (rev 7191)
@@ -0,0 +1 @@
+nexus,nexus
\ No newline at end of file

Copied: branches/nexuiz-2.0/data/models/player/nexus_lod1.zym_1.skin (from rev 7188, trunk/data/models/player/nexus_lod1.zym_1.skin)
===================================================================
--- branches/nexuiz-2.0/data/models/player/nexus_lod1.zym_1.skin	                        (rev 0)
+++ branches/nexuiz-2.0/data/models/player/nexus_lod1.zym_1.skin	2009-07-11 14:59:28 UTC (rev 7191)
@@ -0,0 +1 @@
+nexus,mulder

Copied: branches/nexuiz-2.0/data/models/player/nexus_lod1.zym_2.skin (from rev 7188, trunk/data/models/player/nexus_lod1.zym_2.skin)
===================================================================
--- branches/nexuiz-2.0/data/models/player/nexus_lod1.zym_2.skin	                        (rev 0)
+++ branches/nexuiz-2.0/data/models/player/nexus_lod1.zym_2.skin	2009-07-11 14:59:28 UTC (rev 7191)
@@ -0,0 +1 @@
+nexus,xolar

Copied: branches/nexuiz-2.0/data/models/player/nexus_lod1.zym_3.skin (from rev 7188, trunk/data/models/player/nexus_lod1.zym_3.skin)
===================================================================
--- branches/nexuiz-2.0/data/models/player/nexus_lod1.zym_3.skin	                        (rev 0)
+++ branches/nexuiz-2.0/data/models/player/nexus_lod1.zym_3.skin	2009-07-11 14:59:28 UTC (rev 7191)
@@ -0,0 +1 @@
+nexus,fbgreen

Copied: branches/nexuiz-2.0/data/models/player/nexus_lod1.zym_4.skin (from rev 7188, trunk/data/models/player/nexus_lod1.zym_4.skin)
===================================================================
--- branches/nexuiz-2.0/data/models/player/nexus_lod1.zym_4.skin	                        (rev 0)
+++ branches/nexuiz-2.0/data/models/player/nexus_lod1.zym_4.skin	2009-07-11 14:59:28 UTC (rev 7191)
@@ -0,0 +1 @@
+nexus,fbred

Copied: branches/nexuiz-2.0/data/models/player/nexus_lod1.zym_5.skin (from rev 7188, trunk/data/models/player/nexus_lod1.zym_5.skin)
===================================================================
--- branches/nexuiz-2.0/data/models/player/nexus_lod1.zym_5.skin	                        (rev 0)
+++ branches/nexuiz-2.0/data/models/player/nexus_lod1.zym_5.skin	2009-07-11 14:59:28 UTC (rev 7191)
@@ -0,0 +1 @@
+nexus,fborange

Copied: branches/nexuiz-2.0/data/models/player/nexus_lod1.zym_6.skin (from rev 7188, trunk/data/models/player/nexus_lod1.zym_6.skin)
===================================================================
--- branches/nexuiz-2.0/data/models/player/nexus_lod1.zym_6.skin	                        (rev 0)
+++ branches/nexuiz-2.0/data/models/player/nexus_lod1.zym_6.skin	2009-07-11 14:59:28 UTC (rev 7191)
@@ -0,0 +1 @@
+nexus,fbcolored

Copied: branches/nexuiz-2.0/data/models/player/nexus_lod2.zym (from rev 7188, trunk/data/models/player/nexus_lod2.zym)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/models/player/nexus_lod2.zym_0.skin (from rev 7188, trunk/data/models/player/nexus_lod2.zym_0.skin)
===================================================================
--- branches/nexuiz-2.0/data/models/player/nexus_lod2.zym_0.skin	                        (rev 0)
+++ branches/nexuiz-2.0/data/models/player/nexus_lod2.zym_0.skin	2009-07-11 14:59:28 UTC (rev 7191)
@@ -0,0 +1 @@
+nexus,nexus
\ No newline at end of file

Copied: branches/nexuiz-2.0/data/models/player/nexus_lod2.zym_1.skin (from rev 7188, trunk/data/models/player/nexus_lod2.zym_1.skin)
===================================================================
--- branches/nexuiz-2.0/data/models/player/nexus_lod2.zym_1.skin	                        (rev 0)
+++ branches/nexuiz-2.0/data/models/player/nexus_lod2.zym_1.skin	2009-07-11 14:59:28 UTC (rev 7191)
@@ -0,0 +1 @@
+nexus,mulder

Copied: branches/nexuiz-2.0/data/models/player/nexus_lod2.zym_2.skin (from rev 7188, trunk/data/models/player/nexus_lod2.zym_2.skin)
===================================================================
--- branches/nexuiz-2.0/data/models/player/nexus_lod2.zym_2.skin	                        (rev 0)
+++ branches/nexuiz-2.0/data/models/player/nexus_lod2.zym_2.skin	2009-07-11 14:59:28 UTC (rev 7191)
@@ -0,0 +1 @@
+nexus,xolar

Copied: branches/nexuiz-2.0/data/models/player/nexus_lod2.zym_3.skin (from rev 7188, trunk/data/models/player/nexus_lod2.zym_3.skin)
===================================================================
--- branches/nexuiz-2.0/data/models/player/nexus_lod2.zym_3.skin	                        (rev 0)
+++ branches/nexuiz-2.0/data/models/player/nexus_lod2.zym_3.skin	2009-07-11 14:59:28 UTC (rev 7191)
@@ -0,0 +1 @@
+nexus,fbgreen

Copied: branches/nexuiz-2.0/data/models/player/nexus_lod2.zym_4.skin (from rev 7188, trunk/data/models/player/nexus_lod2.zym_4.skin)
===================================================================
--- branches/nexuiz-2.0/data/models/player/nexus_lod2.zym_4.skin	                        (rev 0)
+++ branches/nexuiz-2.0/data/models/player/nexus_lod2.zym_4.skin	2009-07-11 14:59:28 UTC (rev 7191)
@@ -0,0 +1 @@
+nexus,fbred

Copied: branches/nexuiz-2.0/data/models/player/nexus_lod2.zym_5.skin (from rev 7188, trunk/data/models/player/nexus_lod2.zym_5.skin)
===================================================================
--- branches/nexuiz-2.0/data/models/player/nexus_lod2.zym_5.skin	                        (rev 0)
+++ branches/nexuiz-2.0/data/models/player/nexus_lod2.zym_5.skin	2009-07-11 14:59:28 UTC (rev 7191)
@@ -0,0 +1 @@
+nexus,fborange

Copied: branches/nexuiz-2.0/data/models/player/nexus_lod2.zym_6.skin (from rev 7188, trunk/data/models/player/nexus_lod2.zym_6.skin)
===================================================================
--- branches/nexuiz-2.0/data/models/player/nexus_lod2.zym_6.skin	                        (rev 0)
+++ branches/nexuiz-2.0/data/models/player/nexus_lod2.zym_6.skin	2009-07-11 14:59:28 UTC (rev 7191)
@@ -0,0 +1 @@
+nexus,fbcolored

Modified: branches/nexuiz-2.0/data/models/player/pyria.zym
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/models/player/pyria_lod1.zym (from rev 7188, trunk/data/models/player/pyria_lod1.zym)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/models/player/pyria_lod1.zym_0.skin (from rev 7188, trunk/data/models/player/pyria_lod1.zym_0.skin)
===================================================================
--- branches/nexuiz-2.0/data/models/player/pyria_lod1.zym_0.skin	                        (rev 0)
+++ branches/nexuiz-2.0/data/models/player/pyria_lod1.zym_0.skin	2009-07-11 14:59:28 UTC (rev 7191)
@@ -0,0 +1 @@
+pyria,pyria
\ No newline at end of file

Copied: branches/nexuiz-2.0/data/models/player/pyria_lod2.zym (from rev 7188, trunk/data/models/player/pyria_lod2.zym)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/models/player/pyria_lod2.zym_0.skin (from rev 7188, trunk/data/models/player/pyria_lod2.zym_0.skin)
===================================================================
--- branches/nexuiz-2.0/data/models/player/pyria_lod2.zym_0.skin	                        (rev 0)
+++ branches/nexuiz-2.0/data/models/player/pyria_lod2.zym_0.skin	2009-07-11 14:59:28 UTC (rev 7191)
@@ -0,0 +1 @@
+pyria,pyria
\ No newline at end of file

Modified: branches/nexuiz-2.0/data/models/player/shock.zym
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/models/player/shock_lod1.zym (from rev 7188, trunk/data/models/player/shock_lod1.zym)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/models/player/shock_lod1.zym_0.skin (from rev 7188, trunk/data/models/player/shock_lod1.zym_0.skin)
===================================================================
--- branches/nexuiz-2.0/data/models/player/shock_lod1.zym_0.skin	                        (rev 0)
+++ branches/nexuiz-2.0/data/models/player/shock_lod1.zym_0.skin	2009-07-11 14:59:28 UTC (rev 7191)
@@ -0,0 +1 @@
+shock,shock
\ No newline at end of file

Copied: branches/nexuiz-2.0/data/models/player/shock_lod2.zym (from rev 7188, trunk/data/models/player/shock_lod2.zym)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/models/player/shock_lod2.zym_0.skin (from rev 7188, trunk/data/models/player/shock_lod2.zym_0.skin)
===================================================================
--- branches/nexuiz-2.0/data/models/player/shock_lod2.zym_0.skin	                        (rev 0)
+++ branches/nexuiz-2.0/data/models/player/shock_lod2.zym_0.skin	2009-07-11 14:59:28 UTC (rev 7191)
@@ -0,0 +1 @@
+shock,shock
\ No newline at end of file

Modified: branches/nexuiz-2.0/data/models/player/skadi.zym
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/models/player/skadi_lod1.zym (from rev 7188, trunk/data/models/player/skadi_lod1.zym)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/models/player/skadi_lod1.zym_0.skin (from rev 7188, trunk/data/models/player/skadi_lod1.zym_0.skin)
===================================================================
--- branches/nexuiz-2.0/data/models/player/skadi_lod1.zym_0.skin	                        (rev 0)
+++ branches/nexuiz-2.0/data/models/player/skadi_lod1.zym_0.skin	2009-07-11 14:59:28 UTC (rev 7191)
@@ -0,0 +1 @@
+femaleshock,skadi
\ No newline at end of file

Copied: branches/nexuiz-2.0/data/models/player/skadi_lod2.zym (from rev 7188, trunk/data/models/player/skadi_lod2.zym)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/models/player/skadi_lod2.zym_0.skin (from rev 7188, trunk/data/models/player/skadi_lod2.zym_0.skin)
===================================================================
--- branches/nexuiz-2.0/data/models/player/skadi_lod2.zym_0.skin	                        (rev 0)
+++ branches/nexuiz-2.0/data/models/player/skadi_lod2.zym_0.skin	2009-07-11 14:59:28 UTC (rev 7191)
@@ -0,0 +1 @@
+femaleshock,skadi
\ No newline at end of file

Modified: branches/nexuiz-2.0/data/models/player/specop.zym
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/models/player/specop_lod1.zym (from rev 7188, trunk/data/models/player/specop_lod1.zym)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/models/player/specop_lod1.zym_0.skin (from rev 7188, trunk/data/models/player/specop_lod1.zym_0.skin)
===================================================================
--- branches/nexuiz-2.0/data/models/player/specop_lod1.zym_0.skin	                        (rev 0)
+++ branches/nexuiz-2.0/data/models/player/specop_lod1.zym_0.skin	2009-07-11 14:59:28 UTC (rev 7191)
@@ -0,0 +1 @@
+specop,specop
\ No newline at end of file

Copied: branches/nexuiz-2.0/data/models/player/specop_lod2.zym (from rev 7188, trunk/data/models/player/specop_lod2.zym)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/models/player/specop_lod2.zym_0.skin (from rev 7188, trunk/data/models/player/specop_lod2.zym_0.skin)
===================================================================
--- branches/nexuiz-2.0/data/models/player/specop_lod2.zym_0.skin	                        (rev 0)
+++ branches/nexuiz-2.0/data/models/player/specop_lod2.zym_0.skin	2009-07-11 14:59:28 UTC (rev 7191)
@@ -0,0 +1 @@
+specop,specop
\ No newline at end of file

Modified: branches/nexuiz-2.0/data/models/player/visitant.zym
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/models/player/visitant_lod1.zym (from rev 7188, trunk/data/models/player/visitant_lod1.zym)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/models/player/visitant_lod1.zym_0.skin (from rev 7188, trunk/data/models/player/visitant_lod1.zym_0.skin)
===================================================================
--- branches/nexuiz-2.0/data/models/player/visitant_lod1.zym_0.skin	                        (rev 0)
+++ branches/nexuiz-2.0/data/models/player/visitant_lod1.zym_0.skin	2009-07-11 14:59:28 UTC (rev 7191)
@@ -0,0 +1 @@
+visitant,fricka

Copied: branches/nexuiz-2.0/data/models/player/visitant_lod2.zym (from rev 7188, trunk/data/models/player/visitant_lod2.zym)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/models/player/visitant_lod2.zym_0.skin (from rev 7188, trunk/data/models/player/visitant_lod2.zym_0.skin)
===================================================================
--- branches/nexuiz-2.0/data/models/player/visitant_lod2.zym_0.skin	                        (rev 0)
+++ branches/nexuiz-2.0/data/models/player/visitant_lod2.zym_0.skin	2009-07-11 14:59:28 UTC (rev 7191)
@@ -0,0 +1 @@
+visitant,fricka

Modified: branches/nexuiz-2.0/data/models/sprites/as-defend_frame0.tga
===================================================================
(Binary files differ)

Modified: branches/nexuiz-2.0/data/models/sprites/as-destroy_frame0.tga
===================================================================
(Binary files differ)

Modified: branches/nexuiz-2.0/data/models/sprites/as-push_frame0.tga
===================================================================
(Binary files differ)

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

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

Modified: branches/nexuiz-2.0/data/models/sprites/dom-blue_frame0.tga
===================================================================
(Binary files differ)

Modified: branches/nexuiz-2.0/data/models/sprites/dom-neut_frame0.tga
===================================================================
(Binary files differ)

Modified: branches/nexuiz-2.0/data/models/sprites/dom-pink_frame0.tga
===================================================================
(Binary files differ)

Modified: branches/nexuiz-2.0/data/models/sprites/dom-red_frame0.tga
===================================================================
(Binary files differ)

Modified: branches/nexuiz-2.0/data/models/sprites/dom-yellow_frame0.tga
===================================================================
(Binary files differ)

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

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

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

Modified: branches/nexuiz-2.0/data/models/sprites/item-extralife_frame0.tga
===================================================================
(Binary files differ)

Modified: branches/nexuiz-2.0/data/models/sprites/item-extralife_frame1.tga
===================================================================
(Binary files differ)

Modified: branches/nexuiz-2.0/data/models/sprites/item-fuelregen_frame0.tga
===================================================================
(Binary files differ)

Modified: branches/nexuiz-2.0/data/models/sprites/item-fuelregen_frame1.tga
===================================================================
(Binary files differ)

Modified: branches/nexuiz-2.0/data/models/sprites/item-invis_frame0.tga
===================================================================
(Binary files differ)

Modified: branches/nexuiz-2.0/data/models/sprites/item-invis_frame1.tga
===================================================================
(Binary files differ)

Modified: branches/nexuiz-2.0/data/models/sprites/item-jetpack_frame0.tga
===================================================================
(Binary files differ)

Modified: branches/nexuiz-2.0/data/models/sprites/item-jetpack_frame1.tga
===================================================================
(Binary files differ)

Modified: branches/nexuiz-2.0/data/models/sprites/item-shield_frame0.tga
===================================================================
(Binary files differ)

Modified: branches/nexuiz-2.0/data/models/sprites/item-shield_frame1.tga
===================================================================
(Binary files differ)

Modified: branches/nexuiz-2.0/data/models/sprites/item-speed_frame0.tga
===================================================================
(Binary files differ)

Modified: branches/nexuiz-2.0/data/models/sprites/item-speed_frame1.tga
===================================================================
(Binary files differ)

Modified: branches/nexuiz-2.0/data/models/sprites/item-strength_frame0.tga
===================================================================
(Binary files differ)

Modified: branches/nexuiz-2.0/data/models/sprites/item-strength_frame1.tga
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/models/sprites/key-dropped_frame0.tga (from rev 7188, trunk/data/models/sprites/key-dropped_frame0.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/models/sprites/keycarrier-blue_frame0.tga (from rev 7188, trunk/data/models/sprites/keycarrier-blue_frame0.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/models/sprites/keycarrier-finish_frame0.tga (from rev 7188, trunk/data/models/sprites/keycarrier-finish_frame0.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/models/sprites/keycarrier-friend_frame0.tga (from rev 7188, trunk/data/models/sprites/keycarrier-friend_frame0.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/models/sprites/keycarrier-pink_frame0.tga (from rev 7188, trunk/data/models/sprites/keycarrier-pink_frame0.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/models/sprites/keycarrier-red_frame0.tga (from rev 7188, trunk/data/models/sprites/keycarrier-red_frame0.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/models/sprites/keycarrier-yellow_frame0.tga (from rev 7188, trunk/data/models/sprites/keycarrier-yellow_frame0.tga)
===================================================================
(Binary files differ)

Modified: branches/nexuiz-2.0/data/models/sprites/make-sprites.sh
===================================================================
--- branches/nexuiz-2.0/data/models/sprites/make-sprites.sh	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/models/sprites/make-sprites.sh	2009-07-11 14:59:28 UTC (rev 7191)
@@ -86,15 +86,15 @@
      inkscape:groupmode="layer"
      id="layer1">
     <path
-       style="opacity:1;fill:#$color;fill-opacity:1;stroke:#$bgcolor;stroke-width:6;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.75294119"
+       style="opacity:1;fill:#$color;fill-opacity:1;stroke:#$bgcolor;stroke-width:3;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
        d="M 512,124 L 536,100 L 520,100 L 520,60 L 504,60 L 504,100 L 488,100 L 512,124 z "
        id="path1872"
        sodipodi:nodetypes="cccccccc" />
     <text
        xml:space="preserve"
-       style="font-size:120px;font-weight:bold;text-align:center;text-anchor:middle;opacity:1;fill:#$color;fill-opacity:1;stroke:#$bgcolor;stroke-width:6;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.75294118;font-family:xscale"
+       style="font-size:120px;font-weight:bold;text-align:center;text-anchor:middle;opacity:1;fill:#$color;fill-opacity:1;stroke:#$bgcolor;stroke-width:3;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:xscale"
        x="512"
-       y="49"
+       y="50"
        id="text1874"><tspan
          sodipodi:role="line"
          id="tspan1876"
@@ -141,13 +141,13 @@
 sprite as-push            "Push"          ff8000 000000 0.0
 sprite as-destroy         "Destroy"       ff8000 000000 0.0
 sprite as-defend          "Defend"        0080ff 000000 0.0
-sprite bluebase           "Blue Base"     0000ff 000000 0.0
+sprite bluebase           "Blue Base"     0050ff 000000 0.0
 sprite danger             "DANGER"        ff0000 ffff00 0.0
 sprite flagcarrier        "Flag carrier"  ffff00 000000 0.0
 sprite helpme             "Help me!"      ffff00 ff0000 0.0
 sprite here               "Here"          00ff00 000000 0.0
 sprite key-dropped        "Dropped key"   00ffff 000000 0.0
-sprite keycarrier-blue    "Key carrier"   0000ff 000000 0.0
+sprite keycarrier-blue    "Key carrier"   0050ff 000000 0.0
 sprite keycarrier-finish  "Run here"      00ffff 000000 0.0
 sprite keycarrier-friend  "Key carrier"   00ff00 000000 0.0
 sprite keycarrier-pink    "Key carrier"   ff00ff 000000 0.0
@@ -156,18 +156,19 @@
 sprite redbase            "Red base"      ff0000 000000 0.0
 sprite waypoint           "Waypoint"      008080 000000 0.0
 sprite ons-gen-red        "Generator"     ff0000 000000 0.0
-sprite ons-gen-blue       "Generator"     0000ff 000000 0.0
+sprite ons-gen-blue       "Generator"     0050ff 000000 0.0
 sprite ons-gen-shielded   "Generator"     808080 000000 0.0
 sprite ons-cp-neut        "Control point" ffff00 000000 0.0
 sprite ons-cp-red         "Control point" ff0000 000000 0.0
-sprite ons-cp-blue        "Control point" 0000ff 000000 0.0
+sprite ons-cp-blue        "Control point" 0050ff 000000 0.0
 sprite ons-cp-atck-neut   "Control point" ffff00 000000 0.5 000000 ffff00 0.5
 sprite ons-cp-atck-red    "Control point" ff0000 000000 0.5 ff0000 ffff00 0.5
-sprite ons-cp-atck-blue   "Control point" 0000ff 000000 0.5 0000ff ffff00 0.5
+sprite ons-cp-atck-blue   "Control point" 0050ff 000000 0.5 0050ff ffff00 0.5
 sprite ons-cp-dfnd-red    "Control point" ff0000 000000 0.5 ff0000 ffffff 0.5
-sprite ons-cp-dfnd-blue   "Control point" 0000ff 000000 0.5 0000ff ffffff 0.5
+sprite ons-cp-dfnd-blue   "Control point" 0050ff 000000 0.5 0050ff ffffff 0.5
 sprite race-checkpoint    "Checkpoint"    ff8000 000000 0.0
 sprite race-finish        "Finish"        ff8000 000000 0.0
+sprite race-start         "Start"         ff8000 000000 0.0
 sprite nb-ball            "Ball"          e8d8a0 000000 0.0
 
 sprite wpn-laser          "Laser"         ff8080 000000 0.0 # bright red
@@ -188,14 +189,14 @@
 
 sprite dom-neut           "Control point" 00ffff 000000 0.0
 sprite dom-red            "Control point" ff0000 000000 0.0
-sprite dom-blue           "Control point" 0000ff 000000 0.0
+sprite dom-blue           "Control point" 0050ff 000000 0.0
 sprite dom-yellow         "Control point" ffff00 000000 0.0
 sprite dom-pink           "Control point" ff00ff 000000 0.0
 
-sprite item-invis         "Invisibility"  0000ff 000000 0.5 0000ff ffff00 0.5
+sprite item-invis         "Invisibility"  0050ff 000000 0.5 0050ff ffff00 0.5
 sprite item-extralife     "Extra life"    ff0000 000000 0.5 ff0000 ffff00 0.5
 sprite item-speed         "Speed"         ff00ff 000000 0.5 ff00ff ffff00 0.5
-sprite item-strength      "Strength"      0000ff 000000 0.5 0000ff ffff00 0.5
+sprite item-strength      "Strength"      0050ff 000000 0.5 0050ff ffff00 0.5
 sprite item-shield        "Shield"        ff00ff 000000 0.5 ff00ff ffff00 0.5
 sprite item-fuelregen     "Fuel regen"    ff8000 000000 0.5 ff8000 ffff00 0.5
 sprite item-jetpack       "Jet Pack"      808080 000000 0.5 808080 ffff00 0.5

Deleted: branches/nexuiz-2.0/data/models/sprites/nb-ball.tga
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/models/sprites/nb-ball_frame0.tga (from rev 7188, trunk/data/models/sprites/nb-ball_frame0.tga)
===================================================================
(Binary files differ)

Modified: branches/nexuiz-2.0/data/models/sprites/ons-cp-atck-blue_frame0.tga
===================================================================
(Binary files differ)

Modified: branches/nexuiz-2.0/data/models/sprites/ons-cp-atck-blue_frame1.tga
===================================================================
(Binary files differ)

Modified: branches/nexuiz-2.0/data/models/sprites/ons-cp-atck-neut_frame0.tga
===================================================================
(Binary files differ)

Modified: branches/nexuiz-2.0/data/models/sprites/ons-cp-atck-neut_frame1.tga
===================================================================
(Binary files differ)

Modified: branches/nexuiz-2.0/data/models/sprites/ons-cp-atck-red_frame0.tga
===================================================================
(Binary files differ)

Modified: branches/nexuiz-2.0/data/models/sprites/ons-cp-atck-red_frame1.tga
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/models/sprites/ons-cp-blue_frame0.tga (from rev 7188, trunk/data/models/sprites/ons-cp-blue_frame0.tga)
===================================================================
(Binary files differ)

Modified: branches/nexuiz-2.0/data/models/sprites/ons-cp-dfnd-blue_frame0.tga
===================================================================
(Binary files differ)

Modified: branches/nexuiz-2.0/data/models/sprites/ons-cp-dfnd-blue_frame1.tga
===================================================================
(Binary files differ)

Modified: branches/nexuiz-2.0/data/models/sprites/ons-cp-dfnd-red_frame0.tga
===================================================================
(Binary files differ)

Modified: branches/nexuiz-2.0/data/models/sprites/ons-cp-dfnd-red_frame1.tga
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/models/sprites/ons-cp-neut_frame0.tga (from rev 7188, trunk/data/models/sprites/ons-cp-neut_frame0.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/models/sprites/ons-cp-red_frame0.tga (from rev 7188, trunk/data/models/sprites/ons-cp-red_frame0.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/models/sprites/ons-gen-blue_frame0.tga (from rev 7188, trunk/data/models/sprites/ons-gen-blue_frame0.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/models/sprites/ons-gen-red_frame0.tga (from rev 7188, trunk/data/models/sprites/ons-gen-red_frame0.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/models/sprites/ons-gen-shielded_frame0.tga (from rev 7188, trunk/data/models/sprites/ons-gen-shielded_frame0.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/models/sprites/race-checkpoint_frame0.tga (from rev 7188, trunk/data/models/sprites/race-checkpoint_frame0.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/models/sprites/race-finish_frame0.tga (from rev 7188, trunk/data/models/sprites/race-finish_frame0.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/models/sprites/race-start_frame0.tga (from rev 7188, trunk/data/models/sprites/race-start_frame0.tga)
===================================================================
(Binary files differ)

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

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

Modified: branches/nexuiz-2.0/data/models/sprites/wpn-campingrifle_frame0.tga
===================================================================
(Binary files differ)

Modified: branches/nexuiz-2.0/data/models/sprites/wpn-crylink_frame0.tga
===================================================================
(Binary files differ)

Modified: branches/nexuiz-2.0/data/models/sprites/wpn-electro_frame0.tga
===================================================================
(Binary files differ)

Modified: branches/nexuiz-2.0/data/models/sprites/wpn-gl_frame0.tga
===================================================================
(Binary files differ)

Modified: branches/nexuiz-2.0/data/models/sprites/wpn-hagar_frame0.tga
===================================================================
(Binary files differ)

Modified: branches/nexuiz-2.0/data/models/sprites/wpn-hlac_frame0.tga
===================================================================
(Binary files differ)

Modified: branches/nexuiz-2.0/data/models/sprites/wpn-hookgun_frame0.tga
===================================================================
(Binary files differ)

Modified: branches/nexuiz-2.0/data/models/sprites/wpn-laser_frame0.tga
===================================================================
(Binary files differ)

Modified: branches/nexuiz-2.0/data/models/sprites/wpn-minstanex_frame0.tga
===================================================================
(Binary files differ)

Modified: branches/nexuiz-2.0/data/models/sprites/wpn-nex_frame0.tga
===================================================================
(Binary files differ)

Modified: branches/nexuiz-2.0/data/models/sprites/wpn-porto_frame0.tga
===================================================================
(Binary files differ)

Modified: branches/nexuiz-2.0/data/models/sprites/wpn-rl_frame0.tga
===================================================================
(Binary files differ)

Modified: branches/nexuiz-2.0/data/models/sprites/wpn-seeker_frame0.tga
===================================================================
(Binary files differ)

Modified: branches/nexuiz-2.0/data/models/sprites/wpn-shotgun_frame0.tga
===================================================================
(Binary files differ)

Modified: branches/nexuiz-2.0/data/models/sprites/wpn-uzi_frame0.tga
===================================================================
(Binary files differ)

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

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

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

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

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

Copied: branches/nexuiz-2.0/data/models/teamfx/ray.md3_0.skin (from rev 7188, trunk/data/models/teamfx/ray.md3_0.skin)
===================================================================
--- branches/nexuiz-2.0/data/models/teamfx/ray.md3_0.skin	                        (rev 0)
+++ branches/nexuiz-2.0/data/models/teamfx/ray.md3_0.skin	2009-07-11 14:59:28 UTC (rev 7191)
@@ -0,0 +1 @@
+Plane01,teamfx/rayblue

Copied: branches/nexuiz-2.0/data/models/teamfx/ray.md3_1.skin (from rev 7188, trunk/data/models/teamfx/ray.md3_1.skin)
===================================================================
--- branches/nexuiz-2.0/data/models/teamfx/ray.md3_1.skin	                        (rev 0)
+++ branches/nexuiz-2.0/data/models/teamfx/ray.md3_1.skin	2009-07-11 14:59:28 UTC (rev 7191)
@@ -0,0 +1 @@
+Plane01,teamfx/rayred
\ No newline at end of file

Copied: branches/nexuiz-2.0/data/models/teamfx/ray.md3_2.skin (from rev 7188, trunk/data/models/teamfx/ray.md3_2.skin)
===================================================================
--- branches/nexuiz-2.0/data/models/teamfx/ray.md3_2.skin	                        (rev 0)
+++ branches/nexuiz-2.0/data/models/teamfx/ray.md3_2.skin	2009-07-11 14:59:28 UTC (rev 7191)
@@ -0,0 +1 @@
+Plane01,teamfx/rayyellow
\ No newline at end of file

Copied: branches/nexuiz-2.0/data/models/teamfx/ray.md3_3.skin (from rev 7188, trunk/data/models/teamfx/ray.md3_3.skin)
===================================================================
--- branches/nexuiz-2.0/data/models/teamfx/ray.md3_3.skin	                        (rev 0)
+++ branches/nexuiz-2.0/data/models/teamfx/ray.md3_3.skin	2009-07-11 14:59:28 UTC (rev 7191)
@@ -0,0 +1 @@
+Plane01,teamfx/raypink
\ No newline at end of file

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

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

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

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

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

Copied: branches/nexuiz-2.0/data/models/teamfx/shockwave.md3_0.skin (from rev 7188, trunk/data/models/teamfx/shockwave.md3_0.skin)
===================================================================
--- branches/nexuiz-2.0/data/models/teamfx/shockwave.md3_0.skin	                        (rev 0)
+++ branches/nexuiz-2.0/data/models/teamfx/shockwave.md3_0.skin	2009-07-11 14:59:28 UTC (rev 7191)
@@ -0,0 +1,2 @@
+Plane01,teamfx/bluering
+Plane02,teamfx/bluering
\ No newline at end of file

Copied: branches/nexuiz-2.0/data/models/teamfx/shockwave.md3_1.skin (from rev 7188, trunk/data/models/teamfx/shockwave.md3_1.skin)
===================================================================
--- branches/nexuiz-2.0/data/models/teamfx/shockwave.md3_1.skin	                        (rev 0)
+++ branches/nexuiz-2.0/data/models/teamfx/shockwave.md3_1.skin	2009-07-11 14:59:28 UTC (rev 7191)
@@ -0,0 +1,2 @@
+Plane01,teamfx/redring
+Plane02,teamfx/redring
\ No newline at end of file

Copied: branches/nexuiz-2.0/data/models/teamfx/shockwave.md3_2.skin (from rev 7188, trunk/data/models/teamfx/shockwave.md3_2.skin)
===================================================================
--- branches/nexuiz-2.0/data/models/teamfx/shockwave.md3_2.skin	                        (rev 0)
+++ branches/nexuiz-2.0/data/models/teamfx/shockwave.md3_2.skin	2009-07-11 14:59:28 UTC (rev 7191)
@@ -0,0 +1,2 @@
+Plane01,teamfx/yellowring
+Plane02,teamfx/yellowring
\ No newline at end of file

Copied: branches/nexuiz-2.0/data/models/teamfx/shockwave.md3_3.skin (from rev 7188, trunk/data/models/teamfx/shockwave.md3_3.skin)
===================================================================
--- branches/nexuiz-2.0/data/models/teamfx/shockwave.md3_3.skin	                        (rev 0)
+++ branches/nexuiz-2.0/data/models/teamfx/shockwave.md3_3.skin	2009-07-11 14:59:28 UTC (rev 7191)
@@ -0,0 +1,2 @@
+Plane01,teamfx/pinkring
+Plane02,teamfx/pinkring
\ No newline at end of file

Modified: branches/nexuiz-2.0/data/models/weapons/h_campingrifle.dpm.framegroups
===================================================================
--- branches/nexuiz-2.0/data/models/weapons/h_campingrifle.dpm.framegroups	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/models/weapons/h_campingrifle.dpm.framegroups	2009-07-11 14:59:28 UTC (rev 7191)
@@ -1,4 +1,4 @@
 1 8 20 0 // fire
 9 5 20 0 // fire2
 15 200 20 1 // idle
-215 40 20 0 // reload
+215 39 20 0 // reload

Copied: branches/nexuiz-2.0/data/physicsNexrun.cfg (from rev 7188, trunk/data/physicsNexrun.cfg)
===================================================================
--- branches/nexuiz-2.0/data/physicsNexrun.cfg	                        (rev 0)
+++ branches/nexuiz-2.0/data/physicsNexrun.cfg	2009-07-11 14:59:28 UTC (rev 7191)
@@ -0,0 +1,23 @@
+//nexrun physics
+sv_gravity 800
+sv_maxspeed 400
+sv_maxairspeed 210
+sv_accelerate 10
+sv_airaccelerate 4
+sv_friction 7
+edgefriction 1
+sv_stepheight 34
+sv_jumpvelocity 270
+sv_wateraccelerate 4
+sv_waterfriction 1
+sv_airaccel_sideways_friction 0
+sv_airaccel_qw 0.95
+sv_airstopaccelerate 2.5
+sv_airstrafeaccelerate 70
+sv_maxairstrafespeed 30
+sv_aircontrol 150
+sv_warsowbunny_turnaccel 0
+sv_warsowbunny_accel 0.1593
+sv_warsowbunny_topspeed 925
+sv_warsowbunny_backtosideratio 0.8
+set sv_friction_on_land 0

Modified: branches/nexuiz-2.0/data/qcsrc/client/Defs.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/client/Defs.qc	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/qcsrc/client/Defs.qc	2009-07-11 14:59:28 UTC (rev 7191)
@@ -1,235 +1,239 @@
-#pragma flag off fastarrays // make dp behave with new fteqcc versions. remove when dp bug with fteqcc fastarrays is fixed
-
-
-//NOTE: THIS IS AN INTERFACE FILE. DO NOT EDIT.
-//MODIFYING THIS FILE CAN RESULT IN CRC ERRORS.
-//YOU HAVE BEEN WARNED.
-
-//feel free to look though. :)
-
-
-
-
-
-/*
-==============================================================================
-
-			SOURCE FOR GLOBALVARS_T C STRUCTURE
-
-==============================================================================
-*/
-
-//
-// system globals
-//
-entity		self;
-entity		other;
-entity		world;
-float		time;
-float		frametime;
-
-float 		player_localentnum;	//the entnum
-float 		player_localnum;	//the playernum
-float		maxclients;	//a constant filled in by the engine. gah, portability eh?
-
-float		clientcommandframe;	//player movement
-float		servercommandframe;	//clientframe echoed off the server
-
-string		mapname;
-
-//
-// global variables set by built in functions
-//
-vector		v_forward, v_up, v_right;	// set by makevectors()
-
-// set by traceline / tracebox
-float		trace_allsolid;
-float		trace_startsolid;
-float		trace_fraction;
-vector		trace_endpos;
-vector		trace_plane_normal;
-float		trace_plane_dist;
-entity		trace_ent;
-float		trace_inopen;
-float		trace_inwater;
-
-//
-// required prog functions
-//
-void()		CSQC_Init;
-void()		CSQC_Shutdown;
-float(float f, float t, float n)	CSQC_InputEvent;
-void(float w, float h)		CSQC_UpdateView;
-float(string s)	CSQC_ConsoleCommand;
-
-//these fields are read and set by the default player physics
-vector		pmove_org;
-vector		pmove_vel;
-vector		pmove_mins;
-vector		pmove_maxs;
-//retrieved from the current movement commands (read by player physics)
-float		input_timelength;
-vector		input_angles;
-vector		input_movevalues;	//forwards, right, up.
-float		input_buttons;		//attack, use, jump (default physics only uses jump)
-
-float		movevar_gravity;
-float		movevar_stopspeed;
-float		movevar_maxspeed;
-float		movevar_spectatormaxspeed;	//used by NOCLIP movetypes.
-float		movevar_accelerate;
-float		movevar_airaccelerate;
-float		movevar_wateraccelerate;
-float		movevar_friction;
-float		movevar_waterfriction;
-float		movevar_entgravity;	//the local player's gravity field. Is a multiple (1 is the normal value)
-
-//================================================
-void		end_sys_globals;		// flag for structure dumping
-//================================================
-
-/*
-==============================================================================
-
-			SOURCE FOR ENTVARS_T C STRUCTURE
-
-==============================================================================
-*/
-
-//
-// system fields (*** = do not set in prog code, maintained by C code)
-//
-.float		modelindex;		// *** model index in the precached list
-.vector		absmin, absmax;	// *** origin + mins / maxs
-
-.float		entnum;	// *** the ent number as on the server
-.float		drawmask;
-.void()		predraw;
-
-.float		movetype;
-.float		solid;
-
-.vector		origin;			// ***
-.vector		oldorigin;		// ***
-.vector		velocity;
-.vector		angles;
-.vector		avelocity;
-
-.string		classname;		// spawn function
-.string		model;
-.float		frame;
-.float		skin;
-.float		effects;
-
-.vector		mins, maxs;		// bounding box extents reletive to origin
-.vector		size;			// maxs - mins
-
-.void()		touch;
-.void()		use;
-.void()		think;
-.void()		blocked;		// for doors or plats, called when can't push other
-
-.float		nextthink;
-
-.entity		chain;
-
-.string		netname;
-
-.entity 	enemy;
-
-.float		flags;
-
-.float		colormap;
-
-.entity		owner;		// who launched a missile
-
-//================================================
-void		end_sys_fields;			// flag for structure dumping
-//================================================
-
-// Additional OPTIONAL Fields and Globals
-float		intermission;
-float		sb_showscores;
-float		sb_showaccuracy;
-float		sbar_currentammo;
-.string		message;
-.float renderflags;
-// float		coop;
-// float		deathmatch;
-
-// float		dmg_take;
-// float		dmg_save;
-// vector		dmg_origin;
-
-// Darkplaces Render Modifications
-#if 0
-.float alpha;
-.float renderflags;
-.vector colormod;
-.float scale;
-#endif
-
-// Basic variables
-.float enttype; // entity type sent from server
-.float sv_entnum; // entity number sent from server
-.float team;
-.float team_size;
-
-float vid_conwidth, vid_conheight;
-float binddb;
-
-// QUALIFYING
-float race_checkpoint;
-float race_time;
-float race_laptime;
-float race_checkpointtime;
-float race_previousbesttime;
-string race_previousbestname;
-float race_nextcheckpoint;
-float race_nextbesttime;
-string race_nextbestname;
-
-// RACE
-float race_mycheckpoint;
-float race_mycheckpointtime;
-float race_mycheckpointdelta;
-float race_mycheckpointlapsdelta;
-string race_mycheckpointenemy;
-float race_othercheckpoint;
-float race_othercheckpointtime;
-float race_othercheckpointdelta;
-float race_othercheckpointlapsdelta;
-string race_othercheckpointenemy;
-float sb_showscores_force;
-
-// Nexball
-float nb_pb_period;
-
-// Spectating
-float spectatee_status;
-
-// short mapname
-string shortmapname;
-
-//remaining maptime announcer sounds, true when sound was already played
-float announcer_1min;
-float announcer_5min;
-
-// database for misc stuff
-float tempdb;
-vector hook_shotorigin;
-
-#ifdef BLURTEST
-float blurtest_time0, blurtest_time1, blurtest_radius, blurtest_power;
-#endif
-
-float servertime, serverprevtime, serverdeltatime;
-
-float ticrate;
-
-.float damageforcescale;
-.void(float thisdmg, float hittype, vector org, vector thisforce) event_damage;
-
-// only for Porto
-float angles_held_status;
-vector angles_held;
+#pragma flag off fastarrays // make dp behave with new fteqcc versions. remove when dp bug with fteqcc fastarrays is fixed
+
+
+//NOTE: THIS IS AN INTERFACE FILE. DO NOT EDIT.
+//MODIFYING THIS FILE CAN RESULT IN CRC ERRORS.
+//YOU HAVE BEEN WARNED.
+
+//feel free to look though. :)
+
+
+
+
+
+/*
+==============================================================================
+
+			SOURCE FOR GLOBALVARS_T C STRUCTURE
+
+==============================================================================
+*/
+
+//
+// system globals
+//
+entity		self;
+entity		other;
+entity		world;
+float		time;
+float		frametime;
+
+float 		player_localentnum;	//the entnum
+float 		player_localnum;	//the playernum
+float		maxclients;	//a constant filled in by the engine. gah, portability eh?
+
+float		clientcommandframe;	//player movement
+float		servercommandframe;	//clientframe echoed off the server
+
+string		mapname;
+
+//
+// global variables set by built in functions
+//
+vector		v_forward, v_up, v_right;	// set by makevectors()
+
+// set by traceline / tracebox
+float		trace_allsolid;
+float		trace_startsolid;
+float		trace_fraction;
+vector		trace_endpos;
+vector		trace_plane_normal;
+float		trace_plane_dist;
+entity		trace_ent;
+float		trace_inopen;
+float		trace_inwater;
+
+//
+// required prog functions
+//
+void()		CSQC_Init;
+void()		CSQC_Shutdown;
+float(float f, float t, float n)	CSQC_InputEvent;
+void(float w, float h)		CSQC_UpdateView;
+float(string s)	CSQC_ConsoleCommand;
+
+//these fields are read and set by the default player physics
+vector		pmove_org;
+vector		pmove_vel;
+vector		pmove_mins;
+vector		pmove_maxs;
+//retrieved from the current movement commands (read by player physics)
+float		input_timelength;
+vector		input_angles;
+vector		input_movevalues;	//forwards, right, up.
+float		input_buttons;		//attack, use, jump (default physics only uses jump)
+
+float		movevar_gravity;
+float		movevar_stopspeed;
+float		movevar_maxspeed;
+float		movevar_spectatormaxspeed;	//used by NOCLIP movetypes.
+float		movevar_accelerate;
+float		movevar_airaccelerate;
+float		movevar_wateraccelerate;
+float		movevar_friction;
+float		movevar_waterfriction;
+float		movevar_entgravity;	//the local player's gravity field. Is a multiple (1 is the normal value)
+
+//================================================
+void		end_sys_globals;		// flag for structure dumping
+//================================================
+
+/*
+==============================================================================
+
+			SOURCE FOR ENTVARS_T C STRUCTURE
+
+==============================================================================
+*/
+
+//
+// system fields (*** = do not set in prog code, maintained by C code)
+//
+.float		modelindex;		// *** model index in the precached list
+.vector		absmin, absmax;	// *** origin + mins / maxs
+
+.float		entnum;	// *** the ent number as on the server
+.float		drawmask;
+.void()		predraw;
+
+.float		movetype;
+.float		solid;
+
+.vector		origin;			// ***
+.vector		oldorigin;		// ***
+.vector		velocity;
+.vector		angles;
+.vector		avelocity;
+
+.string		classname;		// spawn function
+.string		model;
+.float		frame;
+.float		skin;
+.float		effects;
+
+.vector		mins, maxs;		// bounding box extents reletive to origin
+.vector		size;			// maxs - mins
+
+.void()		touch;
+.void()		use;
+.void()		think;
+.void()		blocked;		// for doors or plats, called when can't push other
+
+.float		nextthink;
+
+.entity		chain;
+
+.string		netname;
+
+.entity 	enemy;
+
+.float		flags;
+
+.float		colormap;
+
+.entity		owner;		// who launched a missile
+
+//================================================
+void		end_sys_fields;			// flag for structure dumping
+//================================================
+
+// Additional OPTIONAL Fields and Globals
+float		intermission;
+float		sb_showscores;
+float		sb_showaccuracy;
+float		sbar_currentammo;
+.string		message;
+.float renderflags;
+// float		coop;
+// float		deathmatch;
+
+// float		dmg_take;
+// float		dmg_save;
+// vector		dmg_origin;
+
+// Darkplaces Render Modifications
+#if 0
+.float alpha;
+.float renderflags;
+.vector colormod;
+.float scale;
+#endif
+
+// Basic variables
+.float enttype; // entity type sent from server
+.float sv_entnum; // entity number sent from server
+.float team;
+.float team_size;
+
+float vid_conwidth, vid_conheight;
+float binddb;
+
+// QUALIFYING
+float race_checkpoint;
+float race_time;
+float race_laptime;
+float race_checkpointtime;
+float race_previousbesttime;
+string race_previousbestname;
+float race_nextcheckpoint;
+float race_nextbesttime;
+string race_nextbestname;
+float race_penaltyaccumulator; // qualifying: total penalty time in tenths
+float race_penaltyeventtime; // time when the player got the penalty
+float race_penaltytime; // duration of penalty time, in tenths
+string race_penaltyreason; // reason for penalty
+
+// RACE
+float race_mycheckpoint;
+float race_mycheckpointtime;
+float race_mycheckpointdelta;
+float race_mycheckpointlapsdelta;
+string race_mycheckpointenemy;
+float race_othercheckpoint;
+float race_othercheckpointtime;
+float race_othercheckpointdelta;
+float race_othercheckpointlapsdelta;
+string race_othercheckpointenemy;
+float sb_showscores_force;
+
+// Nexball
+float nb_pb_period;
+
+// Spectating
+float spectatee_status;
+
+// short mapname
+string shortmapname;
+
+//remaining maptime announcer sounds, true when sound was already played
+float announcer_1min;
+float announcer_5min;
+
+// database for misc stuff
+float tempdb;
+vector hook_shotorigin;
+
+#ifdef BLURTEST
+float blurtest_time0, blurtest_time1, blurtest_radius, blurtest_power;
+#endif
+
+float servertime, serverprevtime, serverdeltatime;
+
+float ticrate;
+
+.float damageforcescale;
+.void(float thisdmg, float hittype, vector org, vector thisforce) event_damage;
+
+// only for Porto
+float angles_held_status;
+vector angles_held;


Property changes on: branches/nexuiz-2.0/data/qcsrc/client/Defs.qc
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: branches/nexuiz-2.0/data/qcsrc/client/Main.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/client/Main.qc	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/qcsrc/client/Main.qc	2009-07-11 14:59:28 UTC (rev 7191)
@@ -1,1067 +1,1089 @@
-// --------------------------------------------------------------------------
-// BEGIN REQUIRED CSQC FUNCTIONS
-//include "main.qh"
-
-#define DP_CSQC_ENTITY_REMOVE_IS_B0RKED
-
-void cvar_clientsettemp(string cv, string val)
-{
-	entity e;
-	for(e = world; (e = find(e, classname, "saved_cvar_value")); )
-		if(e.netname == cv)
-			goto saved;
-	e = spawn();
-	e.classname = "saved_cvar_value";
-	e.netname = strzone(cv);
-	e.message = strzone(cvar_string(cv));
-:saved
-	cvar_set(cv, val);
-}
-
-void cvar_clientsettemp_restore()
-{
-	entity e;
-	for(e = world; (e = find(e, classname, "saved_cvar_value")); )
-			cvar_set(e.netname, e.message);
-}
-
-void() menu_show_error =
-{
-	drawstring('0 200 0', "ERROR - MENU IS VISIBLE BUT NO MENU WAS DEFINED!", '8 8 0', '1 0 0', 1, 0);
-};
-
-// CSQC_Init : Called every time the CSQC code is initialized (essentially at map load)
-// Useful for precaching things
-
-void() menu_sub_null =
-{
-};
-
-#ifdef USE_FTE
-float __engine_check;
-#endif
-
-string forcefog;
-void WaypointSprite_Load();
-void CSQC_Init(void)
-{
-#ifdef USE_FTE
-#pragma target ID
-	__engine_check = checkextension("DP_SV_WRITEPICTURE");
-	if(!__engine_check)
-	{
-		print("^3Your engine build is outdated\n^3This Server uses a newer QC VM. Please update!\n");
-		localcmd("\ndisconnect\n");
-		return;
-	}
-#pragma target FTE
-#endif
-	
-	check_unacceptable_compiler_bugs();
-
-	float i;
-	CSQC_CheckEngine();
-	dprint_load();
-
-	binddb = db_create();
-	tempdb = db_create();
-	compressShortVector_init();
-
-	drawfont = 0;
-	menu_visible = FALSE;
-	menu_show = menu_show_error;
-	menu_action = menu_sub_null;
-
-	for(i = 0; i < 255; ++i)
-		if(getplayerkey(i, "viewentity") == "")
-			break;
-	maxclients = i;
-
-	//ctf_temp_1 = "";
-	// localcmd("alias order \"cmd order $*\""); enable if ctf-command thingy is used
-	//registercmd("ctf_menu");
-	registercmd("ons_map");
-	//registercmd("menu_action");
-
-	registercmd("+button3");
-	registercmd("-button3");
-	registercmd("+button4");
-	registercmd("-button4");
-	registercmd("+showaccuracy");registercmd("-showaccuracy");
-
-#ifndef CAMERATEST
-	if(isdemo())
-	{
-#endif
-		registercmd("+forward");registercmd("-forward");
-		registercmd("+back");registercmd("-back");
-		registercmd("+moveup");registercmd("-moveup");
-		registercmd("+movedown");registercmd("-movedown");
-		registercmd("+moveright");registercmd("-moveright");
-		registercmd("+moveleft");registercmd("-moveleft");
-		registercmd("+roll_right");registercmd("-roll_right");
-		registercmd("+roll_left");registercmd("-roll_left");
-#ifndef CAMERATEST
-	}
-#endif
-	registercvar("sbar_usecsqc", "1");
-	registercvar("sbar_columns", "default", CVAR_SAVE);
-
-	gametype = 0;
-
-	// sbar_fields uses strunzone on the titles!
-	for(i = 0; i < MAX_SBAR_FIELDS; ++i)
-		sbar_title[i] = strzone("(null)");
-
-	postinit = false;
-
-	teams = Sort_Spawn();
-	players = Sort_Spawn();
-
-	GetTeam(COLOR_SPECTATOR, true); // add specs first
-
-	cvar_clientsettemp("_supports_weaponpriority", "1");
-
-
-
-
-	cs_project_is_b0rked = TRUE;
-	R_SetView(VF_VIEWPORT, '0 0 0', '640 480 0');
-	R_SetView(VF_FOV, '90 90 0');
-	R_SetView(VF_ORIGIN, '0 0 0');
-	R_SetView(VF_ANGLES, '0 0 0');
-	R_SetView(VF_PERSPECTIVE, 1);
-	makevectors('0 0 0');
-	vector v;
-	v = cs_project(v_forward);
-	if(v_x - 320 < +1)
-	if(v_x - 320 > -1)
-	if(v_y - 240 < +1)
-	if(v_y - 240 > -1)
-		cs_project_is_b0rked = FALSE;
-
-	RegisterWeapons();
-
-	WaypointSprite_Load();
-
-	Projectile_Precache();
-	GibSplash_Precache();
-	Casings_Precache();
-	DamageInfo_Precache();
-	Announcer_Precache();
-
-	get_mi_min_max_texcoords(1); // try the CLEVER way first
-	minimapname = strcat("gfx/", mi_shortname, "_radar.tga");
-	shortmapname = mi_shortname;
-
-	if(precache_pic(minimapname) == "")
-	{
-		// but maybe we have a non-clever minimap
-		minimapname = strcat("gfx/", mi_shortname, "_mini.tga");
-		if(precache_pic(minimapname) == "")
-			minimapname = ""; // FAIL
-		else
-			get_mi_min_max_texcoords(0); // load new texcoords
-	}
-
-	mi_center = (mi_min + mi_max) * 0.5;
-	mi_scale = mi_max - mi_min;
-	minimapname = strzone(minimapname);
-}
-
-// CSQC_Shutdown : Called every time the CSQC code is shutdown (changing maps, quitting, etc)
-void CSQC_Shutdown(void)
-{
-#ifdef USE_FTE
-#pragma TARGET id
-	if(!__engine_check)
-		return 0;
-#pragma TARGET fte
-#endif
-
-	remove(teams);
-	remove(players);
-	db_close(binddb);
-	db_close(tempdb);
-
-	cvar_clientsettemp_restore();
-
-	if(camera_active)
-		cvar_set("chase_active",ftos(chase_active_backup));
-}
-
-.float has_team;
-float SetTeam(entity o, float Team)
-{
-	entity tm;
-	if(Team == -1) // leave
-	{
-		if(o.has_team)
-		{
-			//print("(DISCONNECT) leave team ", ftos(o.team), "\n");
-			tm = GetTeam(o.team, false);
-			tm.team_size -= 1;
-			o.has_team = 0;
-			return TRUE;
-		}
-	}
-	else
-	{
-		if not(o.has_team)
-		{
-			//print("(CONNECT) enter team ", ftos(o.team), "\n");
-			o.team = Team;
-			tm = GetTeam(Team, true);
-			tm.team_size += 1;
-			o.has_team = 1;
-			return TRUE;
-		}
-		else if(Team != o.team)
-		{
-			//print("(CHANGE) leave team ", ftos(o.team), "\n");
-			tm = GetTeam(o.team, false);
-			tm.team_size -= 1;
-			o.team = Team;
-			//print("(CHANGE) enter team ", ftos(o.team), "\n");
-			tm = GetTeam(Team, true);
-			tm.team_size += 1;
-			return TRUE;
-		}
-	}
-	return FALSE;
-}
-
-void Playerchecker_Think()
-{
-	float i;
-	entity e;
-	for(i = 0; i < maxclients; ++i)
-	{
-		e = playerslots[i];
-		if(GetPlayerName(i) == "")
-		{
-			if(e.sort_prev)
-			{
-				//print("playerchecker: KILL KILL KILL\n");
-				// player disconnected
-				SetTeam(e, -1);
-				RemovePlayer(e);
-				e.sort_prev = world;
-				//e.gotscores = 0;
-			}
-		}
-		else
-		{
-			if not(e.sort_prev)
-			{
-				//print("playerchecker: SPAWN SPAWN SPAWN\n");
-				// player connected
-				if not(e)
-					playerslots[i] = e = spawn();
-				e.sv_entnum = i;
-				//e.gotscores = 0; // we might already have the scores...
-				SetTeam(e, GetPlayerColor(i)); // will not hurt; later updates come with Sbar_UpdatePlayerTeams
-				RegisterPlayer(e);
-				Sbar_UpdatePlayerPos(e);
-			}
-		}
-	}
-	self.nextthink = time + 0.2;
-}
-
-void Porto_Init();
-void TrueAim_Init();
-void PostInit(void)
-{
-	print(strcat("PostInit\n    maxclients = ", ftos(maxclients), "\n"));
-	localcmd(strcat("\nsbar_columns_set ", cvar_string("sbar_columns"), ";\n"));
-
-	entity playerchecker;
-	playerchecker = spawn();
-	playerchecker.think = Playerchecker_Think;
-	playerchecker.nextthink = time + 0.2;
-
-	Porto_Init();
-	TrueAim_Init();
-
-	postinit = true;
-}
-
-// CSQC_ConsoleCommand : Used to parse commands in the console that have been registered with the "registercmd" function
-// Return value should be 1 if CSQC handled the command, otherwise return 0 to have the engine handle it.
-float button_zoom;
-void Cmd_Sbar_SetFields(float);
-void Cmd_Sbar_Help(float);
-float CSQC_ConsoleCommand(string strMessage)
-{
-	float argc;
-	// Tokenize String
-	//argc = tokenize(strMessage);
-	argc = tokenize_console(strMessage);
-
-	// Acquire Command
-	local string strCmd;
-	strCmd = argv(0);
-
-	if(strCmd == "+button4") { // zoom
-		// return false, because the message shall be sent to the server anyway (for demos/speccing)
-		if(ignore_plus_zoom)
-		{
-			--ignore_plus_zoom;
-			return false;
-		}
-		button_zoom = 1;
-		return true;
-	} else if(strCmd == "-button4") { // zoom
-		if(ignore_minus_zoom)
-		{
-			--ignore_minus_zoom;
-			return false;
-		}
-		button_zoom = 0;
-		return true;
-	} else if(strCmd == "+button3") { // secondary
-		button_attack2 = 1;
-		return false;
-	} else if(strCmd == "-button3") { // secondary
-		button_attack2 = 0;
-		return false;
-	} else if(strCmd == "+showscores") {
-		sb_showscores = true;
-		return true;
-	} else if(strCmd == "-showscores") {
-		sb_showscores = false;
-		return true;
-	} else if(strCmd == "+showaccuracy") {
-		sb_showaccuracy = true;
-		return true;
-	} else if(strCmd == "-showaccuracy") {
-		sb_showaccuracy = false;
-		return true;
-	}
-
-	if(camera_active)
-	if(strCmd == "+forward" || strCmd == "-back") {
-		++camera_direction_x;
-		return true;
-	} else if(strCmd == "-forward" || strCmd == "+back") {
-		--camera_direction_x;
-		return true;
-	} else if(strCmd == "+moveright" || strCmd == "-moveleft") {
-		--camera_direction_y;
-		return true;
-	} else if(strCmd == "-moveright" || strCmd == "+moveleft") {
-		++camera_direction_y;
-		return true;
-	} else if(strCmd == "+moveup" || strCmd == "-movedown") {
-		++camera_direction_z;
-		return true;
-	} else if(strCmd == "-moveup" || strCmd == "+movedown") {
-		--camera_direction_z;
-		return true;
-	} else if(strCmd == "+roll_right" || strCmd == "-roll_left") {
-		++camera_roll;
-		return true;
-	} else if(strCmd == "+roll_left" || strCmd == "-roll_right") {
-		--camera_roll;
-		return true;
-	}
-
-	return false;
-}
-
-.vector view_ofs;
-entity debug_shotorg;
-void ShotOrg_Draw()
-{
-	self.origin = view_origin + view_forward * self.view_ofs_x + view_right * self.view_ofs_y + view_up * self.view_ofs_z;
-	self.angles = view_angles;
-	self.angles_x = -self.angles_x;
-	if not(self.cnt)
-		R_AddEntity(self);
-}
-void ShotOrg_Draw2D()
-{
-	vector coord2d_topleft, coord2d_topright, coord2d;
-	string s;
-	vector fs;
-
-	s = vtos(self.view_ofs);
-	s = substring(s, 1, strlen(s) - 2);
-	if(tokenize_console(s) == 3)
-		s = strcat(argv(0), " ", argv(1), " ", argv(2));
-
-	coord2d_topleft = project_3d_to_2d(self.origin + view_up * 4 - view_right * 4);
-	coord2d_topright = project_3d_to_2d(self.origin + view_up * 4 + view_right * 4);
-
-	fs = '1 1 0' * ((coord2d_topright_x - coord2d_topleft_x) / stringwidth(s, FALSE));
-
-	coord2d = coord2d_topleft;
-	if(fs_x < 8)
-	{
-		coord2d_x += (coord2d_topright_x - coord2d_topleft_x) * (1 - 8 / fs_x) * 0.5;
-		fs = '8 8 0';
-	}
-	coord2d_y -= fs_y;
-	coord2d_z = 0;
-	drawstring(coord2d, s, fs, '1 1 1', 1, 0);
-}
-
-void ShotOrg_Spawn()
-{
-	debug_shotorg = spawn();
-	debug_shotorg.draw = ShotOrg_Draw;
-	debug_shotorg.draw2d = ShotOrg_Draw2D;
-	debug_shotorg.renderflags = RF_VIEWMODEL;
-	debug_shotorg.effects = EF_FULLBRIGHT;
-	precache_model("models/shotorg_adjuster.md3");
-	setmodel(debug_shotorg, "models/shotorg_adjuster.md3");
-	debug_shotorg.scale = 2;
-	debug_shotorg.view_ofs = '25 8 -8';
-}
-
-void GameCommand(string msg)
-{
-	float argc;
-	argc = tokenize_console(msg);
-
-	if(argv(0) == "help" || argc == 0)
-	{
-		print("Usage: cl_cmd COMMAND..., where possible commands are:\n");
-		print("  settemp cvar value\n");
-		print("  radar\n");
-		print("  sbar_columns_set ...\n");
-		print("  sbar_columns_help\n");
-		GameCommand_Generic("help");
-		return;
-	}
-
-	if(GameCommand_Generic(msg))
-		return;
-
-	string cmd;
-	cmd = argv(0);
-	if(cmd == "mv_download") {
-		Cmd_MapVote_MapDownload(argc);
-	}
-	else if(cmd == "settemp") {
-		cvar_clientsettemp(argv(1), argv(2));
-	}
-	else if(cmd == "radar") {
-		ons_showmap = !ons_showmap;
-	}
-	else if(cmd == "sbar_columns_set") {
-		Cmd_Sbar_SetFields(argc);
-	}
-	else if(cmd == "sbar_columns_help") {
-		Cmd_Sbar_Help(argc);
-	}
-#ifdef BLURTEST
-	else if(cmd == "blurtest") {
-		blurtest_time0 = time;
-		blurtest_time1 = time + stof(argv(1));
-		blurtest_radius = stof(argv(2));
-		blurtest_power = stof(argv(3));
-	}
-#endif
-	else if(cmd == "shotorg_move") {
-		if(!debug_shotorg)
-			ShotOrg_Spawn();
-		else
-			debug_shotorg.view_ofs = debug_shotorg.view_ofs + stov(argv(1));
-		localcmd("sv_cmd debug_shotorg \"", vtos(debug_shotorg.view_ofs), "\"\n");
-	}
-	else if(cmd == "shotorg_movez") {
-		if(!debug_shotorg)
-			ShotOrg_Spawn();
-		else
-			debug_shotorg.view_ofs = debug_shotorg.view_ofs + stof(argv(1)) * (debug_shotorg.view_ofs * (1 / debug_shotorg.view_ofs_x)); // closer/farther, same xy pos
-		localcmd("sv_cmd debug_shotorg \"", vtos(debug_shotorg.view_ofs), "\"\n");
-	}
-	else if(cmd == "shotorg_set") {
-		if(!debug_shotorg)
-			ShotOrg_Spawn();
-		else
-			debug_shotorg.view_ofs = stov(argv(1));
-		localcmd("sv_cmd debug_shotorg \"", vtos(debug_shotorg.view_ofs), "\"\n");
-	}
-	else if(cmd == "shotorg_setz") {
-		if(!debug_shotorg)
-			ShotOrg_Spawn();
-		else
-			debug_shotorg.view_ofs = debug_shotorg.view_ofs * (stof(argv(1)) / debug_shotorg.view_ofs_x); // closer/farther, same xy pos
-		localcmd("sv_cmd debug_shotorg \"", vtos(debug_shotorg.view_ofs), "\"\n");
-	}
-	else if(cmd == "shotorg_toggle_hide") {
-		if(debug_shotorg)
-		{
-			debug_shotorg.cnt = !debug_shotorg.cnt;
-		}
-	}
-	else if(cmd == "shotorg_end") {
-		if(debug_shotorg)
-		{
-			print(vtos(debug_shotorg.view_ofs), "\n");
-			remove(debug_shotorg);
-			debug_shotorg = world;
-		}
-		localcmd("sv_cmd debug_shotorg\n");
-	}
-	else
-	{
-		print("Invalid command. For a list of supported commands, try cl_cmd help.\n");
-	}
-
-	return;
-}
-
-// CSQC_InputEvent : Used to perform actions based on any key pressed, key released and mouse on the client.
-// Return value should be 1 if CSQC handled the input, otherwise return 0 to have the input passed to the engine.
-// All keys are in ascii.
-// bInputType = 0 is key pressed, 1 is key released, 2 is mouse input.
-// In the case of keyboard input, nPrimary is the ascii code, and nSecondary is 0.
-// In the case of mouse input, nPrimary is xdelta, nSecondary is ydelta.
-float CSQC_InputEvent(float bInputType, float nPrimary, float nSecondary)
-{
-	local float bSkipKey;
-	bSkipKey = false;
-
-	if(menu_visible)
-		if(menu_action(bInputType, nPrimary, nSecondary))
-			return TRUE;
-	return bSkipKey;
-}
-
-// END REQUIRED CSQC FUNCTIONS
-// --------------------------------------------------------------------------
-
-// --------------------------------------------------------------------------
-// BEGIN OPTIONAL CSQC FUNCTIONS
-void Ent_ReadEntCS()
-{
-	InterpolateOrigin_Undo();
-
-	self.classname = "entcs_receiver";
-	self.sv_entnum = ReadByte() - 1;
-	self.origin_x = ReadShort();
-	self.origin_y = ReadShort();
-	self.origin_z = ReadShort();
-	self.angles_y = ReadByte() * 360.0 / 256;
-	self.origin_z = self.angles_x = self.angles_z = 0;
-
-	InterpolateOrigin_Note();
-}
-
-void Ent_Remove();
-
-void Ent_RemovePlayerScore()
-{
-	float i;
-
-	if(self.owner)
-	{
-		SetTeam(self.owner, -1);
-		self.owner.gotscores = 0;
-		for(i = 0; i < MAX_SCORE; ++i)
-			self.owner.(scores[i]) = 0; // clear all scores
-	}
-}
-
-void Ent_ReadPlayerScore()
-{
-	float i, n;
-	float isNew;
-	entity o;
-
-	// damnit -.- don't want to go change every single .sv_entnum in sbar.qc AGAIN
-	// (no I've never heard of M-x replace-string, sed, or anything like that)
-	isNew = !self.owner; // workaround for DP bug
-	n = ReadByte()-1;
-
-#ifdef DP_CSQC_ENTITY_REMOVE_IS_B0RKED
-	if(!isNew && n != self.sv_entnum)
-	{
-		print("A CSQC entity changed its owner!\n");
-		isNew = true;
-		Ent_Remove();
-		self.enttype = ENT_CLIENT_SCORES;
-	}
-#endif
-
-	self.sv_entnum = n;
-
-	if not(playerslots[self.sv_entnum])
-		playerslots[self.sv_entnum] = spawn();
-	o = self.owner = playerslots[self.sv_entnum];
-	o.sv_entnum = self.sv_entnum;
-	o.gotscores = 1;
-
-	//if not(o.sort_prev)
-	//	RegisterPlayer(o);
-	//playerchecker will do this for us later, if it has not already done so
-
-#if MAX_SCORE <= 3
-	for(i = 0; i < MAX_SCORE; ++i)
-		o.(scores[i]) = ReadShort();
-#else
-	float sf;
-#if MAX_SCORE <= 8
-	sf = ReadByte();
-#else
-	sf = ReadShort();
-#endif
-	float p;
-	for(i = 0, p = 1; i < MAX_SCORE; ++i, p *= 2)
-		if(sf & p)
-			o.(scores[i]) = ReadShort();
-#endif
-
-	if(o.sort_prev)
-		Sbar_UpdatePlayerPos(o); // if not registered, we cannot do this yet!
-
-	self.entremove = Ent_RemovePlayerScore;
-}
-
-void Ent_ReadTeamScore()
-{
-	float i;
-	entity o;
-
-	self.team = ReadByte();
-	o = self.owner = GetTeam(self.team, true);
-
-#if MAX_TEAMSCORE <= 3
-	for(i = 0; i < MAX_TEAMSCORE; ++i)
-		o.(teamscores[i]) = ReadShort();
-#else
-	float sf;
-#if MAX_TEAMSCORE <= 8
-	sf = ReadByte();
-#else
-	sf = ReadShort();
-#endif
-	float p;
-	for(i = 0, p = 1; i < MAX_TEAMSCORE; ++i, p *= 2)
-		if(sf & p)
-			o.(teamscores[i]) = ReadShort();
-#endif
-
-	Sbar_UpdateTeamPos(o);
-}
-
-void Net_Reset()
-{
-}
-
-void Ent_ClientData()
-{
-	float f;
-	float newspectatee_status;
-
-	f = ReadByte();
-
-	sb_showscores_force = (f & 1);
-
-	if(f & 2)
-	{
-		newspectatee_status = ReadByte();
-		if(newspectatee_status == player_localentnum)
-			newspectatee_status = -1; // observing
-	}
-	else
-		newspectatee_status = 0;
-
-	spectatorbutton_zoom = (f & 4);
-
-	if(f & 8)
-	{
-		angles_held_status = 1;
-		angles_held_x = ReadAngle();
-		angles_held_y = ReadAngle();
-		angles_held_z = 0;
-	}
-	else
-		angles_held_status = 0;
-
-	if(newspectatee_status != spectatee_status)
-	{
-		// clear race stuff
-		race_laptime = 0;
-		race_checkpointtime = 0;
-	}
-	spectatee_status = newspectatee_status;
-}
-
-void Ent_Nagger()
-{
-	float nags, i, j, b, f;
-
-	nags = ReadByte();
-
-	if(nags & 128)
-	{
-		if(vote_called_vote)
-			strunzone(vote_called_vote);
-		vote_called_vote = strzone(ColorTranslateRGB(ReadString()));
-	}
-
-	if(nags & 1)
-	{
-		for(j = 0; j < maxclients; ++j)
-			if(playerslots[j])
-				playerslots[j].ready = 1;
-		for(i = 1; i <= maxclients; i += 8)
-		{
-			f = ReadByte();
-			for(j = i-1, b = 1; b < 256; b *= 2, ++j)
-				if not(f & b)
-					if(playerslots[j])
-						playerslots[j].ready = 0;
-		}
-	}
-
-	ready_waiting = (nags & 1);
-	ready_waiting_for_me = (nags & 2);
-	vote_waiting = (nags & 4);
-	vote_waiting_for_me = (nags & 8);
-	warmup_stage = (nags & 16);
-}
-
-void Ent_RandomSeed()
-{
-	float s;
-	prandom_debug();
-	s = ReadShort();
-	psrandom(s);
-}
-
-// CSQC_Ent_Update : Called every frame that the server has indicated an update to the SSQC / CSQC entity has occured.
-// The only parameter reflects if the entity is "new" to the client, meaning it just came into the client's PVS.
-void Ent_RadarLink();
-void Ent_Init();
-void Ent_ScoresInfo();
-void(float bIsNewEntity) CSQC_Ent_Update =
-{
-	float t;
-	float savetime;
-	t = ReadByte();
-
-	// set up the "time" global for received entities to be correct for interpolation purposes
-	savetime = time;
-	if(servertime)
-	{
-		time = servertime;
-	}
-	else
-	{
-		serverprevtime = time;
-		serverdeltatime = getstatf(STAT_MOVEVARS_TICRATE) * getstatf(STAT_MOVEVARS_TIMESCALE);
-		time = serverprevtime + serverdeltatime;
-	}
-
-#ifdef DP_CSQC_ENTITY_REMOVE_IS_B0RKED
-	if(self.enttype)
-		if(t != self.enttype)
-		{
-			print("A CSQC entity changed its type!\n");
-			Ent_Remove();
-		}
-#endif
-	self.enttype = t;
-	switch(t)
-	{
-		case ENT_CLIENT_ENTCS: Ent_ReadEntCS(); break;
-		case ENT_CLIENT_SCORES: Ent_ReadPlayerScore(); break;
-		case ENT_CLIENT_TEAMSCORES: Ent_ReadTeamScore(); break;
-		case ENT_CLIENT_POINTPARTICLES: Ent_PointParticles(); break;
-		case ENT_CLIENT_RAINSNOW: Ent_RainOrSnow(); break;
-		case ENT_CLIENT_LASER: Ent_Laser(); break;
-		case ENT_CLIENT_NAGGER: Ent_Nagger(); break;
-		case ENT_CLIENT_WAYPOINT: Ent_WaypointSprite(); break;
-		case ENT_CLIENT_RADARLINK: Ent_RadarLink(); break;
-		case ENT_CLIENT_PROJECTILE: Ent_Projectile(); break;
-		case ENT_CLIENT_GIBSPLASH: Ent_GibSplash(); break;
-		case ENT_CLIENT_DAMAGEINFO: Ent_DamageInfo(); break;
-		case ENT_CLIENT_CASING: Ent_Casing(); break;
-		case ENT_CLIENT_INIT: Ent_Init(); break;
-		case ENT_CLIENT_SCORES_INFO: Ent_ScoresInfo(); break;
-		case ENT_CLIENT_MAPVOTE: Ent_MapVote(); break;
-		case ENT_CLIENT_CLIENTDATA: Ent_ClientData(); break;
-		case ENT_CLIENT_RANDOMSEED: Ent_RandomSeed(); break;
-		case ENT_CLIENT_WALL: Ent_Wall(); break;
-		default:
-			error(strcat("unknown entity type in CSQC_Ent_Update: ", ftos(self.enttype), "\n"));
-			break;
-	}
-
-	time = savetime;
-};
-// Destructor, but does NOT deallocate the entity by calling remove(). Also
-// used when an entity changes its type. For an entity that someone interacts
-// with others, make sure it can no longer do so.
-void Ent_Remove()
-{
-	if(self.entremove)
-		self.entremove();
-
-	self.enttype = 0;
-	self.classname = "";
-	self.draw = menu_sub_null;
-	self.entremove = menu_sub_null;
-	// TODO possibly set more stuff to defaults
-}
-// CSQC_Ent_Remove : Called when the server requests a SSQC / CSQC entity to be removed.  Essentially call remove(self) as well.
-void CSQC_Ent_Remove()
-{
-	if(self.enttype)
-		Ent_Remove();
-	remove(self);
-}
-
-void Gamemode_Init()
-{
-	if(gametype == GAME_ONSLAUGHT) {
-		print(strcat("Using ", minimapname, " as minimap.\n"));
-		precache_pic("gfx/ons-cp-neutral.tga");
-		precache_pic("gfx/ons-cp-red.tga");
-		precache_pic("gfx/ons-cp-blue.tga");
-		precache_pic("gfx/ons-frame.tga");
-		precache_pic("gfx/ons-frame-team.tga");
-	} else if(gametype == GAME_KEYHUNT) {
-		precache_pic("gfx/sb_key_carrying");
-		precache_pic("gfx/sb_key_carrying_outline");
-	}
-}
-// CSQC_Parse_StuffCmd : Provides the stuffcmd string in the first parameter that the server provided.  To execute standard behavior, simply execute localcmd with the string.
-void CSQC_Parse_StuffCmd(string strMessage)
-{
-	localcmd(strMessage);
-}
-// CSQC_Parse_Print : Provides the print string in the first parameter that the server provided.  To execute standard behavior, simply execute print with the string.
-void CSQC_Parse_Print(string strMessage)
-{
-	print(ColorTranslateRGB(strMessage));
-}
-
-// CSQC_Parse_CenterPrint : Provides the centerprint string in the first parameter that the server provided.
-void CSQC_Parse_CenterPrint(string strMessage)
-{
-	centerprint(strMessage);
-}
-
-void Fog_Force()
-{
-	// TODO somehow thwart prvm_globalset client ...
-
-	if(forcefog != "")
-		localcmd(strcat("\nfog ", forcefog, "\nr_fog_exp2 0\nr_drawfog 1\n"));
-}
-
-void Gamemode_Init();
-void Ent_ScoresInfo()
-{
-	float i;
-	self.classname = "ent_client_scores_info";
-	gametype = ReadByte();
-	for(i = 0; i < MAX_SCORE; ++i)
-	{
-		scores_label[i] = strzone(ReadString());
-		scores_flags[i] = ReadByte();
-	}
-	for(i = 0; i < MAX_TEAMSCORE; ++i)
-	{
-		teamscores_label[i] = strzone(ReadString());
-		teamscores_flags[i] = ReadByte();
-	}
-	Sbar_InitScores();
-	Gamemode_Init();
-}
-
-void Ent_Init()
-{
-	float i;
-	self.classname = "ent_client_init";
-
-	nb_pb_period = ReadByte() / 32; //Accuracy of 1/32th
-
-	for(i = 0; i < 24; ++i)
-		weaponimpulse[i] = ReadByte() - 1;
-	hook_shotorigin_x = ReadCoord();
-	hook_shotorigin_y = ReadCoord();
-	hook_shotorigin_z = ReadCoord();
-
-	if(forcefog)
-		strunzone(forcefog);
-	forcefog = strzone(ReadString());
-
-	armorblockpercent = ReadByte() / 255.0;
-
-	if(!postinit)
-		PostInit();
-}
-
-void Net_ReadRace()
-{
-	float b;
-
-	b = ReadByte();
-
-	switch(b)
-	{
-		case RACE_NET_CHECKPOINT_HIT_QUALIFYING:
-			race_checkpoint = ReadByte();
-			race_time = ReadShort();
-			race_previousbesttime = ReadShort();
-			if(race_previousbestname)
-				strunzone(race_previousbestname);
-			race_previousbestname = strzone(ColorTranslateRGB(ReadString()));
-
-			race_checkpointtime = time;
-
-			if(race_checkpoint == 0)
-				race_laptime = time; // valid
-
-			break;
-
-		case RACE_NET_CHECKPOINT_CLEAR:
-			race_laptime = 0;
-			race_checkpointtime = 0;
-			break;
-
-		case RACE_NET_CHECKPOINT_NEXT_SPEC_QUALIFYING:
-			race_laptime = ReadCoord();
-			race_checkpointtime = -99999;
-			// fall through
-		case RACE_NET_CHECKPOINT_NEXT_QUALIFYING:
-			race_nextcheckpoint = ReadByte();
-
-			race_nextbesttime = ReadShort();
-			if(race_nextbestname)
-				strunzone(race_nextbestname);
-			race_nextbestname = strzone(ColorTranslateRGB(ReadString()));
-			break;
-
-		case RACE_NET_CHECKPOINT_HIT_RACE:
-			race_mycheckpoint = ReadByte();
-			race_mycheckpointtime = time;
-			race_mycheckpointdelta = ReadShort();
-			race_mycheckpointlapsdelta = ReadByte();
-			if(race_mycheckpointlapsdelta >= 128)
-				race_mycheckpointlapsdelta -= 256;
-			if(race_mycheckpointenemy)
-				strunzone(race_mycheckpointenemy);
-			race_mycheckpointenemy = strzone(ColorTranslateRGB(ReadString()));
-			break;
-
-		case RACE_NET_CHECKPOINT_HIT_RACE_BY_OPPONENT:
-			race_othercheckpoint = ReadByte();
-			race_othercheckpointtime = time;
-			race_othercheckpointdelta = ReadShort();
-			race_othercheckpointlapsdelta = ReadByte();
-			if(race_othercheckpointlapsdelta >= 128)
-				race_othercheckpointlapsdelta -= 256;
-			if(race_othercheckpointenemy)
-				strunzone(race_othercheckpointenemy);
-			race_othercheckpointenemy = strzone(ColorTranslateRGB(ReadString()));
-			break;
-	}
-}
-
-void Net_ReadSpawn()
-{
-	zoomin_effect = 1;
-	current_viewzoom = 0.6;
-}
-
-// CSQC_Parse_TempEntity : Handles all temporary entity network data in the CSQC layer.
-// You must ALWAYS first acquire the temporary ID, which is sent as a byte.
-// Return value should be 1 if CSQC handled the temporary entity, otherwise return 0 to have the engine process the event.
-float CSQC_Parse_TempEntity()
-{
-	local float bHandled;
-		bHandled  = true;
-	// Acquire TE ID
-	local float nTEID;
-		nTEID = ReadByte();
-
-		// NOTE: Could just do return instead of break...
-	switch(nTEID)
-	{
-		case TE_CSQC_PICTURE:
-			Net_MapVote_Picture();
-			bHandled = true;
-			break;
-		case TE_CSQC_RACE:
-			Net_ReadRace();
-			bHandled = true;
-			break;
-		case 13: // TE_BEAM
-			Net_GrapplingHook();
-			bHandled = true;
-			break;
-		case TE_CSQC_SPAWN:
-			Net_ReadSpawn();
-			bHandled = true;
-			break;
-		case TE_CSQC_ZCURVEPARTICLES:
-			Net_ReadZCurveParticles();
-			bHandled = true;
-			break;
-		case TE_CSQC_NEXGUNBEAMPARTICLE:
-			Net_ReadNexgunBeamParticle();
-			bHandled = true;
-			break;
-        case TE_CSQC_LIGHTNINGARC:
-            Net_ReadLightningarc();
-            bHandled = true;
-            break;
-		default:
-			// No special logic for this temporary entity; return 0 so the engine can handle it
-			bHandled = false;
-			break;
-	}
-
-	return bHandled;
-}
-
-string getcommandkey(string text, string command)
-{
-	string keys;
-	float n, j, k, l;
-
-	if (!sbar_showbinds)
-		return text;
-
-	keys = db_get(binddb, command);
-	if (!keys)
-	{
-		n = tokenize(findkeysforcommand(command)); // uses '...' strings
-		for(j = 0; j < n; ++j)
-		{
-			k = stof(argv(j));
-			if(k != -1)
-			{
-				if ("" == keys)
-					keys = keynumtostring(k);
-				else
-					keys = strcat(keys, ", ", keynumtostring(k));
-
-				++l;
-				if (sbar_showbinds_limit > 0 && sbar_showbinds_limit >= l) break;
-			}
-
-		}
-		db_put(binddb, command, keys);
-	}
-
-	if ("" == keys) {
-		if (sbar_showbinds > 1)
-			return strcat(text, " (not bound)");
-		else
-			return text;
-	}
-	else if (sbar_showbinds > 1)
-		return strcat(text, " (", keys, ")");
-	else
-		return keys;
-}
+// --------------------------------------------------------------------------
+// BEGIN REQUIRED CSQC FUNCTIONS
+//include "main.qh"
+
+#define DP_CSQC_ENTITY_REMOVE_IS_B0RKED
+
+void cvar_clientsettemp(string cv, string val)
+{
+	entity e;
+	for(e = world; (e = find(e, classname, "saved_cvar_value")); )
+		if(e.netname == cv)
+			goto saved;
+	e = spawn();
+	e.classname = "saved_cvar_value";
+	e.netname = strzone(cv);
+	e.message = strzone(cvar_string(cv));
+:saved
+	cvar_set(cv, val);
+}
+
+void cvar_clientsettemp_restore()
+{
+	entity e;
+	for(e = world; (e = find(e, classname, "saved_cvar_value")); )
+			cvar_set(e.netname, e.message);
+}
+
+void() menu_show_error =
+{
+	drawstring('0 200 0', "ERROR - MENU IS VISIBLE BUT NO MENU WAS DEFINED!", '8 8 0', '1 0 0', 1, 0);
+};
+
+// CSQC_Init : Called every time the CSQC code is initialized (essentially at map load)
+// Useful for precaching things
+
+void() menu_sub_null =
+{
+};
+
+#ifdef USE_FTE
+float __engine_check;
+#endif
+
+string forcefog;
+void WaypointSprite_Load();
+void CSQC_Init(void)
+{
+#ifdef USE_FTE
+#pragma target ID
+	__engine_check = checkextension("DP_SV_WRITEPICTURE");
+	if(!__engine_check)
+	{
+		print("^3Your engine build is outdated\n^3This Server uses a newer QC VM. Please update!\n");
+		localcmd("\ndisconnect\n");
+		return;
+	}
+#pragma target FTE
+#endif
+	
+	check_unacceptable_compiler_bugs();
+
+	float i;
+	CSQC_CheckEngine();
+	dprint_load();
+
+	binddb = db_create();
+	tempdb = db_create();
+	compressShortVector_init();
+
+	drawfont = 0;
+	menu_visible = FALSE;
+	menu_show = menu_show_error;
+	menu_action = menu_sub_null;
+
+	for(i = 0; i < 255; ++i)
+		if(getplayerkey(i, "viewentity") == "")
+			break;
+	maxclients = i;
+
+	//ctf_temp_1 = "";
+	// localcmd("alias order \"cmd order $*\""); enable if ctf-command thingy is used
+	//registercmd("ctf_menu");
+	registercmd("ons_map");
+	//registercmd("menu_action");
+
+	registercmd("+button3");
+	registercmd("-button3");
+	registercmd("+button4");
+	registercmd("-button4");
+	registercmd("+showaccuracy");registercmd("-showaccuracy");
+
+#ifndef CAMERATEST
+	if(isdemo())
+	{
+#endif
+		registercmd("+forward");registercmd("-forward");
+		registercmd("+back");registercmd("-back");
+		registercmd("+moveup");registercmd("-moveup");
+		registercmd("+movedown");registercmd("-movedown");
+		registercmd("+moveright");registercmd("-moveright");
+		registercmd("+moveleft");registercmd("-moveleft");
+		registercmd("+roll_right");registercmd("-roll_right");
+		registercmd("+roll_left");registercmd("-roll_left");
+#ifndef CAMERATEST
+	}
+#endif
+	registercvar("sbar_usecsqc", "1");
+	registercvar("sbar_columns", "default", CVAR_SAVE);
+
+	gametype = 0;
+
+	// sbar_fields uses strunzone on the titles!
+	for(i = 0; i < MAX_SBAR_FIELDS; ++i)
+		sbar_title[i] = strzone("(null)");
+
+	postinit = false;
+
+	teams = Sort_Spawn();
+	players = Sort_Spawn();
+
+	GetTeam(COLOR_SPECTATOR, true); // add specs first
+
+	cvar_clientsettemp("_supports_weaponpriority", "1");
+
+
+
+
+	cs_project_is_b0rked = TRUE;
+	R_SetView(VF_VIEWPORT, '0 0 0', '640 480 0');
+	R_SetView(VF_FOV, '90 90 0');
+	R_SetView(VF_ORIGIN, '0 0 0');
+	R_SetView(VF_ANGLES, '0 0 0');
+	R_SetView(VF_PERSPECTIVE, 1);
+	makevectors('0 0 0');
+	vector v;
+	v = cs_project(v_forward);
+	if(v_x - 320 < +1)
+	if(v_x - 320 > -1)
+	if(v_y - 240 < +1)
+	if(v_y - 240 > -1)
+		cs_project_is_b0rked = FALSE;
+
+	RegisterWeapons();
+
+	WaypointSprite_Load();
+
+	Projectile_Precache();
+	GibSplash_Precache();
+	Casings_Precache();
+	DamageInfo_Precache();
+	Announcer_Precache();
+
+	get_mi_min_max_texcoords(1); // try the CLEVER way first
+	minimapname = strcat("gfx/", mi_shortname, "_radar.tga");
+	shortmapname = mi_shortname;
+
+	if(precache_pic(minimapname) == "")
+	{
+		// but maybe we have a non-clever minimap
+		minimapname = strcat("gfx/", mi_shortname, "_mini.tga");
+		if(precache_pic(minimapname) == "")
+			minimapname = ""; // FAIL
+		else
+			get_mi_min_max_texcoords(0); // load new texcoords
+	}
+
+	mi_center = (mi_min + mi_max) * 0.5;
+	mi_scale = mi_max - mi_min;
+	minimapname = strzone(minimapname);
+}
+
+// CSQC_Shutdown : Called every time the CSQC code is shutdown (changing maps, quitting, etc)
+void CSQC_Shutdown(void)
+{
+#ifdef USE_FTE
+#pragma TARGET id
+	if(!__engine_check)
+		return 0;
+#pragma TARGET fte
+#endif
+
+	remove(teams);
+	remove(players);
+	db_close(binddb);
+	db_close(tempdb);
+
+	cvar_clientsettemp_restore();
+
+	if(camera_active)
+		cvar_set("chase_active",ftos(chase_active_backup));
+}
+
+.float has_team;
+float SetTeam(entity o, float Team)
+{
+	entity tm;
+	if(Team == -1) // leave
+	{
+		if(o.has_team)
+		{
+			//print("(DISCONNECT) leave team ", ftos(o.team), "\n");
+			tm = GetTeam(o.team, false);
+			tm.team_size -= 1;
+			o.has_team = 0;
+			return TRUE;
+		}
+	}
+	else
+	{
+		if not(o.has_team)
+		{
+			//print("(CONNECT) enter team ", ftos(o.team), "\n");
+			o.team = Team;
+			tm = GetTeam(Team, true);
+			tm.team_size += 1;
+			o.has_team = 1;
+			return TRUE;
+		}
+		else if(Team != o.team)
+		{
+			//print("(CHANGE) leave team ", ftos(o.team), "\n");
+			tm = GetTeam(o.team, false);
+			tm.team_size -= 1;
+			o.team = Team;
+			//print("(CHANGE) enter team ", ftos(o.team), "\n");
+			tm = GetTeam(Team, true);
+			tm.team_size += 1;
+			return TRUE;
+		}
+	}
+	return FALSE;
+}
+
+void Playerchecker_Think()
+{
+	float i;
+	entity e;
+	for(i = 0; i < maxclients; ++i)
+	{
+		e = playerslots[i];
+		if(GetPlayerName(i) == "")
+		{
+			if(e.sort_prev)
+			{
+				//print("playerchecker: KILL KILL KILL\n");
+				// player disconnected
+				SetTeam(e, -1);
+				RemovePlayer(e);
+				e.sort_prev = world;
+				//e.gotscores = 0;
+			}
+		}
+		else
+		{
+			if not(e.sort_prev)
+			{
+				//print("playerchecker: SPAWN SPAWN SPAWN\n");
+				// player connected
+				if not(e)
+					playerslots[i] = e = spawn();
+				e.sv_entnum = i;
+				//e.gotscores = 0; // we might already have the scores...
+				SetTeam(e, GetPlayerColor(i)); // will not hurt; later updates come with Sbar_UpdatePlayerTeams
+				RegisterPlayer(e);
+				Sbar_UpdatePlayerPos(e);
+			}
+		}
+	}
+	self.nextthink = time + 0.2;
+}
+
+void Porto_Init();
+void TrueAim_Init();
+void PostInit(void)
+{
+	print(strcat("PostInit\n    maxclients = ", ftos(maxclients), "\n"));
+	localcmd(strcat("\nsbar_columns_set ", cvar_string("sbar_columns"), ";\n"));
+
+	entity playerchecker;
+	playerchecker = spawn();
+	playerchecker.think = Playerchecker_Think;
+	playerchecker.nextthink = time + 0.2;
+
+	Porto_Init();
+	TrueAim_Init();
+
+	postinit = true;
+}
+
+// CSQC_ConsoleCommand : Used to parse commands in the console that have been registered with the "registercmd" function
+// Return value should be 1 if CSQC handled the command, otherwise return 0 to have the engine handle it.
+float button_zoom;
+void Cmd_Sbar_SetFields(float);
+void Cmd_Sbar_Help(float);
+float CSQC_ConsoleCommand(string strMessage)
+{
+	float argc;
+	// Tokenize String
+	//argc = tokenize(strMessage);
+	argc = tokenize_console(strMessage);
+
+	// Acquire Command
+	local string strCmd;
+	strCmd = argv(0);
+
+	if(strCmd == "+button4") { // zoom
+		// return false, because the message shall be sent to the server anyway (for demos/speccing)
+		if(ignore_plus_zoom)
+		{
+			--ignore_plus_zoom;
+			return false;
+		}
+		button_zoom = 1;
+		return true;
+	} else if(strCmd == "-button4") { // zoom
+		if(ignore_minus_zoom)
+		{
+			--ignore_minus_zoom;
+			return false;
+		}
+		button_zoom = 0;
+		return true;
+	} else if(strCmd == "+button3") { // secondary
+		button_attack2 = 1;
+		return false;
+	} else if(strCmd == "-button3") { // secondary
+		button_attack2 = 0;
+		return false;
+	} else if(strCmd == "+showscores") {
+		sb_showscores = true;
+		return true;
+	} else if(strCmd == "-showscores") {
+		sb_showscores = false;
+		return true;
+	} else if(strCmd == "+showaccuracy") {
+		sb_showaccuracy = true;
+		return true;
+	} else if(strCmd == "-showaccuracy") {
+		sb_showaccuracy = false;
+		return true;
+	}
+
+	if(camera_active)
+	if(strCmd == "+forward" || strCmd == "-back") {
+		++camera_direction_x;
+		return true;
+	} else if(strCmd == "-forward" || strCmd == "+back") {
+		--camera_direction_x;
+		return true;
+	} else if(strCmd == "+moveright" || strCmd == "-moveleft") {
+		--camera_direction_y;
+		return true;
+	} else if(strCmd == "-moveright" || strCmd == "+moveleft") {
+		++camera_direction_y;
+		return true;
+	} else if(strCmd == "+moveup" || strCmd == "-movedown") {
+		++camera_direction_z;
+		return true;
+	} else if(strCmd == "-moveup" || strCmd == "+movedown") {
+		--camera_direction_z;
+		return true;
+	} else if(strCmd == "+roll_right" || strCmd == "-roll_left") {
+		++camera_roll;
+		return true;
+	} else if(strCmd == "+roll_left" || strCmd == "-roll_right") {
+		--camera_roll;
+		return true;
+	}
+
+	return false;
+}
+
+.vector view_ofs;
+entity debug_shotorg;
+void ShotOrg_Draw()
+{
+	self.origin = view_origin + view_forward * self.view_ofs_x + view_right * self.view_ofs_y + view_up * self.view_ofs_z;
+	self.angles = view_angles;
+	self.angles_x = -self.angles_x;
+	if not(self.cnt)
+		R_AddEntity(self);
+}
+void ShotOrg_Draw2D()
+{
+	vector coord2d_topleft, coord2d_topright, coord2d;
+	string s;
+	vector fs;
+
+	s = vtos(self.view_ofs);
+	s = substring(s, 1, strlen(s) - 2);
+	if(tokenize_console(s) == 3)
+		s = strcat(argv(0), " ", argv(1), " ", argv(2));
+
+	coord2d_topleft = project_3d_to_2d(self.origin + view_up * 4 - view_right * 4);
+	coord2d_topright = project_3d_to_2d(self.origin + view_up * 4 + view_right * 4);
+
+	fs = '1 1 0' * ((coord2d_topright_x - coord2d_topleft_x) / stringwidth(s, FALSE));
+
+	coord2d = coord2d_topleft;
+	if(fs_x < 8)
+	{
+		coord2d_x += (coord2d_topright_x - coord2d_topleft_x) * (1 - 8 / fs_x) * 0.5;
+		fs = '8 8 0';
+	}
+	coord2d_y -= fs_y;
+	coord2d_z = 0;
+	drawstring(coord2d, s, fs, '1 1 1', 1, 0);
+}
+
+void ShotOrg_Spawn()
+{
+	debug_shotorg = spawn();
+	debug_shotorg.draw = ShotOrg_Draw;
+	debug_shotorg.draw2d = ShotOrg_Draw2D;
+	debug_shotorg.renderflags = RF_VIEWMODEL;
+	debug_shotorg.effects = EF_FULLBRIGHT;
+	precache_model("models/shotorg_adjuster.md3");
+	setmodel(debug_shotorg, "models/shotorg_adjuster.md3");
+	debug_shotorg.scale = 2;
+	debug_shotorg.view_ofs = '25 8 -8';
+}
+
+void GameCommand(string msg)
+{
+	float argc;
+	argc = tokenize_console(msg);
+
+	if(argv(0) == "help" || argc == 0)
+	{
+		print("Usage: cl_cmd COMMAND..., where possible commands are:\n");
+		print("  settemp cvar value\n");
+		print("  radar\n");
+		print("  sbar_columns_set ...\n");
+		print("  sbar_columns_help\n");
+		GameCommand_Generic("help");
+		return;
+	}
+
+	if(GameCommand_Generic(msg))
+		return;
+
+	string cmd;
+	cmd = argv(0);
+	if(cmd == "mv_download") {
+		Cmd_MapVote_MapDownload(argc);
+	}
+	else if(cmd == "settemp") {
+		cvar_clientsettemp(argv(1), argv(2));
+	}
+	else if(cmd == "radar") {
+		ons_showmap = !ons_showmap;
+	}
+	else if(cmd == "sbar_columns_set") {
+		Cmd_Sbar_SetFields(argc);
+	}
+	else if(cmd == "sbar_columns_help") {
+		Cmd_Sbar_Help(argc);
+	}
+#ifdef BLURTEST
+	else if(cmd == "blurtest") {
+		blurtest_time0 = time;
+		blurtest_time1 = time + stof(argv(1));
+		blurtest_radius = stof(argv(2));
+		blurtest_power = stof(argv(3));
+	}
+#endif
+	else if(cmd == "shotorg_move") {
+		if(!debug_shotorg)
+			ShotOrg_Spawn();
+		else
+			debug_shotorg.view_ofs = debug_shotorg.view_ofs + stov(argv(1));
+		localcmd("sv_cmd debug_shotorg \"", vtos(debug_shotorg.view_ofs), "\"\n");
+	}
+	else if(cmd == "shotorg_movez") {
+		if(!debug_shotorg)
+			ShotOrg_Spawn();
+		else
+			debug_shotorg.view_ofs = debug_shotorg.view_ofs + stof(argv(1)) * (debug_shotorg.view_ofs * (1 / debug_shotorg.view_ofs_x)); // closer/farther, same xy pos
+		localcmd("sv_cmd debug_shotorg \"", vtos(debug_shotorg.view_ofs), "\"\n");
+	}
+	else if(cmd == "shotorg_set") {
+		if(!debug_shotorg)
+			ShotOrg_Spawn();
+		else
+			debug_shotorg.view_ofs = stov(argv(1));
+		localcmd("sv_cmd debug_shotorg \"", vtos(debug_shotorg.view_ofs), "\"\n");
+	}
+	else if(cmd == "shotorg_setz") {
+		if(!debug_shotorg)
+			ShotOrg_Spawn();
+		else
+			debug_shotorg.view_ofs = debug_shotorg.view_ofs * (stof(argv(1)) / debug_shotorg.view_ofs_x); // closer/farther, same xy pos
+		localcmd("sv_cmd debug_shotorg \"", vtos(debug_shotorg.view_ofs), "\"\n");
+	}
+	else if(cmd == "shotorg_toggle_hide") {
+		if(debug_shotorg)
+		{
+			debug_shotorg.cnt = !debug_shotorg.cnt;
+		}
+	}
+	else if(cmd == "shotorg_end") {
+		if(debug_shotorg)
+		{
+			print(vtos(debug_shotorg.view_ofs), "\n");
+			remove(debug_shotorg);
+			debug_shotorg = world;
+		}
+		localcmd("sv_cmd debug_shotorg\n");
+	}
+	else
+	{
+		print("Invalid command. For a list of supported commands, try cl_cmd help.\n");
+	}
+
+	return;
+}
+
+// CSQC_InputEvent : Used to perform actions based on any key pressed, key released and mouse on the client.
+// Return value should be 1 if CSQC handled the input, otherwise return 0 to have the input passed to the engine.
+// All keys are in ascii.
+// bInputType = 0 is key pressed, 1 is key released, 2 is mouse input.
+// In the case of keyboard input, nPrimary is the ascii code, and nSecondary is 0.
+// In the case of mouse input, nPrimary is xdelta, nSecondary is ydelta.
+float CSQC_InputEvent(float bInputType, float nPrimary, float nSecondary)
+{
+	local float bSkipKey;
+	bSkipKey = false;
+
+	if(menu_visible)
+		if(menu_action(bInputType, nPrimary, nSecondary))
+			return TRUE;
+	return bSkipKey;
+}
+
+// END REQUIRED CSQC FUNCTIONS
+// --------------------------------------------------------------------------
+
+// --------------------------------------------------------------------------
+// BEGIN OPTIONAL CSQC FUNCTIONS
+void Ent_ReadEntCS()
+{
+	InterpolateOrigin_Undo();
+
+	self.classname = "entcs_receiver";
+	self.sv_entnum = ReadByte() - 1;
+	self.origin_x = ReadShort();
+	self.origin_y = ReadShort();
+	self.origin_z = ReadShort();
+	self.angles_y = ReadByte() * 360.0 / 256;
+	self.origin_z = self.angles_x = self.angles_z = 0;
+
+	InterpolateOrigin_Note();
+}
+
+void Ent_Remove();
+
+void Ent_RemovePlayerScore()
+{
+	float i;
+
+	if(self.owner)
+	{
+		SetTeam(self.owner, -1);
+		self.owner.gotscores = 0;
+		for(i = 0; i < MAX_SCORE; ++i)
+			self.owner.(scores[i]) = 0; // clear all scores
+	}
+}
+
+void Ent_ReadPlayerScore()
+{
+	float i, n;
+	float isNew;
+	entity o;
+
+	// damnit -.- don't want to go change every single .sv_entnum in sbar.qc AGAIN
+	// (no I've never heard of M-x replace-string, sed, or anything like that)
+	isNew = !self.owner; // workaround for DP bug
+	n = ReadByte()-1;
+
+#ifdef DP_CSQC_ENTITY_REMOVE_IS_B0RKED
+	if(!isNew && n != self.sv_entnum)
+	{
+		print("A CSQC entity changed its owner!\n");
+		isNew = true;
+		Ent_Remove();
+		self.enttype = ENT_CLIENT_SCORES;
+	}
+#endif
+
+	self.sv_entnum = n;
+
+	if not(playerslots[self.sv_entnum])
+		playerslots[self.sv_entnum] = spawn();
+	o = self.owner = playerslots[self.sv_entnum];
+	o.sv_entnum = self.sv_entnum;
+	o.gotscores = 1;
+
+	//if not(o.sort_prev)
+	//	RegisterPlayer(o);
+	//playerchecker will do this for us later, if it has not already done so
+
+#if MAX_SCORE <= 3
+	for(i = 0; i < MAX_SCORE; ++i)
+		o.(scores[i]) = ReadShort();
+#else
+	float sf;
+#if MAX_SCORE <= 8
+	sf = ReadByte();
+#else
+	sf = ReadShort();
+#endif
+	float p;
+	for(i = 0, p = 1; i < MAX_SCORE; ++i, p *= 2)
+		if(sf & p)
+			o.(scores[i]) = ReadShort();
+#endif
+
+	if(o.sort_prev)
+		Sbar_UpdatePlayerPos(o); // if not registered, we cannot do this yet!
+
+	self.entremove = Ent_RemovePlayerScore;
+}
+
+void Ent_ReadTeamScore()
+{
+	float i;
+	entity o;
+
+	self.team = ReadByte();
+	o = self.owner = GetTeam(self.team, true);
+
+#if MAX_TEAMSCORE <= 3
+	for(i = 0; i < MAX_TEAMSCORE; ++i)
+		o.(teamscores[i]) = ReadShort();
+#else
+	float sf;
+#if MAX_TEAMSCORE <= 8
+	sf = ReadByte();
+#else
+	sf = ReadShort();
+#endif
+	float p;
+	for(i = 0, p = 1; i < MAX_TEAMSCORE; ++i, p *= 2)
+		if(sf & p)
+			o.(teamscores[i]) = ReadShort();
+#endif
+
+	Sbar_UpdateTeamPos(o);
+}
+
+void Net_Reset()
+{
+}
+
+void Ent_ClientData()
+{
+	float f;
+	float newspectatee_status;
+
+	f = ReadByte();
+
+	sb_showscores_force = (f & 1);
+
+	if(f & 2)
+	{
+		newspectatee_status = ReadByte();
+		if(newspectatee_status == player_localentnum)
+			newspectatee_status = -1; // observing
+	}
+	else
+		newspectatee_status = 0;
+
+	spectatorbutton_zoom = (f & 4);
+
+	if(f & 8)
+	{
+		angles_held_status = 1;
+		angles_held_x = ReadAngle();
+		angles_held_y = ReadAngle();
+		angles_held_z = 0;
+	}
+	else
+		angles_held_status = 0;
+
+	if(newspectatee_status != spectatee_status)
+	{
+		// clear race stuff
+		race_laptime = 0;
+		race_checkpointtime = 0;
+	}
+	spectatee_status = newspectatee_status;
+}
+
+void Ent_Nagger()
+{
+	float nags, i, j, b, f;
+
+	nags = ReadByte();
+
+	if(nags & 128)
+	{
+		if(vote_called_vote)
+			strunzone(vote_called_vote);
+		vote_called_vote = strzone(ColorTranslateRGB(ReadString()));
+	}
+
+	if(nags & 1)
+	{
+		for(j = 0; j < maxclients; ++j)
+			if(playerslots[j])
+				playerslots[j].ready = 1;
+		for(i = 1; i <= maxclients; i += 8)
+		{
+			f = ReadByte();
+			for(j = i-1, b = 1; b < 256; b *= 2, ++j)
+				if not(f & b)
+					if(playerslots[j])
+						playerslots[j].ready = 0;
+		}
+	}
+
+	ready_waiting = (nags & 1);
+	ready_waiting_for_me = (nags & 2);
+	vote_waiting = (nags & 4);
+	vote_waiting_for_me = (nags & 8);
+	warmup_stage = (nags & 16);
+}
+
+void Ent_RandomSeed()
+{
+	float s;
+	prandom_debug();
+	s = ReadShort();
+	psrandom(s);
+}
+
+// CSQC_Ent_Update : Called every frame that the server has indicated an update to the SSQC / CSQC entity has occured.
+// The only parameter reflects if the entity is "new" to the client, meaning it just came into the client's PVS.
+void Ent_RadarLink();
+void Ent_Init();
+void Ent_ScoresInfo();
+void(float bIsNewEntity) CSQC_Ent_Update =
+{
+	float t;
+	float savetime;
+	t = ReadByte();
+
+	// set up the "time" global for received entities to be correct for interpolation purposes
+	savetime = time;
+	if(servertime)
+	{
+		time = servertime;
+	}
+	else
+	{
+		serverprevtime = time;
+		serverdeltatime = getstatf(STAT_MOVEVARS_TICRATE) * getstatf(STAT_MOVEVARS_TIMESCALE);
+		time = serverprevtime + serverdeltatime;
+	}
+
+#ifdef DP_CSQC_ENTITY_REMOVE_IS_B0RKED
+	if(self.enttype)
+		if(t != self.enttype)
+		{
+			print("A CSQC entity changed its type!\n");
+			Ent_Remove();
+		}
+#endif
+	self.enttype = t;
+	switch(t)
+	{
+		case ENT_CLIENT_ENTCS: Ent_ReadEntCS(); break;
+		case ENT_CLIENT_SCORES: Ent_ReadPlayerScore(); break;
+		case ENT_CLIENT_TEAMSCORES: Ent_ReadTeamScore(); break;
+		case ENT_CLIENT_POINTPARTICLES: Ent_PointParticles(); break;
+		case ENT_CLIENT_RAINSNOW: Ent_RainOrSnow(); break;
+		case ENT_CLIENT_LASER: Ent_Laser(); break;
+		case ENT_CLIENT_NAGGER: Ent_Nagger(); break;
+		case ENT_CLIENT_WAYPOINT: Ent_WaypointSprite(); break;
+		case ENT_CLIENT_RADARLINK: Ent_RadarLink(); break;
+		case ENT_CLIENT_PROJECTILE: Ent_Projectile(); break;
+		case ENT_CLIENT_GIBSPLASH: Ent_GibSplash(); break;
+		case ENT_CLIENT_DAMAGEINFO: Ent_DamageInfo(); break;
+		case ENT_CLIENT_CASING: Ent_Casing(); break;
+		case ENT_CLIENT_INIT: Ent_Init(); break;
+		case ENT_CLIENT_SCORES_INFO: Ent_ScoresInfo(); break;
+		case ENT_CLIENT_MAPVOTE: Ent_MapVote(); break;
+		case ENT_CLIENT_CLIENTDATA: Ent_ClientData(); break;
+		case ENT_CLIENT_RANDOMSEED: Ent_RandomSeed(); break;
+		case ENT_CLIENT_WALL: Ent_Wall(); break;
+		default:
+			error(strcat("unknown entity type in CSQC_Ent_Update: ", ftos(self.enttype), "\n"));
+			break;
+	}
+
+	time = savetime;
+};
+// Destructor, but does NOT deallocate the entity by calling remove(). Also
+// used when an entity changes its type. For an entity that someone interacts
+// with others, make sure it can no longer do so.
+void Ent_Remove()
+{
+	if(self.entremove)
+		self.entremove();
+
+	self.enttype = 0;
+	self.classname = "";
+	self.draw = menu_sub_null;
+	self.entremove = menu_sub_null;
+	// TODO possibly set more stuff to defaults
+}
+// CSQC_Ent_Remove : Called when the server requests a SSQC / CSQC entity to be removed.  Essentially call remove(self) as well.
+void CSQC_Ent_Remove()
+{
+	if(self.enttype)
+		Ent_Remove();
+	remove(self);
+}
+
+void Gamemode_Init()
+{
+	if(gametype == GAME_ONSLAUGHT) {
+		print(strcat("Using ", minimapname, " as minimap.\n"));
+		precache_pic("gfx/ons-cp-neutral.tga");
+		precache_pic("gfx/ons-cp-red.tga");
+		precache_pic("gfx/ons-cp-blue.tga");
+		precache_pic("gfx/ons-frame.tga");
+		precache_pic("gfx/ons-frame-team.tga");
+	} else if(gametype == GAME_KEYHUNT) {
+		precache_pic("gfx/sb_key_carrying");
+		precache_pic("gfx/sb_key_carrying_outline");
+	}
+}
+// CSQC_Parse_StuffCmd : Provides the stuffcmd string in the first parameter that the server provided.  To execute standard behavior, simply execute localcmd with the string.
+void CSQC_Parse_StuffCmd(string strMessage)
+{
+	localcmd(strMessage);
+}
+// CSQC_Parse_Print : Provides the print string in the first parameter that the server provided.  To execute standard behavior, simply execute print with the string.
+void CSQC_Parse_Print(string strMessage)
+{
+	print(ColorTranslateRGB(strMessage));
+}
+
+// CSQC_Parse_CenterPrint : Provides the centerprint string in the first parameter that the server provided.
+void CSQC_Parse_CenterPrint(string strMessage)
+{
+	centerprint(strMessage);
+}
+
+void Fog_Force()
+{
+	// TODO somehow thwart prvm_globalset client ...
+
+	if(forcefog != "")
+		localcmd(strcat("\nfog ", forcefog, "\nr_fog_exp2 0\nr_drawfog 1\n"));
+}
+
+void Gamemode_Init();
+void Ent_ScoresInfo()
+{
+	float i;
+	self.classname = "ent_client_scores_info";
+	gametype = ReadByte();
+	for(i = 0; i < MAX_SCORE; ++i)
+	{
+		scores_label[i] = strzone(ReadString());
+		scores_flags[i] = ReadByte();
+	}
+	for(i = 0; i < MAX_TEAMSCORE; ++i)
+	{
+		teamscores_label[i] = strzone(ReadString());
+		teamscores_flags[i] = ReadByte();
+	}
+	Sbar_InitScores();
+	Gamemode_Init();
+}
+
+void Ent_Init()
+{
+	float i;
+	self.classname = "ent_client_init";
+
+	nb_pb_period = ReadByte() / 32; //Accuracy of 1/32th
+
+	for(i = 0; i < 24; ++i)
+		weaponimpulse[i] = ReadByte() - 1;
+	hook_shotorigin_x = ReadCoord();
+	hook_shotorigin_y = ReadCoord();
+	hook_shotorigin_z = ReadCoord();
+
+	if(forcefog)
+		strunzone(forcefog);
+	forcefog = strzone(ReadString());
+
+	armorblockpercent = ReadByte() / 255.0;
+
+	if(!postinit)
+		PostInit();
+}
+
+void Net_ReadRace()
+{
+	float b;
+
+	b = ReadByte();
+
+	switch(b)
+	{
+		case RACE_NET_CHECKPOINT_HIT_QUALIFYING:
+			race_checkpoint = ReadByte();
+			race_time = ReadShort();
+			race_previousbesttime = ReadShort();
+			if(race_previousbestname)
+				strunzone(race_previousbestname);
+			race_previousbestname = strzone(ColorTranslateRGB(ReadString()));
+
+			race_checkpointtime = time;
+
+			if(race_checkpoint == 0 || race_checkpoint == 254)
+			{
+				race_penaltytime = 0;
+				race_penaltyaccumulator = 0;
+				race_laptime = time; // valid
+			}
+
+			break;
+
+		case RACE_NET_CHECKPOINT_CLEAR:
+			race_laptime = 0;
+			race_checkpointtime = 0;
+			break;
+
+		case RACE_NET_CHECKPOINT_NEXT_SPEC_QUALIFYING:
+			race_laptime = ReadCoord();
+			race_checkpointtime = -99999;
+			// fall through
+		case RACE_NET_CHECKPOINT_NEXT_QUALIFYING:
+			race_nextcheckpoint = ReadByte();
+
+			race_nextbesttime = ReadShort();
+			if(race_nextbestname)
+				strunzone(race_nextbestname);
+			race_nextbestname = strzone(ColorTranslateRGB(ReadString()));
+			break;
+
+		case RACE_NET_CHECKPOINT_HIT_RACE:
+			race_mycheckpoint = ReadByte();
+			race_mycheckpointtime = time;
+			race_mycheckpointdelta = ReadShort();
+			race_mycheckpointlapsdelta = ReadByte();
+			if(race_mycheckpointlapsdelta >= 128)
+				race_mycheckpointlapsdelta -= 256;
+			if(race_mycheckpointenemy)
+				strunzone(race_mycheckpointenemy);
+			race_mycheckpointenemy = strzone(ColorTranslateRGB(ReadString()));
+			break;
+
+		case RACE_NET_CHECKPOINT_HIT_RACE_BY_OPPONENT:
+			race_othercheckpoint = ReadByte();
+			race_othercheckpointtime = time;
+			race_othercheckpointdelta = ReadShort();
+			race_othercheckpointlapsdelta = ReadByte();
+			if(race_othercheckpointlapsdelta >= 128)
+				race_othercheckpointlapsdelta -= 256;
+			if(race_othercheckpointenemy)
+				strunzone(race_othercheckpointenemy);
+			race_othercheckpointenemy = strzone(ColorTranslateRGB(ReadString()));
+			break;
+
+		case RACE_NET_PENALTY_RACE:
+			race_penaltyeventtime = time;
+			race_penaltytime = ReadByte();
+			//race_penaltyaccumulator += race_penaltytime;
+			if(race_penaltyreason)
+				strunzone(race_penaltyreason);
+			race_penaltyreason = strzone(ReadString());
+			break;
+
+		case RACE_NET_PENALTY_QUALIFYING:
+			race_penaltyeventtime = time;
+			race_penaltytime = ReadByte();
+			race_penaltyaccumulator += race_penaltytime;
+			if(race_penaltyreason)
+				strunzone(race_penaltyreason);
+			race_penaltyreason = strzone(ReadString());
+			break;
+	}
+}
+
+void Net_ReadSpawn()
+{
+	zoomin_effect = 1;
+	current_viewzoom = 0.6;
+}
+
+// CSQC_Parse_TempEntity : Handles all temporary entity network data in the CSQC layer.
+// You must ALWAYS first acquire the temporary ID, which is sent as a byte.
+// Return value should be 1 if CSQC handled the temporary entity, otherwise return 0 to have the engine process the event.
+float CSQC_Parse_TempEntity()
+{
+	local float bHandled;
+		bHandled  = true;
+	// Acquire TE ID
+	local float nTEID;
+		nTEID = ReadByte();
+
+		// NOTE: Could just do return instead of break...
+	switch(nTEID)
+	{
+		case TE_CSQC_PICTURE:
+			Net_MapVote_Picture();
+			bHandled = true;
+			break;
+		case TE_CSQC_RACE:
+			Net_ReadRace();
+			bHandled = true;
+			break;
+		case 13: // TE_BEAM
+			Net_GrapplingHook();
+			bHandled = true;
+			break;
+		case TE_CSQC_SPAWN:
+			Net_ReadSpawn();
+			bHandled = true;
+			break;
+		case TE_CSQC_ZCURVEPARTICLES:
+			Net_ReadZCurveParticles();
+			bHandled = true;
+			break;
+		case TE_CSQC_NEXGUNBEAMPARTICLE:
+			Net_ReadNexgunBeamParticle();
+			bHandled = true;
+			break;
+        case TE_CSQC_LIGHTNINGARC:
+            Net_ReadLightningarc();
+            bHandled = true;
+            break;
+		default:
+			// No special logic for this temporary entity; return 0 so the engine can handle it
+			bHandled = false;
+			break;
+	}
+
+	return bHandled;
+}
+
+string getcommandkey(string text, string command)
+{
+	string keys;
+	float n, j, k, l;
+
+	if (!sbar_showbinds)
+		return text;
+
+	keys = db_get(binddb, command);
+	if (!keys)
+	{
+		n = tokenize(findkeysforcommand(command)); // uses '...' strings
+		for(j = 0; j < n; ++j)
+		{
+			k = stof(argv(j));
+			if(k != -1)
+			{
+				if ("" == keys)
+					keys = keynumtostring(k);
+				else
+					keys = strcat(keys, ", ", keynumtostring(k));
+
+				++l;
+				if (sbar_showbinds_limit > 0 && sbar_showbinds_limit >= l) break;
+			}
+
+		}
+		db_put(binddb, command, keys);
+	}
+
+	if ("" == keys) {
+		if (sbar_showbinds > 1)
+			return strcat(text, " (not bound)");
+		else
+			return text;
+	}
+	else if (sbar_showbinds > 1)
+		return strcat(text, " (", keys, ")");
+	else
+		return keys;
+}


Property changes on: branches/nexuiz-2.0/data/qcsrc/client/Main.qc
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: branches/nexuiz-2.0/data/qcsrc/client/View.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/client/View.qc	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/qcsrc/client/View.qc	2009-07-11 14:59:28 UTC (rev 7191)
@@ -1,824 +1,882 @@
-#define spider_rocket_icon "gfx/spiderbot/rocket_ico.tga"
-#define spider_rocket_targ "gfx/spiderbot/target.tga"
-#define SPIDER_CROSS "textures/spiderbot/cross.tga"
-#define rkt_size 32
-#define rld_size_x 256
-#define rld_size_y 16
-
-entity porto;
-vector polyline[16];
-float trace_dphitcontents;
-float Q3SURFACEFLAG_SLICK = 2; // low friction surface
-float DPCONTENTS_SOLID = 1; // blocks player movement
-float DPCONTENTS_BODY = 32; // blocks player movement
-float DPCONTENTS_CORPSE = 64; // blocks player movement
-float DPCONTENTS_PLAYERCLIP = 256; // blocks player movement
-void Porto_Draw()
-{
-	vector p, dir, ang, q, nextdir;
-	float idx, portal_number, portal1_idx;
-
-	if(activeweapon != WEP_PORTO || spectatee_status || gametype == GAME_NEXBALL)
-		return;
-	if(intermission == 1)
-		return;
-	if(intermission == 2)
-		return;
-	if (getstati(STAT_HEALTH) <= 0)
-		return;
-
-	dir = view_forward;
-
-	if(angles_held_status)
-	{
-		makevectors(angles_held);
-		dir = v_forward;
-	}
-
-	p = view_origin;
-
-	polyline[0] = p;
-	idx = 1;
-	portal_number = 0;
-	nextdir = dir;
-
-	for(;;)
-	{
-		dir = nextdir;
-		traceline(p, p + 65536 * dir, TRUE, porto);
-		if(trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOIMPACT)
-			return;
-		nextdir = dir - 2 * (dir * trace_plane_normal) * trace_plane_normal; // mirror dir at trace_plane_normal
-		p = trace_endpos;
-		polyline[idx] = p;
-		++idx;
-		if(idx >= 16)
-			return;
-		if(trace_dphitq3surfaceflags & Q3SURFACEFLAG_SLICK || trace_dphitcontents & DPCONTENTS_PLAYERCLIP)
-			continue;
-		++portal_number;
-		ang = vectoangles2(trace_plane_normal, dir);
-		ang_x = -ang_x;
-		makevectors(ang);
-		if(!CheckWireframeBox(porto, p - 48 * v_right - 48 * v_up + 16 * v_forward, 96 * v_right, 96 * v_up, 96 * v_forward))
-			return;
-		if(portal_number == 1)
-			portal1_idx = idx;
-		if(portal_number >= 2)
-			break;
-	}
-
-	while(idx >= 2)
-	{
-		p = polyline[idx-2];
-		q = polyline[idx-1];
-		if(idx == 2)
-			p = p - view_up * 16;
-		if(idx-1 >= portal1_idx)
-		{
-			Draw_CylindricLine(p, q, 4, "", 1, 0, '0 0 1', 0.5, DRAWFLAG_NORMAL);
-		}
-		else
-		{
-			Draw_CylindricLine(p, q, 4, "", 1, 0, '1 0 0', 0.5, DRAWFLAG_NORMAL);
-		}
-		--idx;
-	}
-}
-
-/**
- * Checks whether the server initiated a map restart (stat_game_starttime changed)
- *
- * TODO: Use a better solution where a common shared entitiy is used that contains
- * timelimit, fraglimit and game_starttime! Requires engine changes (remove STAT_TIMELIMIT
- * and STAT_FRAGLIMIT to be auto-sent)
- */
-void CheckForGamestartChange() {
-	float startTime;
-	startTime = getstatf(STAT_GAMESTARTTIME);
-	if (previous_game_starttime != startTime) {
-		if ((time + 5.0) < startTime) {
-			//if connecting to server while restart was active don't always play prepareforbattle
-			sound(self, CHAN_VOICE, "announcer/robotic/prepareforbattle.wav", VOL_BASEVOICE, ATTN_NONE);
-		}
-		if (time < startTime) {
-			restartAnnouncer = spawn();
-			restartAnnouncer.think = restartAnnouncer_Think;
-			restartAnnouncer.nextthink = startTime - floor(startTime - time); //synchronize nextthink to startTime
-		}
-	}
-	previous_game_starttime = startTime;
-}
-
-void Porto_Init()
-{
-	porto = spawn();
-	porto.classname = "porto";
-	porto.draw = Porto_Draw;
-	porto.dphitcontentsmask = DPCONTENTS_SOLID | DPCONTENTS_BODY | DPCONTENTS_PLAYERCLIP;
-}
-
-float drawtime;
-
-float tan(float x)
-{
-	return sin(x) / cos(x);
-}
-float atan2(float y, float x)
-{
-	vector v;
-	v = '1 0 0' * x + '0 1 0' * y;
-	v = vectoangles(v);
-	return v_y * 0.01745329251994329576;
-}
-
-vector GetCurrentFov(float fov)
-{
-	float zoomsensitivity, zoomspeed, zoomfactor, zoomdir;
-
-	zoomsensitivity = cvar("cl_zoomsensitivity");
-	zoomfactor = cvar("cl_zoomfactor");
-	if(zoomfactor < 1 || zoomfactor > 16)
-		zoomfactor = 2.5;
-	zoomspeed = cvar("cl_zoomspeed");
-	if(zoomspeed >= 0)
-		if(zoomspeed < 0.5 || zoomspeed > 16)
-			zoomspeed = 3.5;
-
-	zoomdir = button_zoom;
-	if(getstati(STAT_ACTIVEWEAPON) == WEP_NEX) // do NOT use switchweapon here
-		zoomdir += button_attack2;
-	if(spectatee_status > 0 || isdemo())
-	{
-		if(spectatorbutton_zoom)
-			zoomdir = 0 + !zoomdir;
-			// do not even THINK about removing this 0
-			// _I_ know what I am doing
-			// fteqcc does not
-	}
-
-	if(zoomdir)
-		zoomin_effect = 0;
-
-	if(zoomin_effect || camera_active)
-	{
-		current_viewzoom = min(1, current_viewzoom + drawframetime);
-	}
-	else
-	{
-		if(zoomspeed < 0) // instant zoom
-		{
-			if(zoomdir)
-				current_viewzoom = 1 / zoomfactor;
-			else
-				current_viewzoom = 1;
-		}
-		else
-		{
-			if(zoomdir)
-				current_viewzoom = 1 / bound(1, 1 / current_viewzoom + drawframetime * zoomspeed * (zoomfactor - 1), zoomfactor);
-			else
-				current_viewzoom = bound(1 / zoomfactor, current_viewzoom + drawframetime * zoomspeed * (1 - 1 / zoomfactor), 1);
-		}
-	}
-
-	if(almost_equals(current_viewzoom, 1))
-		current_zoomfraction = 0;
-	else if(almost_equals(current_viewzoom, 1/zoomfactor))
-		current_zoomfraction = 1;
-	else
-		current_zoomfraction = (current_viewzoom - 1) / (1/zoomfactor - 1);
-
-	if(zoomsensitivity < 1)
-		setsensitivityscale(pow(current_viewzoom, 1 - zoomsensitivity));
-	else
-		setsensitivityscale(1);
-
-	float frustumx, frustumy, fovx, fovy;
-	frustumy = tan(fov * 0.00872664625997164788) * 0.75 * current_viewzoom;
-	frustumx = frustumy * vid_width / vid_height / vid_pixelheight;
-	fovx = atan2(frustumx, 1) / 0.00872664625997164788;
-	fovy = atan2(frustumy, 1) / 0.00872664625997164788;
-
-	return '1 0 0' * fovx + '0 1 0' * fovy;
-}
-
-// this function must match W_SetupShot!
-float zoomscript_caught;
-entity trueaim;
-void TrueAim_Init()
-{
-	trueaim = spawn();
-	trueaim.classname = "trueaim";
-	trueaim.dphitcontentsmask = DPCONTENTS_SOLID | DPCONTENTS_BODY | DPCONTENTS_CORPSE;
-}
-
-float TrueAimCheck()
-{
-	float nudge = 1; // added to traceline target and subtracted from result
-	vector vecs, trueaimpoint, w_shotorg;
-	vector mi, ma, dv;
-
-	mi = ma = '0 0 0';
-
-	switch(activeweapon)
-	{
-		case WEP_TUBA: // no aim
-		case WEP_PORTO: // shoots from eye
-		case WEP_HOOK: // no trueaim
-		case WEP_GRENADE_LAUNCHER: // toss curve
-			return 1;
-		case WEP_CAMPINGRIFLE:
-			if(zoomscript_caught)
-				return 1; // shoots from eye when zoomed
-			break;
-		case WEP_ROCKET_LAUNCHER: // projectile has a size!
-			mi = '-3 -3 -3';
-			ma = '3 3 3';
-			break;
-		case WEP_SEEKER: // projectile has a size!
-			mi = '-2 -2 -2';
-			ma = '2 2 2';
-			break;
-		case WEP_ELECTRO: // projectile has a size!
-			mi = '0 0 -3';
-			ma = '0 0 -3';
-			break;
-	}
-
-	vecs = decompressShotOrigin(getstati(STAT_SHOTORG));
-
-	traceline(view_origin, view_origin + view_forward * MAX_SHOT_DISTANCE, MOVE_NOMONSTERS, trueaim);
-	trueaimpoint = trace_endpos;
-
-	if(vecs_x > 0)
-		vecs_y = -vecs_y;
-	else
-		vecs = '0 0 0';
-
-	dv = view_right * vecs_y + view_up * vecs_z;
-	w_shotorg = view_origin + dv;
-
-	// now move the vecs forward as much as requested if possible
-	tracebox(w_shotorg, mi, ma, w_shotorg + view_forward * (vecs_x + nudge), MOVE_NORMAL, trueaim); // FIXME this MOVE_NORMAL part will misbehave a little in csqc
-	w_shotorg = trace_endpos - view_forward * nudge;
-
-	// now test whether we will actually hit the trueaimpoint...
-	tracebox(w_shotorg, mi, ma, trueaimpoint, MOVE_NOMONSTERS, trueaim);
-
-	return vlen(trace_endpos - trueaimpoint) <= vlen(ma - mi) + 1;
-		// yes, this is an ugly hack... but it seems good enough to find out whether the test hits the same place as the initial trace
-}
-
-void CSQC_common_hud(void);
-
-void CSQC_kh_hud(void);
-void CSQC_ctf_hud(void);
-void PostInit(void);
-void CSQC_Demo_Camera();
-float Sbar_WouldDrawScoreboard ();
-float view_set;
-float camera_mode;
-string NextFrameCommand;
-void CSQC_spider_HUD();
-void CSQC_UpdateView(float w, float h)
-{
-	entity e;
-	float fov;
-	float f, i, j;
-
-	dprint_load();
-	WaypointSprite_Load();
-
-	ticrate = getstatf(STAT_MOVEVARS_TICRATE) * getstatf(STAT_MOVEVARS_TIMESCALE);
-
-	// Render the Scene
-	if(!intermission || !view_set)
-	{
-		view_origin = pmove_org + '0 0 1' * getstati(STAT_VIEWHEIGHT);
-		view_angles = input_angles;
-		makevectors(view_angles);
-		view_forward = v_forward;
-		view_right = v_right;
-		view_up = v_up;
-		view_set = 1;
-	}
-
-	vid_width = w;
-	vid_height = h;
-
-#ifdef BLURTEST
-	if(time > blurtest_time0 && time < blurtest_time1)
-	{
-		float r, t;
-
-		t = (time - blurtest_time0) / (blurtest_time1 - blurtest_time0);
-		r = t * blurtest_radius;
-		f = 1 / pow(t, blurtest_power) - 1;
-
-		cvar_set("r_glsl_postprocess", "1");
-		cvar_set("r_glsl_postprocess_uservec1", strcat(ftos(r), " ", ftos(f), " 0 0"));
-	}
-	else
-	{
-		cvar_set("r_glsl_postprocess", "0");
-		cvar_set("r_glsl_postprocess_uservec1", "0 0 0 0");
-	}
-#endif
-
-	Fog_Force();
-
-	drawframetime = max(0.000001, time - drawtime);
-	drawtime = time;
-
-	// watch for gametype changes here...
-	// in ParseStuffCMD the cmd isn't executed yet :/
-	// might even be better to add the gametype to TE_CSQC_INIT...?
-	if(!postinit)
-		PostInit();
-
-	CheckForGamestartChange();
-	maptimeAnnouncer();
-
-	fov = cvar("fov");
-	if(button_zoom || fov <= 59.5)
-	{
-		if(!zoomscript_caught)
-		{
-			localcmd("+button4\n");
-			zoomscript_caught = 1;
-			ignore_plus_zoom += 1;
-		}
-	}
-	else
-	{
-		if(zoomscript_caught)
-		{
-			localcmd("-button4\n");
-			zoomscript_caught = 0;
-			ignore_minus_zoom += 1;
-		}
-	}
-
-	sbar_alpha_fg = cvar("sbar_alpha_fg" );
-	sbar_currentammo = cvar("sbar_showcurrentammo");
-	sbar_hudselector = cvar("sbar_hudselector");
-	sbar_hud_accuracy = cvar("sbar_hud_accuracy");
-	ColorTranslateMode = cvar("cl_stripcolorcodes");
-	activeweapon = getstati(STAT_SWITCHWEAPON);
-	f = cvar("teamplay");
-	if(f != teamplay)
-	{
-		teamplay = f;
-		Sbar_InitScores();
-	}
-
-	if(last_weapon != activeweapon) {
-		weapontime = time;
-		last_weapon = activeweapon;
-	}
-
-	// ALWAYS Clear Current Scene First
-	R_ClearScene();
-
-	// Assign Standard Viewflags
-	// Draw the World (and sky)
-	R_SetView(VF_DRAWWORLD, 1);
-
-	// Set the console size vars
-	vid_conwidth = cvar("vid_conwidth");
-	vid_conheight = cvar("vid_conheight");
-	vid_pixelheight = cvar("vid_pixelheight");
-
-	R_SetView(VF_FOV, GetCurrentFov(fov));
-
-	// Camera for demo playback
-	if(camera_active)
-	{
-		if(cvar("camera_enable"))
-			CSQC_Demo_Camera();
-		else
-		{
-			cvar_set("chase_active", ftos(chase_active_backup));
-			cvar_set("cl_demo_mousegrab", "0");
-			camera_active = FALSE;
-		}
-	}
-#ifdef CAMERATEST
-	else if(cvar("camera_enable"))
-#else
-	else if(cvar("camera_enable") && isdemo())
-#endif
-	{
-		// Enable required Darkplaces cvars
-		chase_active_backup = cvar("chase_active");
-		cvar_set("chase_active", "2");
-		cvar_set("cl_demo_mousegrab", "1");
-		camera_active = TRUE;
-		camera_mode = FALSE;
-	}
-
-	// Draw the Crosshair
-	float scoreboard_active;
-	scoreboard_active = Sbar_WouldDrawScoreboard();
-	R_SetView(VF_DRAWCROSSHAIR, 0); //Make sure engine crosshairs are always hidden
-
-	// Draw the Engine Status Bar (the default Quake HUD)
-	R_SetView(VF_DRAWENGINESBAR, 0);
-
-	// fetch this one only once per frame
-	sbar_showbinds = cvar("sbar_showbinds");
-	sbar_showbinds_limit = cvar("sbar_showbinds_limit");
-
-	// Update the mouse position
-	/*
-	mousepos_x = vid_conwidth;
-	mousepos_y = vid_conheight;
-	mousepos = mousepos*0.5 + getmousepos();
-	*/
-
-	R_AddEntities(MASK_NORMAL | MASK_ENGINE | MASK_ENGINEVIEWMODELS);
-
-	e = self;
-	for(self = world; (self = nextent(self)); )
-		if(self.draw)
-			self.draw();
-	self = e;
-	R_RenderScene();
-
-	// now switch to 2D drawing mode by calling a 2D drawing function
-	// then polygon drawing will draw as 2D stuff, and NOT get queued until the
-	// next R_RenderScene call
-	drawstring('0 0 0', "", '1 1 0', '1 1 1', 0, 0);
-
-	// Draw the mouse cursor
-	// NOTE: drawpic must happen after R_RenderScene for some reason
-	//drawpic(getmousepos(), "gfx/cursor.tga", '11 14 0', '1 1 1', 1, 0);
-	//drawstring('50 50', ftos(game), '10 10 0', '1 1 1', 1, 0);
-	//self = edict_num(player_localnum);
-	//drawstring('0 0', vtos(pmove_org), '8 8 0', '1 1 1', 1, 0);
-	//drawstring('0 8', strcat("ORG: ", vtos(self.origin), " state: ", ftos(self.ctf_state), " HP: ", ftos(self.health)), '8 8 0', '1 1 1', 1, 0);
-	// as long as the ctf part isn't in, this is useless
-	if(menu_visible)
-		menu_show();
-
-	/*if(gametype == GAME_CTF)
-	{
-		ctf_view();
-	} else */
-
-	// draw 2D entities
-	e = self;
-	for(self = world; (self = nextent(self)); )
-		if(self.draw2d)
-			self.draw2d();
-	self = e;
-
-	// draw radar
-	if(
-		ons_showmap
-		||
-		(
-			!scoreboard_active
-			&&
-			cvar_string("cl_teamradar") != "0"
-			&&
-			(
-				cvar("cl_teamradar") == 2
-				||
-				teamplay
-			)
-		)
-	)
-		teamradar_view();
-
-	if (cvar("cl_showpressedkeys")) // draw pressed keys when spectating and playing
-	{
-		if(spectatee_status > 0 || cvar("cl_showpressedkeys") >= 2)
-			Sbar_DrawPressedKeys();
-	}
-	
-	if (cvar("cl_showspeed"))
-		Sbar_ShowSpeed();
-	
-	// draw sbar
- 	if(cvar("r_letterbox") == 0)
- 		Sbar_DrawCenterPrint(); // draw centerprint messages even if viewsize >= 120
-
-    float hud;
-    hud = getstati(STAT_HUD);
-    if(hud == HUD_SPIDEBOT)
-    {
-        vector sz;
-        CSQC_spider_HUD();
-        sz = drawgetimagesize(SPIDER_CROSS);
-        sz_x *= cvar_or("cl_vehicle_spiderbot_cross_size",1);
-        sz_y *= cvar_or("cl_vehicle_spiderbot_cross_size",1);
-        drawpic('0.5 0 0' * (vid_conwidth - sz_x) + '0 0.5 0' * (vid_conheight - sz_y), SPIDER_CROSS, sz, '1 1 1', cvar_or("cl_vehicle_spiderbot_cross_alpha",0.6), DRAWFLAG_NORMAL);
-    }
-    else
-    {
-        if(cvar("r_letterbox") == 0)
-            if(cvar("viewsize") < 120)
-                CSQC_common_hud();
-
-        // crosshair goes VERY LAST
-        if(!scoreboard_active && !ons_showmap && !camera_active) {
-            // TrueAim check
-            float goodshot;
-
-            if(cvar("crosshair_hittest"))
-                goodshot = TrueAimCheck();
-            else
-                goodshot = TRUE;
-
-            string wcross_style;
-            wcross_style = cvar_string("crosshair");
-
-            if (wcross_style != "0") {
-                vector wcross_color, wcross_size;
-                string wcross_wep, wcross_name;
-                float wcross_alpha, wcross_sizefloat;
-
-                wcross_color_x = cvar("crosshair_color_red");
-                wcross_color_y = cvar("crosshair_color_green");
-                wcross_color_z = cvar("crosshair_color_blue");
-                wcross_alpha = cvar("crosshair_color_alpha");
-                wcross_sizefloat = cvar("crosshair_size");
-                if (cvar("crosshair_per_weapon")) {
-                    e = get_weaponinfo(activeweapon);
-                    if (e && e.netname != "")
-                    {
-                        wcross_wep = e.netname;
-                        wcross_style = cvar_string(strcat("crosshair_", wcross_wep));
-                        if(wcross_style == "")
-                            wcross_style = e.netname;
-
-                        if(!cvar("crosshair_color_override"))
-                        {
-                            wcross_color_x = cvar(strcat("crosshair_", wcross_wep, "_color_red"));
-                            wcross_color_y = cvar(strcat("crosshair_", wcross_wep, "_color_green"));
-                            wcross_color_z = cvar(strcat("crosshair_", wcross_wep, "_color_blue"));
-                        }
-
-                        wcross_alpha *= cvar(strcat("crosshair_", wcross_wep, "_color_alpha"));
-                        wcross_sizefloat *= cvar(strcat("crosshair_", wcross_wep, "_size"));
-                    }
-                }
-
-                wcross_name = strcat("gfx/crosshair", wcross_style);
-
-                wcross_size = drawgetimagesize(wcross_name);
-                wcross_size_x *= wcross_sizefloat;
-                wcross_size_y *= wcross_sizefloat;
-
-                if(goodshot)
-                {
-                    drawpic('0.5 0 0' * (vid_conwidth - wcross_size_x) + '0 0.5 0' * (vid_conheight - wcross_size_y), wcross_name, wcross_size, wcross_color, wcross_alpha, DRAWFLAG_NORMAL);
-                }
-                else
-                {
-                    wcross_alpha *= 0.04 * 0.75;
-                    for(i = -2; i <= 2; ++i)
-                        for(j = -2; j <= 2; ++j)
-                            drawpic('0.5 0 0' * (vid_conwidth - wcross_size_x + i) + '0 0.5 0' * (vid_conheight - wcross_size_y + j), wcross_name, wcross_size, wcross_color, wcross_alpha, DRAWFLAG_NORMAL);
-                }
-            }
-        }
-    }
-
-	if(NextFrameCommand)
-	{
-		localcmd("\n", NextFrameCommand, "\n");
-		NextFrameCommand = string_null;
-	}
-}
-
-void Sbar_Draw();
-void CSQC_spider_HUD()
-{
-    float rockets,reload,heat,hp,shield,i;
-    vector p,pp;
-
-    rockets = getstati(STAT_SPIDERBOT_ROCKETS);
-    heat    = min(getstatf(STAT_SPIDERBOT_HEAT),1);
-    reload  = min(getstatf(STAT_SPIDERBOT_RELOAD),1);
-    hp      = min(getstatf(STAT_SPIDERBOT_HEALTH),1);
-    shield  = min(getstatf(STAT_SPIDERBOT_SHIELD),1);
-
-    // Draw health bar
-    p = '0.5 0 0' * (vid_conwidth - (rkt_size * 8));
-    p = p + '0 1 0' * vid_conheight - '0 32 0';
-    //pp = ('0 1 0' * hp) + ('1 0 0' * (1-hp));
-    drawfill(p, '256 0 0' * shield + '0 8 0' , '0.5 0.5 1', 0.75, DRAWFLAG_NORMAL);
-    p_y += 8;
-    drawfill(p, '256 0 0' * hp + '0 8 0' , '0 1 0', 0.75, DRAWFLAG_NORMAL);
-    p_x += 256 * hp;
-    drawfill(p, '256 0 0' * (1-hp) + '0 8 0' , '0 0 0', 0.75, DRAWFLAG_NORMAL);
-
-    // Draw minigun heat indicator
-    p = '0.5 0 0' * (vid_conwidth - 256);
-    p = p + '0 1 0' * vid_conheight - '0 34  0';
-    drawfill(p, '256 0 0' * (1-heat) + '0 2 0' ,'0 0 1', 0.5, DRAWFLAG_NORMAL);
-    p_x += 256 * (1-heat);
-    drawfill(p, '256 0 0' * heat  + '0 2 0' , '1 0 0', 0.5, DRAWFLAG_NORMAL);
-
-    // Draw rocket icons for loaded/empty tubes.
-    pp = '0.5 0 0' * (vid_conwidth - (rkt_size * 8));
-    pp += '0 1 0' * vid_conheight - '0 64 0';
-    for(i = 0; i < 8; ++i)
-    {
-        p = pp + '1 0 0' * (rkt_size * i);
-        if(rockets == 8)
-        {
-            if(floor(reload * 8) == i)
-            {
-                drawpic(p, spider_rocket_icon, '1 1 0' * rkt_size, '1 0 0' + '0 1 0' * ((reload*8)-i), 0.75 , DRAWFLAG_NORMAL);
-            }
-            else if(i < reload * 8)
-                drawpic(p, spider_rocket_icon, '1 1 0' * rkt_size, '1 1 0', 0.75 , DRAWFLAG_NORMAL);
-            else
-                drawpic(p, spider_rocket_icon, '1 1 0' * rkt_size, '0.5 0.5 0.5', 0.75, DRAWFLAG_NORMAL);
-        }
-        else
-        {
-            if(i < rockets)
-                drawpic(p, spider_rocket_icon, '1 1 0' * rkt_size, '0 0 0', 0.25, DRAWFLAG_NORMAL);
-            else
-                drawpic(p, spider_rocket_icon, '1 1 0' * rkt_size, '0 1 0' * reload, 0.75, DRAWFLAG_NORMAL);
-        }
-    }
-
-	if (sb_showscores)
-	{
-		Sbar_DrawScoreboard();
-		Sbar_DrawCenterPrint();
-	}
-
-}
-void CSQC_common_hud(void)
-{
-
-	// Sbar_SortFrags(); done in Sbar_Draw
-    float hud;
-    hud = getstati(STAT_HUD);
-
-    //hud = 10;
-    switch(hud)
-    {
-        case HUD_NORMAL:
-            Sbar_Draw();
-            break;
-
-        case HUD_SPIDEBOT:
-            CSQC_spider_HUD();
-            break;
-    }
-}
-
-
-// following vectors must be global to allow seamless switching between camera modes
-vector camera_offset, current_camera_offset, mouse_angles, current_angles, current_origin, current_position;
-void CSQC_Demo_Camera()
-{
-	float speed, attenuation, dimensions;
-	vector tmp, delta;
-
-	if( cvar("camera_reset") || !camera_mode )
-	{
-		camera_offset = '0 0 0';
-		current_angles = '0 0 0';
-		camera_direction = '0 0 0';
-		camera_offset_z += 30;
-		camera_offset_x += 30 * -cos(current_angles_y * DEG2RAD);
-		camera_offset_y += 30 * -sin(current_angles_y * DEG2RAD);
-		current_origin = view_origin;
-		current_camera_offset  = camera_offset;
-		cvar_set("camera_reset", "0");
-		camera_mode = CAMERA_CHASE;
-	}
-
-	// Camera angles
-	if( camera_roll )
-		mouse_angles_z += camera_roll * cvar("camera_speed_roll");
-
-	if(cvar("camera_look_player"))
-	{
-		local vector dir;
-		local float n;
-
-		dir = normalize(view_origin - current_position);
-		n = mouse_angles_z;
-		mouse_angles = vectoangles(dir);
-		mouse_angles_x = mouse_angles_x * -1;
-		mouse_angles_z = n;
-	}
-	else
-	{
-		tmp = getmousepos() * 0.1;
-		if(vlen(tmp)>cvar("camera_mouse_treshold"))
-		{
-			mouse_angles_x += tmp_y * cos(mouse_angles_z * DEG2RAD) + (tmp_x * sin(mouse_angles_z * DEG2RAD));
-			mouse_angles_y -= tmp_x * cos(mouse_angles_z * DEG2RAD) + (tmp_y * -sin(mouse_angles_z * DEG2RAD));
-		}
-	}
-
-	while (mouse_angles_x < -180) mouse_angles_x = mouse_angles_x + 360;
-	while (mouse_angles_x > 180) mouse_angles_x = mouse_angles_x - 360;
-	while (mouse_angles_y < -180) mouse_angles_y = mouse_angles_y + 360;
-	while (mouse_angles_y > 180) mouse_angles_y = mouse_angles_y - 360;
-
-	// Fix difference when angles don't have the same sign
-	delta = '0 0 0';
-	if(mouse_angles_y < -60 && current_angles_y > 60)
-		delta = '0 360 0';
-	if(mouse_angles_y > 60 && current_angles_y < -60)
-		delta = '0 -360 0';
-
-	if(cvar("camera_look_player"))
-		attenuation = cvar("camera_look_attenuation");
-	else
-		attenuation = cvar("camera_speed_attenuation");
-
-	attenuation = 1 / max(1, attenuation);
-	current_angles += (mouse_angles - current_angles + delta) * attenuation;
-
-	while (current_angles_x < -180) current_angles_x = current_angles_x + 360;
-	while (current_angles_x > 180) current_angles_x = current_angles_x - 360;
-	while (current_angles_y < -180) current_angles_y = current_angles_y + 360;
-	while (current_angles_y > 180) current_angles_y = current_angles_y - 360;
-
-	// Camera position
-	tmp = '0 0 0';
-	dimensions = 0;
-
-	if( camera_direction_x )
-	{
-		tmp_x = camera_direction_x * cos(current_angles_y * DEG2RAD);
-		tmp_y = camera_direction_x * sin(current_angles_y * DEG2RAD);
-		if( cvar("camera_forward_follows") && !cvar("camera_look_player") )
-			tmp_z = camera_direction_x * -sin(current_angles_x * DEG2RAD);
-		++dimensions;
-	}
-
-	if( camera_direction_y )
-	{
-		tmp_x += camera_direction_y * -sin(current_angles_y * DEG2RAD);
-		tmp_y += camera_direction_y * cos(current_angles_y * DEG2RAD) * cos(current_angles_z * DEG2RAD);
-		tmp_z += camera_direction_y * sin(current_angles_z * DEG2RAD);
-		++dimensions;
-	}
-
-	if( camera_direction_z )
-	{
-		tmp_z += camera_direction_z * cos(current_angles_z * DEG2RAD);
-		++dimensions;
-	}
-
-	if(cvar("camera_free"))
-		speed = cvar("camera_speed_free");
-	else
-		speed = cvar("camera_speed_chase");
-
-	if(dimensions)
-	{
-		speed = speed * sqrt(1 / dimensions);
-		camera_offset += tmp * speed;
-	}
-
-	current_camera_offset += (camera_offset - current_camera_offset) * attenuation;
-
-	// Camera modes
-	if( cvar("camera_free") )
-	{
-		if ( camera_mode == CAMERA_CHASE )
-		{
-			current_camera_offset = current_origin + current_camera_offset;
-			camera_offset = current_origin + camera_offset;
-		}
-
-		camera_mode = CAMERA_FREE;
-		current_position = current_camera_offset;
-	}
-	else
-	{
-		if ( camera_mode == CAMERA_FREE )
-		{
-			current_origin = view_origin;
-			camera_offset = camera_offset - current_origin;
-			current_camera_offset = current_camera_offset - current_origin;
-		}
-
-		camera_mode = CAMERA_CHASE;
-
-		if(cvar("camera_chase_smoothly"))
-			current_origin += (view_origin - current_origin) * attenuation;
-		else
-			current_origin = view_origin;
-
-		current_position = current_origin + current_camera_offset;
-	}
-
-	R_SetView(VF_ANGLES, current_angles);
-	R_SetView(VF_ORIGIN, current_position);
-}
+#define spider_rocket_icon "gfx/spiderbot/rocket_ico.tga"
+#define spider_rocket_targ "gfx/spiderbot/target.tga"
+#define SPIDER_CROSS "textures/spiderbot/cross.tga"
+#define rkt_size 32
+#define rld_size_x 256
+#define rld_size_y 16
+
+entity porto;
+vector polyline[16];
+float trace_dphitcontents;
+float trace_networkentity;
+float Q3SURFACEFLAG_SLICK = 2; // low friction surface
+float DPCONTENTS_SOLID = 1; // blocks player movement
+float DPCONTENTS_BODY = 32; // blocks player movement
+float DPCONTENTS_CORPSE = 64; // blocks player movement
+float DPCONTENTS_PLAYERCLIP = 256; // blocks player movement
+void Porto_Draw()
+{
+	vector p, dir, ang, q, nextdir;
+	float idx, portal_number, portal1_idx;
+
+	if(activeweapon != WEP_PORTO || spectatee_status || gametype == GAME_NEXBALL)
+		return;
+	if(intermission == 1)
+		return;
+	if(intermission == 2)
+		return;
+	if (getstati(STAT_HEALTH) <= 0)
+		return;
+
+	dir = view_forward;
+
+	if(angles_held_status)
+	{
+		makevectors(angles_held);
+		dir = v_forward;
+	}
+
+	p = view_origin;
+
+	polyline[0] = p;
+	idx = 1;
+	portal_number = 0;
+	nextdir = dir;
+
+	for(;;)
+	{
+		dir = nextdir;
+		traceline(p, p + 65536 * dir, TRUE, porto);
+		if(trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOIMPACT)
+			return;
+		nextdir = dir - 2 * (dir * trace_plane_normal) * trace_plane_normal; // mirror dir at trace_plane_normal
+		p = trace_endpos;
+		polyline[idx] = p;
+		++idx;
+		if(idx >= 16)
+			return;
+		if(trace_dphitq3surfaceflags & Q3SURFACEFLAG_SLICK || trace_dphitcontents & DPCONTENTS_PLAYERCLIP)
+			continue;
+		++portal_number;
+		ang = vectoangles2(trace_plane_normal, dir);
+		ang_x = -ang_x;
+		makevectors(ang);
+		if(!CheckWireframeBox(porto, p - 48 * v_right - 48 * v_up + 16 * v_forward, 96 * v_right, 96 * v_up, 96 * v_forward))
+			return;
+		if(portal_number == 1)
+			portal1_idx = idx;
+		if(portal_number >= 2)
+			break;
+	}
+
+	while(idx >= 2)
+	{
+		p = polyline[idx-2];
+		q = polyline[idx-1];
+		if(idx == 2)
+			p = p - view_up * 16;
+		if(idx-1 >= portal1_idx)
+		{
+			Draw_CylindricLine(p, q, 4, "", 1, 0, '0 0 1', 0.5, DRAWFLAG_NORMAL);
+		}
+		else
+		{
+			Draw_CylindricLine(p, q, 4, "", 1, 0, '1 0 0', 0.5, DRAWFLAG_NORMAL);
+		}
+		--idx;
+	}
+}
+
+/**
+ * Checks whether the server initiated a map restart (stat_game_starttime changed)
+ *
+ * TODO: Use a better solution where a common shared entitiy is used that contains
+ * timelimit, fraglimit and game_starttime! Requires engine changes (remove STAT_TIMELIMIT
+ * and STAT_FRAGLIMIT to be auto-sent)
+ */
+void CheckForGamestartChange() {
+	float startTime;
+	startTime = getstatf(STAT_GAMESTARTTIME);
+	if (previous_game_starttime != startTime) {
+		if ((time + 5.0) < startTime) {
+			//if connecting to server while restart was active don't always play prepareforbattle
+			sound(self, CHAN_VOICE, "announcer/robotic/prepareforbattle.wav", VOL_BASEVOICE, ATTN_NONE);
+		}
+		if (time < startTime) {
+			restartAnnouncer = spawn();
+			restartAnnouncer.think = restartAnnouncer_Think;
+			restartAnnouncer.nextthink = startTime - floor(startTime - time); //synchronize nextthink to startTime
+		}
+	}
+	previous_game_starttime = startTime;
+}
+
+void Porto_Init()
+{
+	porto = spawn();
+	porto.classname = "porto";
+	porto.draw = Porto_Draw;
+	porto.dphitcontentsmask = DPCONTENTS_SOLID | DPCONTENTS_BODY | DPCONTENTS_PLAYERCLIP;
+}
+
+float drawtime;
+
+float tan(float x)
+{
+	return sin(x) / cos(x);
+}
+float atan2(float y, float x)
+{
+	vector v;
+	v = '1 0 0' * x + '0 1 0' * y;
+	v = vectoangles(v);
+	return v_y * 0.01745329251994329576;
+}
+
+vector GetCurrentFov(float fov)
+{
+	float zoomsensitivity, zoomspeed, zoomfactor, zoomdir;
+
+	zoomsensitivity = cvar("cl_zoomsensitivity");
+	zoomfactor = cvar("cl_zoomfactor");
+	if(zoomfactor < 1 || zoomfactor > 16)
+		zoomfactor = 2.5;
+	zoomspeed = cvar("cl_zoomspeed");
+	if(zoomspeed >= 0)
+		if(zoomspeed < 0.5 || zoomspeed > 16)
+			zoomspeed = 3.5;
+
+	zoomdir = button_zoom;
+	if(getstati(STAT_ACTIVEWEAPON) == WEP_NEX) // do NOT use switchweapon here
+		zoomdir += button_attack2;
+	if(spectatee_status > 0 || isdemo())
+	{
+		if(spectatorbutton_zoom)
+			zoomdir = 0 + !zoomdir;
+			// do not even THINK about removing this 0
+			// _I_ know what I am doing
+			// fteqcc does not
+	}
+
+	if(zoomdir)
+		zoomin_effect = 0;
+
+	if(zoomin_effect || camera_active)
+	{
+		current_viewzoom = min(1, current_viewzoom + drawframetime);
+	}
+	else
+	{
+		if(zoomspeed < 0) // instant zoom
+		{
+			if(zoomdir)
+				current_viewzoom = 1 / zoomfactor;
+			else
+				current_viewzoom = 1;
+		}
+		else
+		{
+			if(zoomdir)
+				current_viewzoom = 1 / bound(1, 1 / current_viewzoom + drawframetime * zoomspeed * (zoomfactor - 1), zoomfactor);
+			else
+				current_viewzoom = bound(1 / zoomfactor, current_viewzoom + drawframetime * zoomspeed * (1 - 1 / zoomfactor), 1);
+		}
+	}
+
+	if(almost_equals(current_viewzoom, 1))
+		current_zoomfraction = 0;
+	else if(almost_equals(current_viewzoom, 1/zoomfactor))
+		current_zoomfraction = 1;
+	else
+		current_zoomfraction = (current_viewzoom - 1) / (1/zoomfactor - 1);
+
+	if(zoomsensitivity < 1)
+		setsensitivityscale(pow(current_viewzoom, 1 - zoomsensitivity));
+	else
+		setsensitivityscale(1);
+
+	float frustumx, frustumy, fovx, fovy;
+	frustumy = tan(fov * 0.00872664625997164788) * 0.75 * current_viewzoom;
+	frustumx = frustumy * vid_width / vid_height / vid_pixelheight;
+	fovx = atan2(frustumx, 1) / 0.00872664625997164788;
+	fovy = atan2(frustumy, 1) / 0.00872664625997164788;
+
+	return '1 0 0' * fovx + '0 1 0' * fovy;
+}
+
+// this function must match W_SetupShot!
+float zoomscript_caught;
+entity trueaim;
+
+#define SHOTTYPE_HITTEAM 1
+#define SHOTTYPE_HITOBSTRUCTION 2
+#define SHOTTYPE_HITWORLD 3
+#define SHOTTYPE_HITENEMY 4
+
+void TrueAim_Init()
+{
+	trueaim = spawn();
+	trueaim.classname = "trueaim";
+	trueaim.dphitcontentsmask = DPCONTENTS_SOLID | DPCONTENTS_BODY | DPCONTENTS_CORPSE;
+}
+
+float EnemyHitCheck(vector start, vector mi, vector ma, vector end)
+{
+	float t;
+	tracebox(start, mi, ma, end, MOVE_NORMAL, trueaim);
+	if(trace_networkentity < 1)
+		return SHOTTYPE_HITWORLD;
+	if(trace_networkentity > maxclients)
+		return SHOTTYPE_HITWORLD;
+	t = GetPlayerColor(trace_networkentity - 1);
+	if(teamplay)
+	if(t == myteam)
+		return SHOTTYPE_HITTEAM;
+	if(t == COLOR_SPECTATOR)
+		return SHOTTYPE_HITWORLD;
+	return SHOTTYPE_HITENEMY;
+}
+
+float TrueAimCheck()
+{
+	float nudge = 1; // added to traceline target and subtracted from result
+	vector vecs, trueaimpoint, w_shotorg;
+	vector mi, ma, dv;
+	float shottype;
+
+	mi = ma = '0 0 0';
+
+	switch(activeweapon)
+	{
+		case WEP_TUBA: // no aim
+		case WEP_PORTO: // shoots from eye
+		case WEP_HOOK: // no trueaim
+		case WEP_GRENADE_LAUNCHER: // toss curve
+			return SHOTTYPE_HITWORLD;
+		case WEP_CAMPINGRIFLE:
+			if(zoomscript_caught)
+				return EnemyHitCheck(view_origin, '0 0 0', '0 0 0', view_origin + view_forward * MAX_SHOT_DISTANCE);
+			break;
+		case WEP_ROCKET_LAUNCHER: // projectile has a size!
+			mi = '-3 -3 -3';
+			ma = '3 3 3';
+			break;
+		case WEP_SEEKER: // projectile has a size!
+			mi = '-2 -2 -2';
+			ma = '2 2 2';
+			break;
+		case WEP_ELECTRO: // projectile has a size!
+			mi = '0 0 -3';
+			ma = '0 0 -3';
+			break;
+	}
+
+	vecs = decompressShotOrigin(getstati(STAT_SHOTORG));
+
+	traceline(view_origin, view_origin + view_forward * MAX_SHOT_DISTANCE, MOVE_NOMONSTERS, trueaim);
+	trueaimpoint = trace_endpos;
+
+	if(vecs_x > 0)
+		vecs_y = -vecs_y;
+	else
+		vecs = '0 0 0';
+
+	dv = view_right * vecs_y + view_up * vecs_z;
+	w_shotorg = view_origin + dv;
+
+	// now move the vecs forward as much as requested if possible
+	tracebox(w_shotorg, mi, ma, w_shotorg + view_forward * (vecs_x + nudge), MOVE_NORMAL, trueaim); // FIXME this MOVE_NORMAL part will misbehave a little in csqc
+	w_shotorg = trace_endpos - view_forward * nudge;
+
+	shottype = EnemyHitCheck(w_shotorg, mi, ma, trueaimpoint);
+	if(shottype != SHOTTYPE_HITWORLD)
+		return shottype;
+
+	// now test whether we will actually hit the trueaimpoint...
+	tracebox(w_shotorg, mi, ma, trueaimpoint, MOVE_NOMONSTERS, trueaim);
+
+	if(vlen(trace_endpos - trueaimpoint) > vlen(ma - mi) + 1)
+		// yes, this is an ugly hack... but it seems good enough to find out whether the test hits the same place as the initial trace
+		return SHOTTYPE_HITOBSTRUCTION;
+	
+	return SHOTTYPE_HITWORLD;
+}
+
+void CSQC_common_hud(void);
+
+void CSQC_kh_hud(void);
+void CSQC_ctf_hud(void);
+void PostInit(void);
+void CSQC_Demo_Camera();
+float Sbar_WouldDrawScoreboard ();
+float view_set;
+float camera_mode;
+string NextFrameCommand;
+void CSQC_spider_HUD();
+void CSQC_UpdateView(float w, float h)
+{
+	entity e;
+	float fov;
+	float f, i, j;
+
+	dprint_load();
+	WaypointSprite_Load();
+
+	if(spectatee_status)
+		myteam = GetPlayerColor(spectatee_status - 1);
+	else
+		myteam = GetPlayerColor(player_localentnum - 1);
+
+	ticrate = getstatf(STAT_MOVEVARS_TICRATE) * getstatf(STAT_MOVEVARS_TIMESCALE);
+
+	// Render the Scene
+	if(!intermission || !view_set)
+	{
+		view_origin = pmove_org + '0 0 1' * getstati(STAT_VIEWHEIGHT);
+		view_angles = input_angles;
+		makevectors(view_angles);
+		view_forward = v_forward;
+		view_right = v_right;
+		view_up = v_up;
+		view_set = 1;
+	}
+
+	vid_width = w;
+	vid_height = h;
+
+#ifdef BLURTEST
+	if(time > blurtest_time0 && time < blurtest_time1)
+	{
+		float r, t;
+
+		t = (time - blurtest_time0) / (blurtest_time1 - blurtest_time0);
+		r = t * blurtest_radius;
+		f = 1 / pow(t, blurtest_power) - 1;
+
+		cvar_set("r_glsl_postprocess", "1");
+		cvar_set("r_glsl_postprocess_uservec1", strcat(ftos(r), " ", ftos(f), " 0 0"));
+	}
+	else
+	{
+		cvar_set("r_glsl_postprocess", "0");
+		cvar_set("r_glsl_postprocess_uservec1", "0 0 0 0");
+	}
+#endif
+
+	Fog_Force();
+
+	drawframetime = max(0.000001, time - drawtime);
+	drawtime = time;
+
+	// watch for gametype changes here...
+	// in ParseStuffCMD the cmd isn't executed yet :/
+	// might even be better to add the gametype to TE_CSQC_INIT...?
+	if(!postinit)
+		PostInit();
+
+	CheckForGamestartChange();
+	maptimeAnnouncer();
+
+	fov = cvar("fov");
+	if(button_zoom || fov <= 59.5)
+	{
+		if(!zoomscript_caught)
+		{
+			localcmd("+button4\n");
+			zoomscript_caught = 1;
+			ignore_plus_zoom += 1;
+		}
+	}
+	else
+	{
+		if(zoomscript_caught)
+		{
+			localcmd("-button4\n");
+			zoomscript_caught = 0;
+			ignore_minus_zoom += 1;
+		}
+	}
+
+	sbar_alpha_fg = cvar("sbar_alpha_fg" );
+	sbar_currentammo = cvar("sbar_showcurrentammo");
+	sbar_hudselector = cvar("sbar_hudselector");
+	sbar_hud_accuracy = cvar("sbar_hud_accuracy");
+	ColorTranslateMode = cvar("cl_stripcolorcodes");
+	activeweapon = getstati(STAT_SWITCHWEAPON);
+	f = cvar("teamplay");
+	if(f != teamplay)
+	{
+		teamplay = f;
+		Sbar_InitScores();
+	}
+
+	if(last_weapon != activeweapon) {
+		weapontime = time;
+		last_weapon = activeweapon;
+	}
+
+	// ALWAYS Clear Current Scene First
+	R_ClearScene();
+
+	// Assign Standard Viewflags
+	// Draw the World (and sky)
+	R_SetView(VF_DRAWWORLD, 1);
+
+	// Set the console size vars
+	vid_conwidth = cvar("vid_conwidth");
+	vid_conheight = cvar("vid_conheight");
+	vid_pixelheight = cvar("vid_pixelheight");
+
+	R_SetView(VF_FOV, GetCurrentFov(fov));
+
+	// Camera for demo playback
+	if(camera_active)
+	{
+		if(cvar("camera_enable"))
+			CSQC_Demo_Camera();
+		else
+		{
+			cvar_set("chase_active", ftos(chase_active_backup));
+			cvar_set("cl_demo_mousegrab", "0");
+			camera_active = FALSE;
+		}
+	}
+#ifdef CAMERATEST
+	else if(cvar("camera_enable"))
+#else
+	else if(cvar("camera_enable") && isdemo())
+#endif
+	{
+		// Enable required Darkplaces cvars
+		chase_active_backup = cvar("chase_active");
+		cvar_set("chase_active", "2");
+		cvar_set("cl_demo_mousegrab", "1");
+		camera_active = TRUE;
+		camera_mode = FALSE;
+	}
+
+	// Draw the Crosshair
+	float scoreboard_active;
+	scoreboard_active = Sbar_WouldDrawScoreboard();
+	R_SetView(VF_DRAWCROSSHAIR, 0); //Make sure engine crosshairs are always hidden
+
+	// Draw the Engine Status Bar (the default Quake HUD)
+	R_SetView(VF_DRAWENGINESBAR, 0);
+
+	// fetch this one only once per frame
+	sbar_showbinds = cvar("sbar_showbinds");
+	sbar_showbinds_limit = cvar("sbar_showbinds_limit");
+
+	// Update the mouse position
+	/*
+	mousepos_x = vid_conwidth;
+	mousepos_y = vid_conheight;
+	mousepos = mousepos*0.5 + getmousepos();
+	*/
+
+	R_AddEntities(MASK_NORMAL | MASK_ENGINE | MASK_ENGINEVIEWMODELS);
+
+	e = self;
+	for(self = world; (self = nextent(self)); )
+		if(self.draw)
+			self.draw();
+	self = e;
+	R_RenderScene();
+
+	// now switch to 2D drawing mode by calling a 2D drawing function
+	// then polygon drawing will draw as 2D stuff, and NOT get queued until the
+	// next R_RenderScene call
+	drawstring('0 0 0', "", '1 1 0', '1 1 1', 0, 0);
+
+	// Draw the mouse cursor
+	// NOTE: drawpic must happen after R_RenderScene for some reason
+	//drawpic(getmousepos(), "gfx/cursor.tga", '11 14 0', '1 1 1', 1, 0);
+	//drawstring('50 50', ftos(game), '10 10 0', '1 1 1', 1, 0);
+	//self = edict_num(player_localnum);
+	//drawstring('0 0', vtos(pmove_org), '8 8 0', '1 1 1', 1, 0);
+	//drawstring('0 8', strcat("ORG: ", vtos(self.origin), " state: ", ftos(self.ctf_state), " HP: ", ftos(self.health)), '8 8 0', '1 1 1', 1, 0);
+	// as long as the ctf part isn't in, this is useless
+	if(menu_visible)
+		menu_show();
+
+	/*if(gametype == GAME_CTF)
+	{
+		ctf_view();
+	} else */
+
+	// draw 2D entities
+	e = self;
+	for(self = world; (self = nextent(self)); )
+		if(self.draw2d)
+			self.draw2d();
+	self = e;
+
+	// draw radar
+	if(
+		ons_showmap
+		||
+		(
+			!scoreboard_active
+			&&
+			cvar_string("cl_teamradar") != "0"
+			&&
+			(
+				cvar("cl_teamradar") == 2
+				||
+				teamplay
+			)
+		)
+	)
+		teamradar_view();
+
+	if (cvar("cl_showpressedkeys")) // draw pressed keys when spectating and playing
+	{
+		if(spectatee_status > 0 || cvar("cl_showpressedkeys") >= 2)
+			Sbar_DrawPressedKeys();
+	}
+	
+	if (cvar("cl_showspeed"))
+		Sbar_ShowSpeed();
+	
+	// draw sbar
+ 	if(cvar("r_letterbox") == 0)
+ 		Sbar_DrawCenterPrint(); // draw centerprint messages even if viewsize >= 120
+
+    float hud;
+    hud = getstati(STAT_HUD);
+    if(hud == HUD_SPIDEBOT)
+    {
+        vector sz;
+        CSQC_spider_HUD();
+        sz = drawgetimagesize(SPIDER_CROSS);
+        sz_x *= cvar_or("cl_vehicle_spiderbot_cross_size",1);
+        sz_y *= cvar_or("cl_vehicle_spiderbot_cross_size",1);
+        drawpic('0.5 0 0' * (vid_conwidth - sz_x) + '0 0.5 0' * (vid_conheight - sz_y), SPIDER_CROSS, sz, '1 1 1', cvar_or("cl_vehicle_spiderbot_cross_alpha",0.6), DRAWFLAG_NORMAL);
+    }
+    else
+    {
+        if(cvar("r_letterbox") == 0)
+            if(cvar("viewsize") < 120)
+                CSQC_common_hud();
+
+        // crosshair goes VERY LAST
+        if(!scoreboard_active && !ons_showmap && !camera_active) {
+            // TrueAim check
+            float shottype;
+			float bullets, ring_scale;
+
+            if(cvar("crosshair_hittest"))
+                shottype = TrueAimCheck();
+            else
+                shottype = SHOTTYPE_HITWORLD;
+
+            string wcross_style;
+            wcross_style = cvar_string("crosshair");
+
+            if (wcross_style != "0") {
+                vector wcross_color, wcross_size;
+                string wcross_wep, wcross_name;
+                float wcross_alpha, wcross_sizefloat;
+
+                wcross_color_x = cvar("crosshair_color_red");
+                wcross_color_y = cvar("crosshair_color_green");
+                wcross_color_z = cvar("crosshair_color_blue");
+                wcross_alpha = cvar("crosshair_color_alpha");
+                wcross_sizefloat = cvar("crosshair_size");
+                if (cvar("crosshair_per_weapon")) {
+                    e = get_weaponinfo(activeweapon);
+                    if (e && e.netname != "")
+                    {
+                        wcross_wep = e.netname;
+                        wcross_style = cvar_string(strcat("crosshair_", wcross_wep));
+                        if(wcross_style == "")
+                            wcross_style = e.netname;
+
+                        if(!cvar("crosshair_color_override"))
+                        {
+                            wcross_color_x = cvar(strcat("crosshair_", wcross_wep, "_color_red"));
+                            wcross_color_y = cvar(strcat("crosshair_", wcross_wep, "_color_green"));
+                            wcross_color_z = cvar(strcat("crosshair_", wcross_wep, "_color_blue"));
+                        }
+
+                        wcross_alpha *= cvar(strcat("crosshair_", wcross_wep, "_color_alpha"));
+                        wcross_sizefloat *= cvar(strcat("crosshair_", wcross_wep, "_size"));
+                    }
+                }
+
+                wcross_name = strcat("gfx/crosshair", wcross_style);
+
+				if(shottype == SHOTTYPE_HITENEMY)
+					wcross_sizefloat *= cvar("crosshair_hittest"); // is not queried if hittest is 0
+				if(shottype == SHOTTYPE_HITTEAM)
+					wcross_sizefloat /= cvar("crosshair_hittest"); // is not queried if hittest is 0
+
+                wcross_size = drawgetimagesize(wcross_name);
+                wcross_size_x *= wcross_sizefloat;
+                wcross_size_y *= wcross_sizefloat;
+				
+				// ring around crosshair representing bullets left in camping rifle clip
+				if (activeweapon == WEP_CAMPINGRIFLE)
+				{
+					ring_scale = cvar("crosshair_campingrifle_ring_size");
+					bullets = bound(0, getstati(STAT_BULLETS_LOADED), 8);
+				}
+				else
+					bullets = 0;
+				
+                if(shottype == SHOTTYPE_HITENEMY || shottype == SHOTTYPE_HITWORLD)
+                {
+					if (bullets)
+						drawpic('0.5 0 0' * (vid_conwidth - wcross_size_x * ring_scale) + '0 0.5 0' * (vid_conheight - wcross_size_y * ring_scale), strcat("gfx/hud/rifle_ring_", ftos(bullets)), wcross_size * ring_scale, wcross_color, wcross_alpha, DRAWFLAG_NORMAL);
+                    drawpic('0.5 0 0' * (vid_conwidth - wcross_size_x) + '0 0.5 0' * (vid_conheight - wcross_size_y), wcross_name, wcross_size, wcross_color, wcross_alpha, DRAWFLAG_NORMAL);
+                }
+                else
+                {
+                    wcross_alpha *= 0.04 * 0.75;
+                    for(i = -2; i <= 2; ++i)
+                        for(j = -2; j <= 2; ++j)
+						{
+							if (bullets)
+								drawpic('0.5 0 0' * (vid_conwidth - wcross_size_x * ring_scale + i) + '0 0.5 0' * (vid_conheight - wcross_size_y * ring_scale + j), strcat("gfx/hud/rifle_ring_", ftos(bullets)), wcross_size * ring_scale, wcross_color, wcross_alpha, DRAWFLAG_NORMAL);
+                            drawpic('0.5 0 0' * (vid_conwidth - wcross_size_x + i) + '0 0.5 0' * (vid_conheight - wcross_size_y + j), wcross_name, wcross_size, wcross_color, wcross_alpha, DRAWFLAG_NORMAL);
+						}
+                }
+            }
+        }
+    }
+
+	if(NextFrameCommand)
+	{
+		localcmd("\n", NextFrameCommand, "\n");
+		NextFrameCommand = string_null;
+	}
+}
+
+void Sbar_Draw();
+void CSQC_spider_HUD()
+{
+    float rockets,reload,heat,hp,shield,i;
+    vector p,pp;
+
+    rockets = getstati(STAT_SPIDERBOT_ROCKETS);
+    heat    = min(getstatf(STAT_SPIDERBOT_HEAT),1);
+    reload  = min(getstatf(STAT_SPIDERBOT_RELOAD),1);
+    hp      = min(getstatf(STAT_SPIDERBOT_HEALTH),1);
+    shield  = min(getstatf(STAT_SPIDERBOT_SHIELD),1);
+
+    // Draw health bar
+    p = '0.5 0 0' * (vid_conwidth - (rkt_size * 8));
+    p = p + '0 1 0' * vid_conheight - '0 32 0';
+    //pp = ('0 1 0' * hp) + ('1 0 0' * (1-hp));
+    drawfill(p, '256 0 0' * shield + '0 8 0' , '0.5 0.5 1', 0.75, DRAWFLAG_NORMAL);
+    p_y += 8;
+    drawfill(p, '256 0 0' * hp + '0 8 0' , '0 1 0', 0.75, DRAWFLAG_NORMAL);
+    p_x += 256 * hp;
+    drawfill(p, '256 0 0' * (1-hp) + '0 8 0' , '0 0 0', 0.75, DRAWFLAG_NORMAL);
+
+    // Draw minigun heat indicator
+    p = '0.5 0 0' * (vid_conwidth - 256);
+    p = p + '0 1 0' * vid_conheight - '0 34  0';
+    drawfill(p, '256 0 0' * (1-heat) + '0 2 0' ,'0 0 1', 0.5, DRAWFLAG_NORMAL);
+    p_x += 256 * (1-heat);
+    drawfill(p, '256 0 0' * heat  + '0 2 0' , '1 0 0', 0.5, DRAWFLAG_NORMAL);
+
+    // Draw rocket icons for loaded/empty tubes.
+    pp = '0.5 0 0' * (vid_conwidth - (rkt_size * 8));
+    pp += '0 1 0' * vid_conheight - '0 64 0';
+    for(i = 0; i < 8; ++i)
+    {
+        p = pp + '1 0 0' * (rkt_size * i);
+        if(rockets == 8)
+        {
+            if(floor(reload * 8) == i)
+            {
+                drawpic(p, spider_rocket_icon, '1 1 0' * rkt_size, '1 0 0' + '0 1 0' * ((reload*8)-i), 0.75 , DRAWFLAG_NORMAL);
+            }
+            else if(i < reload * 8)
+                drawpic(p, spider_rocket_icon, '1 1 0' * rkt_size, '1 1 0', 0.75 , DRAWFLAG_NORMAL);
+            else
+                drawpic(p, spider_rocket_icon, '1 1 0' * rkt_size, '0.5 0.5 0.5', 0.75, DRAWFLAG_NORMAL);
+        }
+        else
+        {
+            if(i < rockets)
+                drawpic(p, spider_rocket_icon, '1 1 0' * rkt_size, '0 0 0', 0.25, DRAWFLAG_NORMAL);
+            else
+                drawpic(p, spider_rocket_icon, '1 1 0' * rkt_size, '0 1 0' * reload, 0.75, DRAWFLAG_NORMAL);
+        }
+    }
+
+	if (sb_showscores)
+	{
+		Sbar_DrawScoreboard();
+		Sbar_DrawCenterPrint();
+	}
+
+}
+void CSQC_common_hud(void)
+{
+
+	// Sbar_SortFrags(); done in Sbar_Draw
+    float hud;
+    hud = getstati(STAT_HUD);
+
+    //hud = 10;
+    switch(hud)
+    {
+        case HUD_NORMAL:
+            Sbar_Draw();
+            break;
+
+        case HUD_SPIDEBOT:
+            CSQC_spider_HUD();
+            break;
+    }
+}
+
+
+// following vectors must be global to allow seamless switching between camera modes
+vector camera_offset, current_camera_offset, mouse_angles, current_angles, current_origin, current_position;
+void CSQC_Demo_Camera()
+{
+	float speed, attenuation, dimensions;
+	vector tmp, delta;
+
+	if( cvar("camera_reset") || !camera_mode )
+	{
+		camera_offset = '0 0 0';
+		current_angles = '0 0 0';
+		camera_direction = '0 0 0';
+		camera_offset_z += 30;
+		camera_offset_x += 30 * -cos(current_angles_y * DEG2RAD);
+		camera_offset_y += 30 * -sin(current_angles_y * DEG2RAD);
+		current_origin = view_origin;
+		current_camera_offset  = camera_offset;
+		cvar_set("camera_reset", "0");
+		camera_mode = CAMERA_CHASE;
+	}
+
+	// Camera angles
+	if( camera_roll )
+		mouse_angles_z += camera_roll * cvar("camera_speed_roll");
+
+	if(cvar("camera_look_player"))
+	{
+		local vector dir;
+		local float n;
+
+		dir = normalize(view_origin - current_position);
+		n = mouse_angles_z;
+		mouse_angles = vectoangles(dir);
+		mouse_angles_x = mouse_angles_x * -1;
+		mouse_angles_z = n;
+	}
+	else
+	{
+		tmp = getmousepos() * 0.1;
+		if(vlen(tmp)>cvar("camera_mouse_treshold"))
+		{
+			mouse_angles_x += tmp_y * cos(mouse_angles_z * DEG2RAD) + (tmp_x * sin(mouse_angles_z * DEG2RAD));
+			mouse_angles_y -= tmp_x * cos(mouse_angles_z * DEG2RAD) + (tmp_y * -sin(mouse_angles_z * DEG2RAD));
+		}
+	}
+
+	while (mouse_angles_x < -180) mouse_angles_x = mouse_angles_x + 360;
+	while (mouse_angles_x > 180) mouse_angles_x = mouse_angles_x - 360;
+	while (mouse_angles_y < -180) mouse_angles_y = mouse_angles_y + 360;
+	while (mouse_angles_y > 180) mouse_angles_y = mouse_angles_y - 360;
+
+	// Fix difference when angles don't have the same sign
+	delta = '0 0 0';
+	if(mouse_angles_y < -60 && current_angles_y > 60)
+		delta = '0 360 0';
+	if(mouse_angles_y > 60 && current_angles_y < -60)
+		delta = '0 -360 0';
+
+	if(cvar("camera_look_player"))
+		attenuation = cvar("camera_look_attenuation");
+	else
+		attenuation = cvar("camera_speed_attenuation");
+
+	attenuation = 1 / max(1, attenuation);
+	current_angles += (mouse_angles - current_angles + delta) * attenuation;
+
+	while (current_angles_x < -180) current_angles_x = current_angles_x + 360;
+	while (current_angles_x > 180) current_angles_x = current_angles_x - 360;
+	while (current_angles_y < -180) current_angles_y = current_angles_y + 360;
+	while (current_angles_y > 180) current_angles_y = current_angles_y - 360;
+
+	// Camera position
+	tmp = '0 0 0';
+	dimensions = 0;
+
+	if( camera_direction_x )
+	{
+		tmp_x = camera_direction_x * cos(current_angles_y * DEG2RAD);
+		tmp_y = camera_direction_x * sin(current_angles_y * DEG2RAD);
+		if( cvar("camera_forward_follows") && !cvar("camera_look_player") )
+			tmp_z = camera_direction_x * -sin(current_angles_x * DEG2RAD);
+		++dimensions;
+	}
+
+	if( camera_direction_y )
+	{
+		tmp_x += camera_direction_y * -sin(current_angles_y * DEG2RAD);
+		tmp_y += camera_direction_y * cos(current_angles_y * DEG2RAD) * cos(current_angles_z * DEG2RAD);
+		tmp_z += camera_direction_y * sin(current_angles_z * DEG2RAD);
+		++dimensions;
+	}
+
+	if( camera_direction_z )
+	{
+		tmp_z += camera_direction_z * cos(current_angles_z * DEG2RAD);
+		++dimensions;
+	}
+
+	if(cvar("camera_free"))
+		speed = cvar("camera_speed_free");
+	else
+		speed = cvar("camera_speed_chase");
+
+	if(dimensions)
+	{
+		speed = speed * sqrt(1 / dimensions);
+		camera_offset += tmp * speed;
+	}
+
+	current_camera_offset += (camera_offset - current_camera_offset) * attenuation;
+
+	// Camera modes
+	if( cvar("camera_free") )
+	{
+		if ( camera_mode == CAMERA_CHASE )
+		{
+			current_camera_offset = current_origin + current_camera_offset;
+			camera_offset = current_origin + camera_offset;
+		}
+
+		camera_mode = CAMERA_FREE;
+		current_position = current_camera_offset;
+	}
+	else
+	{
+		if ( camera_mode == CAMERA_FREE )
+		{
+			current_origin = view_origin;
+			camera_offset = camera_offset - current_origin;
+			current_camera_offset = current_camera_offset - current_origin;
+		}
+
+		camera_mode = CAMERA_CHASE;
+
+		if(cvar("camera_chase_smoothly"))
+			current_origin += (view_origin - current_origin) * attenuation;
+		else
+			current_origin = view_origin;
+
+		current_position = current_origin + current_camera_offset;
+	}
+
+	R_SetView(VF_ANGLES, current_angles);
+	R_SetView(VF_ORIGIN, current_position);
+}


Property changes on: branches/nexuiz-2.0/data/qcsrc/client/View.qc
___________________________________________________________________
Name: svn:eol-style
   + native


Property changes on: branches/nexuiz-2.0/data/qcsrc/client/bgmscript.qc
___________________________________________________________________
Name: svn:eol-style
   + native


Property changes on: branches/nexuiz-2.0/data/qcsrc/client/bgmscript.qh
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: branches/nexuiz-2.0/data/qcsrc/client/casings.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/client/casings.qc	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/qcsrc/client/casings.qc	2009-07-11 14:59:28 UTC (rev 7191)
@@ -17,7 +17,7 @@
 		self.flags &~= FL_ONGROUND;
 	}
 
-	Movetype_Physics(FALSE);
+	Movetype_Physics_NoMatchServer();
 
 	self.renderflags = 0;
 	self.alpha = bound(0, self.cnt - time, 1);


Property changes on: branches/nexuiz-2.0/data/qcsrc/client/casings.qc
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: branches/nexuiz-2.0/data/qcsrc/client/csqc_builtins.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/client/csqc_builtins.qc	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/qcsrc/client/csqc_builtins.qc	2009-07-11 14:59:28 UTC (rev 7191)
@@ -1,287 +1,287 @@
-void (vector ang)							makevectors = #1;
-void(entity e, vector o) setorigin	= #2;
-void (entity e, string m)						setmodel = #3;
-void(entity e, vector min, vector max) setsize = #4;
-
-void ()									break = #6;
-float ()								random = #7;
-void (entity e, float chan, string samp, float vol, float atten)	sound = #8;
-vector (vector v)							normalize = #9;
-void (string e)								error = #10;
-void (string e)								objerror = #11;
-float (vector v)							vlen = #12;
-float (vector v)							vectoyaw = #13;
-entity ()								spawn = #14;
-void (entity e)								remove = #15;
-
-void (vector v1, vector v2, float nomonsters, entity forent)		traceline = #16;
-
-entity (entity start, .string fld, string match)			find = #18;
-string (string s)							precache_sound = #19;
-string (string s)							precache_model = #20;
-
-//void (string s)								dprint = #25;
-string (float f)							ftos = #26;
-string (vector v)							vtos = #27;
-void ()									coredump = #28;
-void ()									traceon = #29;
-void ()									traceoff = #30;
-void (entity e)								eprint = #31;
-
-float (float v)								rint = #36;
-float (float v)								floor = #37;
-float (float v)								ceil = #38;
-
-float (vector v)							pointcontents = #41;
-float (float f)								fabs = #43;
-
-float (string s)							cvar = #45;
-void (string s, ...)							localcmd = #46;
-entity (entity e)							nextent = #47;
-
-vector (vector v)							vectoangles = #51;
-vector (vector v, vector w)							vectoangles2 = #51;
-
-void (string var, string val)						cvar_set = #72;
-
-
-float()									ReadByte = #360;
-float()									ReadChar = #361;
-float()									ReadShort = #362;
-float()									ReadLong = #363;
-float()									ReadCoord = #364;
-float()									ReadAngle = #365;
-string()								ReadString = #366;	//warning: this returns a temporary!
-
-float(string s)								stof = #81;
-
-
-void (vector v1, vector min, vector max, vector v2, float nomonsters, entity forent)	tracebox = #90;
-float (string name, string value, ...)					registercvar = #93;
-
-entity (entity start, .entity fld, entity match)			findentity = #98;
-entity (entity start, .float fld, float match)				findfloat = #98;
-
-float (string s)							checkextension = #99;
-
-float (string filename, float mode)					fopen = #110;
-void (float fhandle)							fclose = #111;
-string (float fhandle)							fgets = #112;
-void (float fhandle, string s)						fputs = #113;
-float (string s)							strlen = #114;
-string (...)								strcat = #115;
-string (string s, float start, float length)				substring = #116;
-vector (string s)							stov = #117;
-string (string s)							strzone = #118;
-void (string s)								strunzone = #119;
-
-void ()									R_ClearScene = #300;
-void (float mask)							R_AddEntities = #301;
-void (entity e)								R_AddEntity = #302;
-float (float property, ...)						R_SetView = #303;
-void ()									R_RenderScene = #304;
-void (vector org, float radius, vector rgb)				R_AddDynamicLight = #305;
-void ()									R_CalcRefDef = #306;
-
-vector (vector v)							cs_unproject = #310;
-vector (vector v)							cs_project = #311;
-
-void	drawline(float width, vector pos1, vector pos2, vector rgb, float alpha, float flags) = #315;
-float	iscachedpic(string name)	= #316;
-string	precache_pic(string name, ...)	= #317;
-vector	drawgetimagesize(string pic) = #318;
-void	freepic(string name)		= #319;
-float	drawcharacter(vector position, float character, vector scale, vector rgb, float alpha, float flag) = #320;
-float	drawstring(vector position, string text, vector scale, vector rgb, float alpha, float flag) = #321;
-float	drawpic(vector position, string pic, vector size, vector rgb, float alpha, float flag) = #322;
-float	drawfill(vector position, vector size, vector rgb, float alpha, float flag) = #323;
-void	drawsetcliparea(float x, float y, float width, float height) = #324;
-void	drawresetcliparea(void) = #325;
-float	drawcolorcodedstring(vector position, string text, vector scale, float alpha, float flag) = #326;
-float	stringwidth(string text, float handleColors) = #327;
-float	drawsubpic(vector position, vector size, string pic, vector srcPosition, vector srcSize, vector rgb, float alpha, float flag) = #328;
-
-
-float (float statnum)							getstatf = #330;
-float (float statnum)							getstati = #331;
-string (float statnum)							getstats = #332;
-
-void (entity e, float i)						setmodelindex = #333;
-string (float i)							modelnameforindex = #334;
-
-float(string efname)							particleeffectnum = #335;
-void(entity ent, float effectnum, vector start, vector end, ...)	trailparticles = #336;
-void (float efnum, vector org, vector vel, float countmultiplier, ...)	pointparticles = #337;
-
-void (string s, ...)							cprint = #338;
-void (string s, ...)							print = #339;
-
-void (float scale)							setsensitivityscale = #346;
-
-
-void (float framenum)							RetrieveMovementFrame = #345;
-void ()									DefaultPlayerPhysics = #347;
-
-string (float playernum, string key)					getplayerkey = #348;
-void (string cmdname)							registercmd = #352;
-vector ()								getmousepos = #344;
-
-string (string s) 							uncolorstring = #170;
-
-void (vector org, vector forward, vector right, vector up)		setlistener = #351;
-
-float (vector start, vector end, float ignore, float csqcents)		selecttraceline = #355;
-float ()								isdemo = #349;
-float ()								isserver = #350;
-
-void (float f)								setwantsmousemove = #343;
-string (float key)							getkeybind = #342;
-//string (float f)							chr = #78;
-string (float f)							chr = #78;
-float(string str, float ofs)						str2chr = #222;
-string(float c, ...)							chr2str = #223;
-
-vector (vector org)							getlight = #92;
-
-entity (.string fld, string match)					findchain = #402;
-entity (.float fld, float match)					findchainflags = #450;
-entity (.entity fld, entity match)					findchainentity = #403;
-entity (.float fld, float match)					findchainfloat = #403;
-entity (entity start, .float fld, float match)				findflags = #449;
-
-float (string pattern, float caseinsensitive, float quiet)		search_begin = #444;
-void (float handle)							search_end = #445;
-float (float handle)							search_getsize = #446;
-string (float handle, float num)					search_getfilename = #447;
-
-
-float (entity e, float s)						getsurfacenumpoints = #434;
-vector (entity e, float s, float n)					getsurfacepoint = #435;
-vector (entity e, float s)						getsurfacenormal = #436;
-string (entity e, float s)						getsurfacetexture = #437;
-float (entity e, vector p)						getsurfacenearpoint = #438;
-vector (entity e, float s, vector p)					getsurfaceclippedpoint = #439;
-
-float (float a, float b) min = #94;
-float (float a, float b, float c) min3 = #94;
-float (float a, float b, float c, float d) min4 = #94;
-float (float a, float b, float c, float d, float e) min5 = #94;
-float (float a, float b, float c, float d, float e, float f) min6 = #94;
-float (float a, float b, float c, float d, float e, float f, float g) min7 = #94;
-float (float a, float b, float c, float d, float e, float f, float g, float h) min8 = #94;
-float (float a, float b) max = #95;
-float (float a, float b, float c) max3 = #95;
-float (float a, float b, float c, float d) max4 = #95;
-float (float a, float b, float c, float d, float e) max5 = #95;
-float (float a, float b, float c, float d, float e, float f) max6 = #95;
-float (float a, float b, float c, float d, float e, float f, float g) max7 = #95;
-float (float a, float b, float c, float d, float e, float f, float g, float h) max8 = #95;
-float (float minimum, float val, float maximum) bound = #96;
-
-vector () randomvec = #91;
-
-float (float val)		sin = #60;
-float (float val)		cos = #61;
-float (float val)		sqrt = #62;
-float (float a, float b)	pow = #97;
-
-void (vector org, string modelname, float startframe, float endframe, float framerate) effect = #404;
-
-void (vector org, vector velocity, float howmany) te_blood = #405;
-void (vector mincorner, vector maxcorner, float explosionspeed, float howmany) te_bloodshower = #406;
-void (vector org, float radius, float lifetime, vector color) te_customflash = #417;
-void(vector org, vector color) te_explosionrgb = #407;
-void(vector mincorner, vector maxcorner, vector vel, float howmany, float color, float gravityflag, float randomveljitter) te_particlecube = #408;
-void(vector mincorner, vector maxcorner, vector vel, float howmany, float color) te_particlerain = #409;
-void(vector mincorner, vector maxcorner, vector vel, float howmany, float color) te_particlesnow = #410;
-void(vector org) te_plasmaburn = #433;
-void(vector org) te_gunshotquad = #412;
-void(vector org) te_spikequad = #413;
-void(vector org) te_superspikequad = #414;
-void(vector org) te_explosionquad = #415;
-void(vector org) te_smallflash = #416;
-void(vector org, vector vel, float howmany) te_spark = #411;
-
-void(vector org) te_gunshot = #418;
-void(vector org) te_spike = #419;
-void(vector org) te_superspike = #420;
-void(vector org) te_explosion = #421;
-void(vector org) te_tarexplosion = #422;
-void(vector org) te_wizspike = #423;
-void(vector org) te_knightspike = #424;
-void(vector org) te_lavasplash = #425;
-void(vector org) te_teleport = #426;
-void(vector org, float color, float colorlength) te_explosion2 = #427;
-void(entity own, vector start, vector end) te_lightning1 = #428;
-void(entity own, vector start, vector end) te_lightning2 = #429;
-void(entity own, vector start, vector end) te_lightning3 = #430;
-void(entity own, vector start, vector end) te_beam = #431;
-
-float (entity ent, string tagname)	gettagindex = #451;
-vector (entity ent, float tagindex)	gettaginfo = #452;
-
-float (string s)	tokenize = #441;
-string (float argnum)	argv = #442;
-
-string (string s) cvar_string = #448;
-
-float ()						buf_create = #460;
-void (float bufhandle)					buf_del = #461;
-float (float bufhandle)					buf_getsize = #462;
-void (float bufhandle_from, float bufhandle_to)		buf_copy = #463;
-void (float bufhandle, float sortpower, float backward)	buf_sort = #464;
-string (float bufhandle, string glue)			buf_implode = #465;
-string (float bufhandle, float string_index)		bufstr_get = #466;
-void (float bufhandle, float string_index, string str)	bufstr_set = #467;
-float (float bufhandle, string str, float order)	bufstr_add = #468;
-void (float bufhandle, float string_index)		bufstr_free = #469;
-
-float () onground = #355;
-
-void(string texturename, ...) R_BeginPolygon = #306;
-void(vector org, vector texcoords, vector rgb, float alpha) R_PolygonVertex = #307;
-void() R_EndPolygon = #308;
-
-float(string s, float num) charindex = #356;
-
-// Darkplaces Additional Functions
-string(string s) strdecolorize = #477;
-string(string s) strtolower = #480; // returns the passed in string in pure lowercase form
-string(string s) strtoupper = #481; // returns the passed in string in pure uppercase form
-float(string s) strlennocol = #476;
-
-void(vector origin, string sample, float volume, float attenuation) pointsound = #483;
-
-// added by blub
-
-string(string key)					serverkey = #354;
-float(string s1, string s2)				strcasecmp = #229;
-float(string s1, string s2, float len)			strncasecmp = #230;
-float(string str, string sub, float startoffs)		strstrofs = #221;
-//float(string str, string sub) 	    		strstrofs = #221;
-entity(float num)   	   				edict_num = #459;
-string(void)						ReadPicture = #501;
-string(string filename)					whichpack = #503;
-float(entity ent)					num_for_edict = #512;
-float(string s, string separator1, ...) tokenizebyseparator = #479;
-string(string in) uri_unescape = #511;
-float(float caseinsensitive, string s, ...) crc16 = #494;
-string(string info, string key) infoget = #227;
-string(string info, string key, string value, ...) infoadd = #226;
-string(string in) uri_escape = #510;
-
-string	keynumtostring(float keynum) = #520;
-string	findkeysforcommand(string command) = #521;
-
-string(float ccase, float calpha, float cnum, string s, ...) strconv = #224;
-float(entity ent) wasfreed = #353;
-
-entity(vector org, float rad) findradius = #22;
-
-string(float uselocaltime, string format, ...) strftime = #478;
-float(float timer) gettime = #519;
-#define GETTIME_CDTRACK 4
-
-float(string s) tokenize_console = #514;
-float(float i) argv_start_index = #515;
-float(float i) argv_end_index = #516;
+void (vector ang)							makevectors = #1;
+void(entity e, vector o) setorigin	= #2;
+void (entity e, string m)						setmodel = #3;
+void(entity e, vector min, vector max) setsize = #4;
+
+void ()									break = #6;
+float ()								random = #7;
+void (entity e, float chan, string samp, float vol, float atten)	sound = #8;
+vector (vector v)							normalize = #9;
+void (string e)								error = #10;
+void (string e)								objerror = #11;
+float (vector v)							vlen = #12;
+float (vector v)							vectoyaw = #13;
+entity ()								spawn = #14;
+void (entity e)								remove = #15;
+
+void (vector v1, vector v2, float nomonsters, entity forent)		traceline = #16;
+
+entity (entity start, .string fld, string match)			find = #18;
+string (string s)							precache_sound = #19;
+string (string s)							precache_model = #20;
+
+//void (string s)								dprint = #25;
+string (float f)							ftos = #26;
+string (vector v)							vtos = #27;
+void ()									coredump = #28;
+void ()									traceon = #29;
+void ()									traceoff = #30;
+void (entity e)								eprint = #31;
+
+float (float v)								rint = #36;
+float (float v)								floor = #37;
+float (float v)								ceil = #38;
+
+float (vector v)							pointcontents = #41;
+float (float f)								fabs = #43;
+
+float (string s)							cvar = #45;
+void (string s, ...)							localcmd = #46;
+entity (entity e)							nextent = #47;
+
+vector (vector v)							vectoangles = #51;
+vector (vector v, vector w)							vectoangles2 = #51;
+
+void (string var, string val)						cvar_set = #72;
+
+
+float()									ReadByte = #360;
+float()									ReadChar = #361;
+float()									ReadShort = #362;
+float()									ReadLong = #363;
+float()									ReadCoord = #364;
+float()									ReadAngle = #365;
+string()								ReadString = #366;	//warning: this returns a temporary!
+
+float(string s)								stof = #81;
+
+
+void (vector v1, vector min, vector max, vector v2, float nomonsters, entity forent)	tracebox = #90;
+float (string name, string value, ...)					registercvar = #93;
+
+entity (entity start, .entity fld, entity match)			findentity = #98;
+entity (entity start, .float fld, float match)				findfloat = #98;
+
+float (string s)							checkextension = #99;
+
+float (string filename, float mode)					fopen = #110;
+void (float fhandle)							fclose = #111;
+string (float fhandle)							fgets = #112;
+void (float fhandle, string s)						fputs = #113;
+float (string s)							strlen = #114;
+string (...)								strcat = #115;
+string (string s, float start, float length)				substring = #116;
+vector (string s)							stov = #117;
+string (string s)							strzone = #118;
+void (string s)								strunzone = #119;
+
+void ()									R_ClearScene = #300;
+void (float mask)							R_AddEntities = #301;
+void (entity e)								R_AddEntity = #302;
+float (float property, ...)						R_SetView = #303;
+void ()									R_RenderScene = #304;
+void (vector org, float radius, vector rgb)				R_AddDynamicLight = #305;
+void ()									R_CalcRefDef = #306;
+
+vector (vector v)							cs_unproject = #310;
+vector (vector v)							cs_project = #311;
+
+void	drawline(float width, vector pos1, vector pos2, vector rgb, float alpha, float flags) = #315;
+float	iscachedpic(string name)	= #316;
+string	precache_pic(string name, ...)	= #317;
+vector	drawgetimagesize(string pic) = #318;
+void	freepic(string name)		= #319;
+float	drawcharacter(vector position, float character, vector scale, vector rgb, float alpha, float flag) = #320;
+float	drawstring(vector position, string text, vector scale, vector rgb, float alpha, float flag) = #321;
+float	drawpic(vector position, string pic, vector size, vector rgb, float alpha, float flag) = #322;
+float	drawfill(vector position, vector size, vector rgb, float alpha, float flag) = #323;
+void	drawsetcliparea(float x, float y, float width, float height) = #324;
+void	drawresetcliparea(void) = #325;
+float	drawcolorcodedstring(vector position, string text, vector scale, float alpha, float flag) = #326;
+float	stringwidth(string text, float handleColors) = #327;
+float	drawsubpic(vector position, vector size, string pic, vector srcPosition, vector srcSize, vector rgb, float alpha, float flag) = #328;
+
+
+float (float statnum)							getstatf = #330;
+float (float statnum)							getstati = #331;
+string (float statnum)							getstats = #332;
+
+void (entity e, float i)						setmodelindex = #333;
+string (float i)							modelnameforindex = #334;
+
+float(string efname)							particleeffectnum = #335;
+void(entity ent, float effectnum, vector start, vector end, ...)	trailparticles = #336;
+void (float efnum, vector org, vector vel, float countmultiplier, ...)	pointparticles = #337;
+
+void (string s, ...)							cprint = #338;
+void (string s, ...)							print = #339;
+
+void (float scale)							setsensitivityscale = #346;
+
+
+void (float framenum)							RetrieveMovementFrame = #345;
+void ()									DefaultPlayerPhysics = #347;
+
+string (float playernum, string key)					getplayerkey = #348;
+void (string cmdname)							registercmd = #352;
+vector ()								getmousepos = #344;
+
+string (string s) 							uncolorstring = #170;
+
+void (vector org, vector forward, vector right, vector up)		setlistener = #351;
+
+float (vector start, vector end, float ignore, float csqcents)		selecttraceline = #355;
+float ()								isdemo = #349;
+float ()								isserver = #350;
+
+void (float f)								setwantsmousemove = #343;
+string (float key)							getkeybind = #342;
+//string (float f)							chr = #78;
+string (float f)							chr = #78;
+float(string str, float ofs)						str2chr = #222;
+string(float c, ...)							chr2str = #223;
+
+vector (vector org)							getlight = #92;
+
+entity (.string fld, string match)					findchain = #402;
+entity (.float fld, float match)					findchainflags = #450;
+entity (.entity fld, entity match)					findchainentity = #403;
+entity (.float fld, float match)					findchainfloat = #403;
+entity (entity start, .float fld, float match)				findflags = #449;
+
+float (string pattern, float caseinsensitive, float quiet)		search_begin = #444;
+void (float handle)							search_end = #445;
+float (float handle)							search_getsize = #446;
+string (float handle, float num)					search_getfilename = #447;
+
+
+float (entity e, float s)						getsurfacenumpoints = #434;
+vector (entity e, float s, float n)					getsurfacepoint = #435;
+vector (entity e, float s)						getsurfacenormal = #436;
+string (entity e, float s)						getsurfacetexture = #437;
+float (entity e, vector p)						getsurfacenearpoint = #438;
+vector (entity e, float s, vector p)					getsurfaceclippedpoint = #439;
+
+float (float a, float b) min = #94;
+float (float a, float b, float c) min3 = #94;
+float (float a, float b, float c, float d) min4 = #94;
+float (float a, float b, float c, float d, float e) min5 = #94;
+float (float a, float b, float c, float d, float e, float f) min6 = #94;
+float (float a, float b, float c, float d, float e, float f, float g) min7 = #94;
+float (float a, float b, float c, float d, float e, float f, float g, float h) min8 = #94;
+float (float a, float b) max = #95;
+float (float a, float b, float c) max3 = #95;
+float (float a, float b, float c, float d) max4 = #95;
+float (float a, float b, float c, float d, float e) max5 = #95;
+float (float a, float b, float c, float d, float e, float f) max6 = #95;
+float (float a, float b, float c, float d, float e, float f, float g) max7 = #95;
+float (float a, float b, float c, float d, float e, float f, float g, float h) max8 = #95;
+float (float minimum, float val, float maximum) bound = #96;
+
+vector () randomvec = #91;
+
+float (float val)		sin = #60;
+float (float val)		cos = #61;
+float (float val)		sqrt = #62;
+float (float a, float b)	pow = #97;
+
+void (vector org, string modelname, float startframe, float endframe, float framerate) effect = #404;
+
+void (vector org, vector velocity, float howmany) te_blood = #405;
+void (vector mincorner, vector maxcorner, float explosionspeed, float howmany) te_bloodshower = #406;
+void (vector org, float radius, float lifetime, vector color) te_customflash = #417;
+void(vector org, vector color) te_explosionrgb = #407;
+void(vector mincorner, vector maxcorner, vector vel, float howmany, float color, float gravityflag, float randomveljitter) te_particlecube = #408;
+void(vector mincorner, vector maxcorner, vector vel, float howmany, float color) te_particlerain = #409;
+void(vector mincorner, vector maxcorner, vector vel, float howmany, float color) te_particlesnow = #410;
+void(vector org) te_plasmaburn = #433;
+void(vector org) te_gunshotquad = #412;
+void(vector org) te_spikequad = #413;
+void(vector org) te_superspikequad = #414;
+void(vector org) te_explosionquad = #415;
+void(vector org) te_smallflash = #416;
+void(vector org, vector vel, float howmany) te_spark = #411;
+
+void(vector org) te_gunshot = #418;
+void(vector org) te_spike = #419;
+void(vector org) te_superspike = #420;
+void(vector org) te_explosion = #421;
+void(vector org) te_tarexplosion = #422;
+void(vector org) te_wizspike = #423;
+void(vector org) te_knightspike = #424;
+void(vector org) te_lavasplash = #425;
+void(vector org) te_teleport = #426;
+void(vector org, float color, float colorlength) te_explosion2 = #427;
+void(entity own, vector start, vector end) te_lightning1 = #428;
+void(entity own, vector start, vector end) te_lightning2 = #429;
+void(entity own, vector start, vector end) te_lightning3 = #430;
+void(entity own, vector start, vector end) te_beam = #431;
+
+float (entity ent, string tagname)	gettagindex = #451;
+vector (entity ent, float tagindex)	gettaginfo = #452;
+
+float (string s)	tokenize = #441;
+string (float argnum)	argv = #442;
+
+string (string s) cvar_string = #448;
+
+float ()						buf_create = #460;
+void (float bufhandle)					buf_del = #461;
+float (float bufhandle)					buf_getsize = #462;
+void (float bufhandle_from, float bufhandle_to)		buf_copy = #463;
+void (float bufhandle, float sortpower, float backward)	buf_sort = #464;
+string (float bufhandle, string glue)			buf_implode = #465;
+string (float bufhandle, float string_index)		bufstr_get = #466;
+void (float bufhandle, float string_index, string str)	bufstr_set = #467;
+float (float bufhandle, string str, float order)	bufstr_add = #468;
+void (float bufhandle, float string_index)		bufstr_free = #469;
+
+float () onground = #355;
+
+void(string texturename, ...) R_BeginPolygon = #306;
+void(vector org, vector texcoords, vector rgb, float alpha) R_PolygonVertex = #307;
+void() R_EndPolygon = #308;
+
+float(string s, float num) charindex = #356;
+
+// Darkplaces Additional Functions
+string(string s) strdecolorize = #477;
+string(string s) strtolower = #480; // returns the passed in string in pure lowercase form
+string(string s) strtoupper = #481; // returns the passed in string in pure uppercase form
+float(string s) strlennocol = #476;
+
+void(vector origin, string sample, float volume, float attenuation) pointsound = #483;
+
+// added by blub
+
+string(string key)					serverkey = #354;
+float(string s1, string s2)				strcasecmp = #229;
+float(string s1, string s2, float len)			strncasecmp = #230;
+float(string str, string sub, float startoffs)		strstrofs = #221;
+//float(string str, string sub) 	    		strstrofs = #221;
+entity(float num)   	   				edict_num = #459;
+string(void)						ReadPicture = #501;
+string(string filename)					whichpack = #503;
+float(entity ent)					num_for_edict = #512;
+float(string s, string separator1, ...) tokenizebyseparator = #479;
+string(string in) uri_unescape = #511;
+float(float caseinsensitive, string s, ...) crc16 = #494;
+string(string info, string key) infoget = #227;
+string(string info, string key, string value, ...) infoadd = #226;
+string(string in) uri_escape = #510;
+
+string	keynumtostring(float keynum) = #520;
+string	findkeysforcommand(string command) = #521;
+
+string(float ccase, float calpha, float cnum, string s, ...) strconv = #224;
+float(entity ent) wasfreed = #353;
+
+entity(vector org, float rad) findradius = #22;
+
+string(float uselocaltime, string format, ...) strftime = #478;
+float(float timer) gettime = #519;
+#define GETTIME_CDTRACK 4
+
+float(string s) tokenize_console = #514;
+float(float i) argv_start_index = #515;
+float(float i) argv_end_index = #516;


Property changes on: branches/nexuiz-2.0/data/qcsrc/client/csqc_builtins.qc
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: branches/nexuiz-2.0/data/qcsrc/client/csqc_constants.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/client/csqc_constants.qc	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/qcsrc/client/csqc_constants.qc	2009-07-11 14:59:28 UTC (rev 7191)
@@ -1,192 +1,192 @@
-const entity	NULL							= world;
-
-// Mask Constants (set .drawmask on entities; use R_AddEntities to add all entities based on mask)
-const float		MASK_ENGINE						= 1;
-const float		MASK_ENGINEVIEWMODELS			= 2;
-const float		MASK_NORMAL						= 4;
-
-// Renderflag Constants (used for CSQC entities)
-const float		RF_VIEWMODEL					= 1;
-const float		RF_EXTERNALMODEL				= 2;
-const float		RF_DEPTHHACK					= 4;
-const float		RF_ADDITIVE						= 8;
-const float		RF_USEAXIS						= 16;
-
-// Viewflag Constants (use with R_SetView)
-const float		VF_MIN							= 1;	//(vector)
-const float		VF_MIN_X						= 2;	//(float)
-const float		VF_MIN_Y						= 3;	//(float)
-const float		VF_SIZE							= 4;	//(vector) (viewport size)
-const float		VF_SIZE_Y						= 5;	//(float)
-const float		VF_SIZE_X						= 6;	//(float)
-const float		VF_VIEWPORT						= 7;	//(vector, vector)
-const float		VF_FOV							= 8;	//(vector)
-const float		VF_FOVX							= 9;	//(float)
-const float		VF_FOVY							= 10;	//(float)
-const float		VF_ORIGIN						= 11;	//(vector)
-const float		VF_ORIGIN_X						= 12;	//(float)
-const float		VF_ORIGIN_Y						= 13;	//(float)
-const float		VF_ORIGIN_Z						= 14;	//(float)
-const float		VF_ANGLES						= 15;	//(vector)
-const float		VF_ANGLES_X						= 16;	//(float)
-const float		VF_ANGLES_Y						= 17;	//(float)
-const float		VF_ANGLES_Z						= 18;	//(float)
-const float		VF_DRAWWORLD					= 19;	//(float)
-const float		VF_DRAWENGINESBAR				= 20;	//(float)
-const float		VF_DRAWCROSSHAIR				= 21;	//(float)
-const float		VF_PERSPECTIVE					= 200;	//(float)
-
-const float		VF_CL_VIEWANGLES				= 33;	//(vector)
-const float		VF_CL_VIEWANGLES_X				= 34;	//(float)
-const float		VF_CL_VIEWANGLES_Y				= 35;	//(float)
-const float		VF_CL_VIEWANGLES_Z				= 36;	//(float) 
-
-// Server Autosent Stat Constants
-const float		STAT_HEALTH						= 0;
-const float		STAT_WEAPONMODEL				= 2;
-const float		STAT_AMMO						= 3;
-const float		STAT_ARMOR						= 4;
-const float		STAT_WEAPONFRAME				= 5;
-const float		STAT_SHELLS						= 6;
-const float		STAT_NAILS						= 7;
-const float		STAT_ROCKETS					= 8;
-const float		STAT_CELLS						= 9;
-const float		STAT_ACTIVEWEAPON				= 10;
-const float		STAT_TOTALSECRETS				= 11;
-const float		STAT_TOTALMONSTERS				= 12;
-const float		STAT_SECRETS					= 13;
-const float		STAT_MONSTERS					= 14;
-const float		STAT_ITEMS						= 15;
-const float		STAT_VIEWHEIGHT					= 16;
-const float		STAT_MOVEVARS_TICRATE           = 240;
-const float		STAT_MOVEVARS_TIMESCALE         = 241;
-const float		STAT_FRAGLIMIT					= 235;
-const float		STAT_TIMELIMIT					= 236;
-const float     STAT_MOVEVARS_GRAVITY           = 242;
-
-// Sound Constants
-//const float		CHAN_AUTO						= 0;
-//const float		CHAN_WEAPON						= 1;
-//const float		CHAN_VOICE						= 2;
-//const float		CHAN_ITEM						= 3;
-//const float		CHAN_BODY						= 4;
-
-//const float		ATTN_NONE						= 0;
-//const float		ATTN_NORM						= 1;
-//const float		ATTN_IDLE						= 2;
-//const float		ATTN_STATIC						= 3;
-
-// Quake-style Point Contents
-const float		CONTENT_EMPTY					= -1;
-const float		CONTENT_SOLID					= -2;
-const float		CONTENT_WATER					= -3;
-const float		CONTENT_SLIME					= -4;
-const float		CONTENT_LAVA					= -5;
-const float		CONTENT_SKY						= -6;
-
-// Boolean Constants
-const float		true							= 1;
-const float		false							= 0;
-const float 	TRUE							= 1;
-const float 	FALSE							= 0;
-
-// Vector / Hull Constants
-const vector	VEC_1							= '1 1 1';
-const vector	VEC_0							= '0 0 0';
-const vector	VEC_M1							= '-1 -1 -1';
-
-const vector	VEC_HULL_MIN 					= '-16 -16 -24';
-const vector	VEC_HULL_MAX 					= '16 16 32';
-
-// Effect Constants
-const float 	EF_NODRAW						= 16;
-const float 	EF_ADDITIVE						= 32;
-const float 	EF_BLUE							= 64;
-const float 	EF_RED							= 128;
-const float 	EF_FULLBRIGHT					= 512;
-const float 	EF_FLAME						= 1024;
-const float 	EF_STARDUST						= 2048;
-const float 	EF_NOSHADOW						= 4096;
-const float 	EF_NODEPTHTEST					= 8192;
-
-// Quake Player Flag Constants
-const float 	PFL_ONGROUND					= 1;
-const float 	PFL_CROUCH						= 2;
-const float 	PFL_DEAD						= 4;
-const float 	PFL_GIBBED						= 8;
-
-// Quake Temporary Entity Constants
-const float		TE_SPIKE						= 0;
-const float		TE_SUPERSPIKE					= 1;
-const float		TE_GUNSHOT						= 2;
-const float		TE_EXPLOSION					= 3;
-const float		TE_TAREXPLOSION					= 4;
-const float		TE_LIGHTNING1					= 5;
-const float		TE_LIGHTNING2					= 6;
-const float		TE_WIZSPIKE						= 7;
-const float		TE_KNIGHTSPIKE					= 8;
-const float		TE_LIGHTNING3					= 9;
-const float		TE_LAVASPLASH					= 10;
-const float		TE_TELEPORT						= 11;
-const float 	TE_EXPLOSION2					= 12;
-// Darkplaces Additions
-const float 	TE_EXPLOSIONRGB					= 53;
-const float		TE_GUNSHOTQUAD					= 57;
-const float		TE_EXPLOSIONQUAD 				= 70;
-
-// Math Constants
-const float 	M_PI 							= 3.14159265358979323846;
-const float 	EXTRA_LOW 						= -99999999;
-const float 	EXTRA_HIGH 						= 99999999;
-
-// Frik File Constants
-const float		FILE_READ						= 0;
-const float		FILE_APPEND						= 1;
-const float		FILE_WRITE						= 2;
-
-// Button values used by input_buttons
-const float BUTTON_ATTACK = 1;
-const float BUTTON_JUMP = 2;
-const float BUTTON_3 = 4;
-const float BUTTON_4 = 8;
-const float BUTTON_5 = 16;
-const float BUTTON_6 = 32;
-const float BUTTON7 = 64;
-const float BUTTON8 = 128;
-const float BUTTON_USE = 256;
-const float BUTTON_CHAT = 512;
-const float BUTTON_PRYDONCURSOR = 1024;
-const float BUTTON_9 = 2048;
-const float BUTTON_10 = 4096;
-const float BUTTON_11 = 8192;
-const float BUTTON_12 = 16384;
-const float BUTTON_13 = 32768;
-const float BUTTON_14 = 65536;
-const float BUTTON_15 = 131072;
-const float BUTTON_16 = 262144;
-
-
-const float DRAWFLAG_NORMAL = 0;
-const float DRAWFLAG_ADDITIVE = 1;
-const float DRAWFLAG_MODULATE = 2;
-const float DRAWFLAG_2XMODULATE = 3;
-const float DRAWFLAG_SCREEN = 4;
-const float DRAWFLAG_MIPMAP = 0x100; // only for R_BeginPolygon
-
-#define        SOLID_NOT                               0               // no interaction with other objects
-#define        SOLID_TRIGGER                   1               // touch on edge, but not blocking
-#define        SOLID_BBOX                              2               // touch on edge, block
-#define        SOLID_SLIDEBOX                  3               // touch on edge, but not an onground
-#define        SOLID_BSP                               4               // bsp clip, touch on edge, block
-#define        SOLID_CORPSE                    5               // same as SOLID_BBOX, except it behaves as SOLID_NOT against SOLID_SLIDEBOX objects (players/monsters)
-
-float MOVE_NORMAL = 0; // same as FALSE
-float MOVE_NOMONSTERS = 1; // same as TRUE
-float MOVE_MISSILE = 2; // save as movement with .movetype == MOVETYPE_FLYMISSILE
-float MOVE_HITMODEL = 4;
-float MOVE_WORLDONLY = 3;
-
-float CAMERA_FREE = 1;
-float CAMERA_CHASE = 2;
-
-float EF_NOMODELFLAGS = 8388608;
+const entity	NULL							= world;
+
+// Mask Constants (set .drawmask on entities; use R_AddEntities to add all entities based on mask)
+const float		MASK_ENGINE						= 1;
+const float		MASK_ENGINEVIEWMODELS			= 2;
+const float		MASK_NORMAL						= 4;
+
+// Renderflag Constants (used for CSQC entities)
+const float		RF_VIEWMODEL					= 1;
+const float		RF_EXTERNALMODEL				= 2;
+const float		RF_DEPTHHACK					= 4;
+const float		RF_ADDITIVE						= 8;
+const float		RF_USEAXIS						= 16;
+
+// Viewflag Constants (use with R_SetView)
+const float		VF_MIN							= 1;	//(vector)
+const float		VF_MIN_X						= 2;	//(float)
+const float		VF_MIN_Y						= 3;	//(float)
+const float		VF_SIZE							= 4;	//(vector) (viewport size)
+const float		VF_SIZE_Y						= 5;	//(float)
+const float		VF_SIZE_X						= 6;	//(float)
+const float		VF_VIEWPORT						= 7;	//(vector, vector)
+const float		VF_FOV							= 8;	//(vector)
+const float		VF_FOVX							= 9;	//(float)
+const float		VF_FOVY							= 10;	//(float)
+const float		VF_ORIGIN						= 11;	//(vector)
+const float		VF_ORIGIN_X						= 12;	//(float)
+const float		VF_ORIGIN_Y						= 13;	//(float)
+const float		VF_ORIGIN_Z						= 14;	//(float)
+const float		VF_ANGLES						= 15;	//(vector)
+const float		VF_ANGLES_X						= 16;	//(float)
+const float		VF_ANGLES_Y						= 17;	//(float)
+const float		VF_ANGLES_Z						= 18;	//(float)
+const float		VF_DRAWWORLD					= 19;	//(float)
+const float		VF_DRAWENGINESBAR				= 20;	//(float)
+const float		VF_DRAWCROSSHAIR				= 21;	//(float)
+const float		VF_PERSPECTIVE					= 200;	//(float)
+
+const float		VF_CL_VIEWANGLES				= 33;	//(vector)
+const float		VF_CL_VIEWANGLES_X				= 34;	//(float)
+const float		VF_CL_VIEWANGLES_Y				= 35;	//(float)
+const float		VF_CL_VIEWANGLES_Z				= 36;	//(float) 
+
+// Server Autosent Stat Constants
+const float		STAT_HEALTH						= 0;
+const float		STAT_WEAPONMODEL				= 2;
+const float		STAT_AMMO						= 3;
+const float		STAT_ARMOR						= 4;
+const float		STAT_WEAPONFRAME				= 5;
+const float		STAT_SHELLS						= 6;
+const float		STAT_NAILS						= 7;
+const float		STAT_ROCKETS					= 8;
+const float		STAT_CELLS						= 9;
+const float		STAT_ACTIVEWEAPON				= 10;
+const float		STAT_TOTALSECRETS				= 11;
+const float		STAT_TOTALMONSTERS				= 12;
+const float		STAT_SECRETS					= 13;
+const float		STAT_MONSTERS					= 14;
+const float		STAT_ITEMS						= 15;
+const float		STAT_VIEWHEIGHT					= 16;
+const float		STAT_MOVEVARS_TICRATE           = 240;
+const float		STAT_MOVEVARS_TIMESCALE         = 241;
+const float		STAT_FRAGLIMIT					= 235;
+const float		STAT_TIMELIMIT					= 236;
+const float     STAT_MOVEVARS_GRAVITY           = 242;
+
+// Sound Constants
+//const float		CHAN_AUTO						= 0;
+//const float		CHAN_WEAPON						= 1;
+//const float		CHAN_VOICE						= 2;
+//const float		CHAN_ITEM						= 3;
+//const float		CHAN_BODY						= 4;
+
+//const float		ATTN_NONE						= 0;
+//const float		ATTN_NORM						= 1;
+//const float		ATTN_IDLE						= 2;
+//const float		ATTN_STATIC						= 3;
+
+// Quake-style Point Contents
+const float		CONTENT_EMPTY					= -1;
+const float		CONTENT_SOLID					= -2;
+const float		CONTENT_WATER					= -3;
+const float		CONTENT_SLIME					= -4;
+const float		CONTENT_LAVA					= -5;
+const float		CONTENT_SKY						= -6;
+
+// Boolean Constants
+const float		true							= 1;
+const float		false							= 0;
+const float 	TRUE							= 1;
+const float 	FALSE							= 0;
+
+// Vector / Hull Constants
+const vector	VEC_1							= '1 1 1';
+const vector	VEC_0							= '0 0 0';
+const vector	VEC_M1							= '-1 -1 -1';
+
+const vector	VEC_HULL_MIN 					= '-16 -16 -24';
+const vector	VEC_HULL_MAX 					= '16 16 32';
+
+// Effect Constants
+const float 	EF_NODRAW						= 16;
+const float 	EF_ADDITIVE						= 32;
+const float 	EF_BLUE							= 64;
+const float 	EF_RED							= 128;
+const float 	EF_FULLBRIGHT					= 512;
+const float 	EF_FLAME						= 1024;
+const float 	EF_STARDUST						= 2048;
+const float 	EF_NOSHADOW						= 4096;
+const float 	EF_NODEPTHTEST					= 8192;
+
+// Quake Player Flag Constants
+const float 	PFL_ONGROUND					= 1;
+const float 	PFL_CROUCH						= 2;
+const float 	PFL_DEAD						= 4;
+const float 	PFL_GIBBED						= 8;
+
+// Quake Temporary Entity Constants
+const float		TE_SPIKE						= 0;
+const float		TE_SUPERSPIKE					= 1;
+const float		TE_GUNSHOT						= 2;
+const float		TE_EXPLOSION					= 3;
+const float		TE_TAREXPLOSION					= 4;
+const float		TE_LIGHTNING1					= 5;
+const float		TE_LIGHTNING2					= 6;
+const float		TE_WIZSPIKE						= 7;
+const float		TE_KNIGHTSPIKE					= 8;
+const float		TE_LIGHTNING3					= 9;
+const float		TE_LAVASPLASH					= 10;
+const float		TE_TELEPORT						= 11;
+const float 	TE_EXPLOSION2					= 12;
+// Darkplaces Additions
+const float 	TE_EXPLOSIONRGB					= 53;
+const float		TE_GUNSHOTQUAD					= 57;
+const float		TE_EXPLOSIONQUAD 				= 70;
+
+// Math Constants
+const float 	M_PI 							= 3.14159265358979323846;
+const float 	EXTRA_LOW 						= -99999999;
+const float 	EXTRA_HIGH 						= 99999999;
+
+// Frik File Constants
+const float		FILE_READ						= 0;
+const float		FILE_APPEND						= 1;
+const float		FILE_WRITE						= 2;
+
+// Button values used by input_buttons
+const float BUTTON_ATTACK = 1;
+const float BUTTON_JUMP = 2;
+const float BUTTON_3 = 4;
+const float BUTTON_4 = 8;
+const float BUTTON_5 = 16;
+const float BUTTON_6 = 32;
+const float BUTTON7 = 64;
+const float BUTTON8 = 128;
+const float BUTTON_USE = 256;
+const float BUTTON_CHAT = 512;
+const float BUTTON_PRYDONCURSOR = 1024;
+const float BUTTON_9 = 2048;
+const float BUTTON_10 = 4096;
+const float BUTTON_11 = 8192;
+const float BUTTON_12 = 16384;
+const float BUTTON_13 = 32768;
+const float BUTTON_14 = 65536;
+const float BUTTON_15 = 131072;
+const float BUTTON_16 = 262144;
+
+
+const float DRAWFLAG_NORMAL = 0;
+const float DRAWFLAG_ADDITIVE = 1;
+const float DRAWFLAG_MODULATE = 2;
+const float DRAWFLAG_2XMODULATE = 3;
+const float DRAWFLAG_SCREEN = 4;
+const float DRAWFLAG_MIPMAP = 0x100; // only for R_BeginPolygon
+
+#define        SOLID_NOT                               0               // no interaction with other objects
+#define        SOLID_TRIGGER                   1               // touch on edge, but not blocking
+#define        SOLID_BBOX                              2               // touch on edge, block
+#define        SOLID_SLIDEBOX                  3               // touch on edge, but not an onground
+#define        SOLID_BSP                               4               // bsp clip, touch on edge, block
+#define        SOLID_CORPSE                    5               // same as SOLID_BBOX, except it behaves as SOLID_NOT against SOLID_SLIDEBOX objects (players/monsters)
+
+float MOVE_NORMAL = 0; // same as FALSE
+float MOVE_NOMONSTERS = 1; // same as TRUE
+float MOVE_MISSILE = 2; // save as movement with .movetype == MOVETYPE_FLYMISSILE
+float MOVE_HITMODEL = 4;
+float MOVE_WORLDONLY = 3;
+
+float CAMERA_FREE = 1;
+float CAMERA_CHASE = 2;
+
+float EF_NOMODELFLAGS = 8388608;


Property changes on: branches/nexuiz-2.0/data/qcsrc/client/csqc_constants.qc
___________________________________________________________________
Name: svn:eol-style
   + native


Property changes on: branches/nexuiz-2.0/data/qcsrc/client/ctf.qc
___________________________________________________________________
Name: svn:eol-style
   + native


Property changes on: branches/nexuiz-2.0/data/qcsrc/client/damage.qc
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: branches/nexuiz-2.0/data/qcsrc/client/effects.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/client/effects.qc	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/qcsrc/client/effects.qc	2009-07-11 14:59:28 UTC (rev 7191)
@@ -1,100 +1,100 @@
-/*
-.vector fx_start;
-.vector fx_end;
-.float  fx_with;
-.string fx_texture;
-.float  fx_lifetime;
-
-void SUB_Remove()
-{ remove(self); }
-
-void b_draw()
-{
-    //Draw_CylindricLine(self.fx_start, self.fx_end, self.fx_with, self.fx_texture, 0, time * 3, '1 1 1', 0.7, DRAWFLAG_ADDITIVE);
-    Draw_CylindricLine(self.fx_start, self.fx_end, self.fx_with, self.fx_texture, (self.fx_with/256), 0, '1 1 1', 1, DRAWFLAG_ADDITIVE);
-
-}
-void b_make(vector s,vector e, string t,float l,float z)
-{
-    entity b;
-    b = spawn();
-    b.fx_texture = t;
-    b.fx_start = s;
-    b.fx_end = e;
-    b.fx_with = z;
-    b.think = SUB_Remove;
-    b.nextthink = time + l;
-	b.draw = b_draw;
-
-	//b.dphitcontentsmask = DPCONTENTS_SOLID | DPCONTENTS_BODY | DPCONTENTS_PLAYERCLIP;
-}
-*/
-
-void cl_effetcs_lightningarc(vector from, vector to,float seglength,float drifts,float drifte,float branchfactor,float branchfactor_add)
-{
-    vector direction,dirnew, pos, pos_l;
-    float length, steps, steplength, i,drift;
-
-    length     = vlen(from - to);
-    if(length < 1)
-        return;
-
-    steps      = floor(length / seglength);
-    if(steps < 1)
-    {
-        te_lightning1(world,from,to);
-        return;
-    }
-
-    steplength = length / steps;
-    direction  = normalize(to - from);
-    pos_l = from;
-    if(length > seglength)
-    {
-        for(i = 1; i < steps; i += 1)
-        {
-            drift = drifts * (1 - (i / steps)) + drifte * (i / steps);
-            dirnew = normalize(direction * (1 - drift) + randomvec() * drift);
-            pos = pos_l +  dirnew * steplength;
-            te_lightning1(world,pos_l,pos);
-            //b_make(pos_l, pos,"particles/lightning2",0.25,64);
-            if(random() < branchfactor)
-                cl_effetcs_lightningarc(pos, pos + (dirnew * length * 0.25),seglength,drifts,drifte,min(branchfactor + branchfactor_add,1),branchfactor_add);
-
-            pos_l = pos;
-        }
-        te_lightning1(world,pos_l,to);
-        //b_make(pos_l, to,"particles/lightning2",0.25,64);
-
-    }
-    else
-        te_lightning1(world,from,to);
-        //b_make(from, to,"particles/lightning2",0.25,64);
-
-}
-
-void Net_ReadLightningarc()
-{
-	vector from, to;
-
-    from_x = ReadCoord(); from_y = ReadCoord(); from_z = ReadCoord();
-    to_x   = ReadCoord(); to_y   = ReadCoord(); to_z   = ReadCoord();
-
-    if(cvar("cl_effects_lightningarc_simple"))
-    {
-        te_lightning1(world,from,to);
-    }
-    else
-    {
-        float seglength, drifts, drifte, branchfactor, branchfactor_add;
-
-        seglength    = cvar("cl_effects_lightningarc_segmentlength");
-        drifts       = cvar("cl_effects_lightningarc_drift_start");
-        drifte       = cvar("cl_effects_lightningarc_drift_end");
-        branchfactor = cvar("cl_effects_lightningarc_branchfactor_start");
-        branchfactor = cvar("cl_effects_lightningarc_branchfactor_add");
-
-        cl_effetcs_lightningarc(from,to,seglength,drifts,drifte,branchfactor,branchfactor_add);
-    }
-
-}
+/*
+.vector fx_start;
+.vector fx_end;
+.float  fx_with;
+.string fx_texture;
+.float  fx_lifetime;
+
+void SUB_Remove()
+{ remove(self); }
+
+void b_draw()
+{
+    //Draw_CylindricLine(self.fx_start, self.fx_end, self.fx_with, self.fx_texture, 0, time * 3, '1 1 1', 0.7, DRAWFLAG_ADDITIVE);
+    Draw_CylindricLine(self.fx_start, self.fx_end, self.fx_with, self.fx_texture, (self.fx_with/256), 0, '1 1 1', 1, DRAWFLAG_ADDITIVE);
+
+}
+void b_make(vector s,vector e, string t,float l,float z)
+{
+    entity b;
+    b = spawn();
+    b.fx_texture = t;
+    b.fx_start = s;
+    b.fx_end = e;
+    b.fx_with = z;
+    b.think = SUB_Remove;
+    b.nextthink = time + l;
+	b.draw = b_draw;
+
+	//b.dphitcontentsmask = DPCONTENTS_SOLID | DPCONTENTS_BODY | DPCONTENTS_PLAYERCLIP;
+}
+*/
+
+void cl_effetcs_lightningarc(vector from, vector to,float seglength,float drifts,float drifte,float branchfactor,float branchfactor_add)
+{
+    vector direction,dirnew, pos, pos_l;
+    float length, steps, steplength, i,drift;
+
+    length     = vlen(from - to);
+    if(length < 1)
+        return;
+
+    steps      = floor(length / seglength);
+    if(steps < 1)
+    {
+        te_lightning1(world,from,to);
+        return;
+    }
+
+    steplength = length / steps;
+    direction  = normalize(to - from);
+    pos_l = from;
+    if(length > seglength)
+    {
+        for(i = 1; i < steps; i += 1)
+        {
+            drift = drifts * (1 - (i / steps)) + drifte * (i / steps);
+            dirnew = normalize(direction * (1 - drift) + randomvec() * drift);
+            pos = pos_l +  dirnew * steplength;
+            te_lightning1(world,pos_l,pos);
+            //b_make(pos_l, pos,"particles/lightning2",0.25,64);
+            if(random() < branchfactor)
+                cl_effetcs_lightningarc(pos, pos + (dirnew * length * 0.25),seglength,drifts,drifte,min(branchfactor + branchfactor_add,1),branchfactor_add);
+
+            pos_l = pos;
+        }
+        te_lightning1(world,pos_l,to);
+        //b_make(pos_l, to,"particles/lightning2",0.25,64);
+
+    }
+    else
+        te_lightning1(world,from,to);
+        //b_make(from, to,"particles/lightning2",0.25,64);
+
+}
+
+void Net_ReadLightningarc()
+{
+	vector from, to;
+
+    from_x = ReadCoord(); from_y = ReadCoord(); from_z = ReadCoord();
+    to_x   = ReadCoord(); to_y   = ReadCoord(); to_z   = ReadCoord();
+
+    if(cvar("cl_effects_lightningarc_simple"))
+    {
+        te_lightning1(world,from,to);
+    }
+    else
+    {
+        float seglength, drifts, drifte, branchfactor, branchfactor_add;
+
+        seglength    = cvar("cl_effects_lightningarc_segmentlength");
+        drifts       = cvar("cl_effects_lightningarc_drift_start");
+        drifte       = cvar("cl_effects_lightningarc_drift_end");
+        branchfactor = cvar("cl_effects_lightningarc_branchfactor_start");
+        branchfactor = cvar("cl_effects_lightningarc_branchfactor_add");
+
+        cl_effetcs_lightningarc(from,to,seglength,drifts,drifte,branchfactor,branchfactor_add);
+    }
+
+}


Property changes on: branches/nexuiz-2.0/data/qcsrc/client/effects.qc
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: branches/nexuiz-2.0/data/qcsrc/client/gibs.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/client/gibs.qc	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/qcsrc/client/gibs.qc	2009-07-11 14:59:28 UTC (rev 7191)
@@ -58,7 +58,7 @@
 	vector oldorg;
 	oldorg = self.origin;
 
-	Movetype_Physics(FALSE);
+	Movetype_Physics_NoMatchServer();
 	if(wasfreed(self))
 		return;
 


Property changes on: branches/nexuiz-2.0/data/qcsrc/client/gibs.qc
___________________________________________________________________
Name: svn:eol-style
   + native


Property changes on: branches/nexuiz-2.0/data/qcsrc/client/hook.qc
___________________________________________________________________
Name: svn:eol-style
   + native


Property changes on: branches/nexuiz-2.0/data/qcsrc/client/interpolate.qc
___________________________________________________________________
Name: svn:eol-style
   + native


Property changes on: branches/nexuiz-2.0/data/qcsrc/client/interpolate.qh
___________________________________________________________________
Name: svn:eol-style
   + native


Property changes on: branches/nexuiz-2.0/data/qcsrc/client/laser.qc
___________________________________________________________________
Name: svn:eol-style
   + native


Property changes on: branches/nexuiz-2.0/data/qcsrc/client/main.qh
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: branches/nexuiz-2.0/data/qcsrc/client/mapvoting.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/client/mapvoting.qc	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/qcsrc/client/mapvoting.qc	2009-07-11 14:59:28 UTC (rev 7191)
@@ -66,6 +66,8 @@
 	pos_x = pos_x + text_size*0.5 - img_size_x*0.5;
 	pos_y = pos_y - img_size_y;
 
+	pos += sbar_border_thickness * '1 1 0';
+	img_size -= (sbar_border_thickness * 2) * '1 1 0';
 	if(pic == "")
 	{
 		drawfill(pos, img_size, '.5 .5 .5', .7, DRAWFLAG_NORMAL);
@@ -74,14 +76,19 @@
 	{
 		drawpic(pos, pic, img_size, '1 1 1', 1, DRAWFLAG_NORMAL);
 	}
+	
+	drawpic(pos + '1 0 0', strcat("gfx/hud/num_", ftos(id+1)), (img_size_y / 5) * '1 1 0', '1 1 1', 0.6, DRAWFLAG_NORMAL);
 
 	if(id == mv_ownvote || pic == "")
 	{
-		drawfill(pos,                                   '1 0 0' * img_size_x + '0  2 0', rgb, 1, DRAWFLAG_NORMAL);
-		drawfill(pos + '0 2 0',                         '0 1 0' * img_size_y + '2 -4 0', rgb, 1, DRAWFLAG_NORMAL);
-		drawfill(pos + '1 0 0' * img_size_x + '-2 2 0', '0 1 0' * img_size_y + '2 -4 0', rgb, 1, DRAWFLAG_NORMAL);
-		drawfill(pos + '0 1 0' * img_size_y + '0 -2 0', '1 0 0' * img_size_x + '0  2 0', rgb, 1, DRAWFLAG_NORMAL);
+		drawborderlines(sbar_border_thickness, pos, img_size, rgb, 1, DRAWFLAG_NORMAL);
+		drawpic(pos + '1 0 0', strcat("gfx/hud/num_", ftos(id+1)), (img_size_y / 5) * '1 1 0', rgb, 0.6, DRAWFLAG_NORMAL);
 	}
+	else
+	{
+		drawborderlines(sbar_border_thickness, pos, img_size, '0 0 0', 1, DRAWFLAG_NORMAL);
+		drawpic(pos + '1 0 0', strcat("gfx/hud/num_", ftos(id+1)), (img_size_y / 5) * '1 1 0', '1 1 1', 0.6, DRAWFLAG_NORMAL);
+	}
 }
 
 void MapVote_DrawAbstain(vector pos, float isize, float tsize, float count, float id)


Property changes on: branches/nexuiz-2.0/data/qcsrc/client/mapvoting.qc
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: branches/nexuiz-2.0/data/qcsrc/client/miscfunctions.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/client/miscfunctions.qc	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/qcsrc/client/miscfunctions.qc	2009-07-11 14:59:28 UTC (rev 7191)
@@ -11,9 +11,9 @@
 		if (!spectatee_status) //do cprint only for players
 			centerprint("^1Begin!");
 
-		sound(self, CHAN_VOICE, "announcer/robotic/begin.wav", VOL_BASEVOICE, ATTN_NONE);
-		//reset maptime announcers now as well
-		announcer_5min = announcer_1min = FALSE;
+		sound(self, CHAN_VOICE, "announcer/robotic/begin.wav", VOL_BASEVOICE, ATTN_NONE);
+		//reset maptime announcers now as well
+		announcer_5min = announcer_1min = FALSE;
 		
 		remove(self);
 		return;
@@ -28,46 +28,46 @@
 
 		self.nextthink = getstatf(STAT_GAMESTARTTIME) - (countdown - 1);
 	}
-}
-
-/**
- * Plays the 1minute or 5 minutes (of maptime) remaining sound, if client wants it
- */
-void maptimeAnnouncer() {
-    float timelimit;
-    timelimit = getstatf(STAT_TIMELIMIT);
-    float timeleft;
-    timeleft = max(0, timelimit * 60 + getstatf(STAT_GAMESTARTTIME) - time);
-    
-    //5 minute check
-    if (cvar("cl_sound_maptime_warning") >= 2) {
-        //make sure that after connect (and e.g. 4 minutes left) we will not get a wrong sound
-        if (!announcer_5min && timelimit > 0 && timeleft < 300 && timeleft > 299) {
-            announcer_5min = TRUE;
-            //dprint("i will play the sound, I promise!\n");
-            sound(self, CHAN_VOICE, "announcer/robotic/5minutesremain.wav", VOL_BASEVOICE, ATTN_NONE);
-        }
-        
-    }
-    
-    //1 minute check
-    if (cvar("cl_sound_maptime_warning") == 1 || cvar("cl_sound_maptime_warning") == 3) {
-        if (!announcer_1min && timelimit > 0 && timeleft < 60) {
-            announcer_1min = TRUE;
-            sound(self, CHAN_VOICE, "announcer/robotic/1minuteremains.wav", VOL_BASEVOICE, ATTN_NONE);
-        }
-    }
-}
-
-/**
- * Add all future announcer sounds precaches here.
- * TODO: make all announcer sound() calls client-side in the end, to allow queues etc.
- */
-void Announcer_Precache () {
-    precache_sound ("announcer/robotic/1minuteremains.wav");
-	precache_sound ("announcer/robotic/5minutesremain.wav");
 }
 
+/**
+ * Plays the 1minute or 5 minutes (of maptime) remaining sound, if client wants it
+ */
+void maptimeAnnouncer() {
+    float timelimit;
+    timelimit = getstatf(STAT_TIMELIMIT);
+    float timeleft;
+    timeleft = max(0, timelimit * 60 + getstatf(STAT_GAMESTARTTIME) - time);
+    
+    //5 minute check
+    if (cvar("cl_sound_maptime_warning") >= 2) {
+        //make sure that after connect (and e.g. 4 minutes left) we will not get a wrong sound
+        if (!announcer_5min && timelimit > 0 && timeleft < 300 && timeleft > 299) {
+            announcer_5min = TRUE;
+            //dprint("i will play the sound, I promise!\n");
+            sound(self, CHAN_VOICE, "announcer/robotic/5minutesremain.wav", VOL_BASEVOICE, ATTN_NONE);
+        }
+        
+    }
+    
+    //1 minute check
+    if (cvar("cl_sound_maptime_warning") == 1 || cvar("cl_sound_maptime_warning") == 3) {
+        if (!announcer_1min && timelimit > 0 && timeleft < 60) {
+            announcer_1min = TRUE;
+            sound(self, CHAN_VOICE, "announcer/robotic/1minuteremains.wav", VOL_BASEVOICE, ATTN_NONE);
+        }
+    }
+}
+
+/**
+ * Add all future announcer sounds precaches here.
+ * TODO: make all announcer sound() calls client-side in the end, to allow queues etc.
+ */
+void Announcer_Precache () {
+    precache_sound ("announcer/robotic/1minuteremains.wav");
+	precache_sound ("announcer/robotic/5minutesremain.wav");
+}
+
 void AuditLists()
 {
 	entity e;
@@ -316,6 +316,47 @@
 	return boxsize * (0.5 * (1 - sz));
 }
 
+void drawborderlines(float thickness, vector pos, vector dim, vector color, float alpha, float drawflag)
+{
+	vector line_dim;
+	
+	// left and right lines
+	pos_x -= thickness;
+	line_dim_x = thickness;
+	line_dim_y = dim_y;
+	drawfill(pos, line_dim, color, alpha, drawflag);
+	drawfill(pos + (dim_x + thickness) * '1 0 0', line_dim, color, alpha, drawflag);
+	
+	// upper and lower lines
+	pos_y -= thickness;
+	line_dim_x = dim_x + thickness * 2; // make upper and lower lines longer
+	line_dim_y = thickness;
+	drawfill(pos, line_dim, color, alpha, drawflag);
+	drawfill(pos + (dim_y + thickness) * '0 1 0', line_dim, color, alpha, drawflag);
+}
+
+void drawpic_tiled(vector pos, string pic, vector sz, vector area, vector color, float alpha, float drawflag)
+{
+	vector current_pos, end_pos, new_size, ratio;
+	end_pos = pos + area;
+
+	current_pos_y = pos_y;
+	while (current_pos_y < end_pos_y)
+	{
+		current_pos_x = pos_x;
+		while (current_pos_x < end_pos_x)
+		{
+			new_size_x = min(sz_x, end_pos_x - current_pos_x);
+			new_size_y = min(sz_y, end_pos_y - current_pos_y);
+			ratio_x = new_size_x / sz_x;
+			ratio_y = new_size_y / sz_y;
+			drawsubpic(current_pos, new_size, pic, '0 0 0', ratio, color, alpha, drawflag);
+			current_pos_x += sz_x;
+		}
+		current_pos_y += sz_y;
+	}
+}
+
 void drawpic_expanding(vector position, string pic, vector scale, vector rgb, float alpha, float flag, float fadelerp)
 {
 	float sz;


Property changes on: branches/nexuiz-2.0/data/qcsrc/client/miscfunctions.qc
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: branches/nexuiz-2.0/data/qcsrc/client/movetypes.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/client/movetypes.qc	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/qcsrc/client/movetypes.qc	2009-07-11 14:59:28 UTC (rev 7191)
@@ -321,75 +321,92 @@
 	_Movetype_CheckWaterTransition();
 }
 
-void Movetype_Physics(float matchserver) // SV_Physics_Entity
+void _Movetype_Physics_Frame(float movedt)
 {
+	self.move_didgravity = FALSE;
+	switch(self.move_movetype)
+	{
+		case MOVETYPE_PUSH:
+		case MOVETYPE_FAKEPUSH:
+			error("SV_Physics_Pusher not implemented");
+			break;
+		case MOVETYPE_NONE:
+			break;
+		case MOVETYPE_FOLLOW:
+			error("SV_Physics_Follow not implemented");
+			break;
+		case MOVETYPE_NOCLIP:
+			_Movetype_CheckWater();
+			self.move_origin = self.move_origin + ticrate * self.move_velocity;
+			self.move_angles = self.move_angles + ticrate * self.move_avelocity;
+			_Movetype_LinkEdict(FALSE);
+			break;
+		case MOVETYPE_STEP:
+			error("SV_Physics_Step not implemented");
+			break;
+		case MOVETYPE_WALK:
+			error("SV_Physics_Walk not implemented");
+			break;
+		case MOVETYPE_TOSS:
+		case MOVETYPE_BOUNCE:
+		case MOVETYPE_BOUNCEMISSILE:
+		case MOVETYPE_FLYMISSILE:
+		case MOVETYPE_FLY:
+			_Movetype_Physics_Toss(movedt);
+			break;
+	}
+}
+
+void Movetype_Physics_NoMatchServer() // optimized
+{
+	float movedt;
+
+	movedt = time - self.move_time;
+	self.move_time = time;
+
+	//self.move_didgravity = ((self.move_movetype == MOVETYPE_BOUNCE || self.move_movetype == MOVETYPE_TOSS) && !(self.move_flags & FL_ONGROUND));
+	// we use the field as set by the last run of this
+
+	_Movetype_Physics_Frame(movedt);
+	if(wasfreed(self))
+		return;
+
+	self.avelocity = self.move_avelocity;
+	self.velocity = self.move_velocity;
+	self.angles = self.move_angles;
+	setorigin(self, self.move_origin);
+}
+
+void Movetype_Physics_MatchServer() // SV_Physics_Entity
+{
 	float n, i, dt, movedt;
 
-	dt = time - self.move_time;
-
 	if(ticrate <= 0)
-		matchserver = 0;
-
-	if(matchserver)
 	{
-		movedt = ticrate;
-		n = max(0, floor(dt / ticrate));
-		dt -= n * ticrate;
-		self.move_time += n * ticrate;
+		Movetype_Physics_NoMatchServer();
+		return;
 	}
-	else
-	{
-		movedt = dt;
-		dt = 0;
-		n = 1;
-		self.move_time = time;
-	}
 
+	dt = time - self.move_time;
+
+	movedt = ticrate;
+	n = max(0, floor(dt / ticrate));
+	dt -= n * ticrate;
+	self.move_time += n * ticrate;
+
 	//self.move_didgravity = ((self.move_movetype == MOVETYPE_BOUNCE || self.move_movetype == MOVETYPE_TOSS) && !(self.move_flags & FL_ONGROUND));
 	// we use the field as set by the last run of this
 
 	for(i = 0; i < n; ++i)
 	{
-		self.move_didgravity = FALSE;
-		switch(self.move_movetype)
-		{
-			case MOVETYPE_PUSH:
-			case MOVETYPE_FAKEPUSH:
-				error("SV_Physics_Pusher not implemented");
-				break;
-			case MOVETYPE_NONE:
-				break;
-			case MOVETYPE_FOLLOW:
-				error("SV_Physics_Follow not implemented");
-				break;
-			case MOVETYPE_NOCLIP:
-				_Movetype_CheckWater();
-				self.move_origin = self.move_origin + ticrate * self.move_velocity;
-				self.move_angles = self.move_angles + ticrate * self.move_avelocity;
-				_Movetype_LinkEdict(FALSE);
-				break;
-			case MOVETYPE_STEP:
-				error("SV_Physics_Step not implemented");
-				break;
-			case MOVETYPE_WALK:
-				error("SV_Physics_Walk not implemented");
-				break;
-			case MOVETYPE_TOSS:
-			case MOVETYPE_BOUNCE:
-			case MOVETYPE_BOUNCEMISSILE:
-			case MOVETYPE_FLYMISSILE:
-			case MOVETYPE_FLY:
-				_Movetype_Physics_Toss(movedt);
-				break;
-		}
+		_Movetype_Physics_Frame(movedt);
+		if(wasfreed(self))
+			return;
 	}
 
-	if(wasfreed(self))
-		return;
-
 	self.avelocity = self.move_avelocity;
 
-	if(dt > 0 && self.move_movetype != MOVETYPE_NONE)
+	if(dt > 0 && self.move_movetype != MOVETYPE_NONE && !(self.move_flags & FL_ONGROUND))
 	{
 		// now continue the move from move_time to time
 		self.velocity = self.move_velocity;


Property changes on: branches/nexuiz-2.0/data/qcsrc/client/movetypes.qc
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: branches/nexuiz-2.0/data/qcsrc/client/movetypes.qh
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/client/movetypes.qh	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/qcsrc/client/movetypes.qh	2009-07-11 14:59:28 UTC (rev 7191)
@@ -10,7 +10,8 @@
 .float move_bounce_stopspeed;
 .float move_nomonsters; // -1 for MOVE_NORMAL, otherwise a MOVE_ constant
 
-void Movetype_Physics(float matchserver);
+void Movetype_Physics_MatchServer();
+void Movetype_Physics_NoMatchServer();
 
 float	MOVETYPE_NONE				= 0;
 float	MOVETYPE_ANGLENOCLIP			= 1;


Property changes on: branches/nexuiz-2.0/data/qcsrc/client/movetypes.qh
___________________________________________________________________
Name: svn:eol-style
   + native


Property changes on: branches/nexuiz-2.0/data/qcsrc/client/particles.qc
___________________________________________________________________
Name: svn:eol-style
   + native


Property changes on: branches/nexuiz-2.0/data/qcsrc/client/prandom.qc
___________________________________________________________________
Name: svn:eol-style
   + native


Property changes on: branches/nexuiz-2.0/data/qcsrc/client/prandom.qh
___________________________________________________________________
Name: svn:eol-style
   + native


Property changes on: branches/nexuiz-2.0/data/qcsrc/client/pre.qh
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: branches/nexuiz-2.0/data/qcsrc/client/projectile.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/client/projectile.qc	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/qcsrc/client/projectile.qc	2009-07-11 14:59:28 UTC (rev 7191)
@@ -89,7 +89,7 @@
 	if(self.count & 0x80)
 	{
 		//self.move_flags &~= FL_ONGROUND;
-		Movetype_Physics(TRUE);
+		Movetype_Physics_MatchServer();
 		if(!(self.move_flags & FL_ONGROUND))
 			self.angles = vectoangles(self.velocity);
 	}


Property changes on: branches/nexuiz-2.0/data/qcsrc/client/projectile.qc
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: branches/nexuiz-2.0/data/qcsrc/client/rubble.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/client/rubble.qc	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/qcsrc/client/rubble.qc	2009-07-11 14:59:28 UTC (rev 7191)
@@ -1,34 +1,34 @@
-.float creationtime;
-
-void RubbleDrop(entity list, void() deleteproc)
-{
-    float t,tt;
-    entity rub,old_rub;
-
-    rub = findchainentity(owner,list);
-    while(rub)
-    {
-        if(rub.creationtime > t)
-        {
-            old_rub = rub;
-            tt = t;
-        }
-        rub = rub.chain;
-    }
-
-    rub = self;
-    self = old_rub;
-    deleteproc();
-    self = rub;
-}
-
-entity RubbleNew(entity list)
-{
-    entity rub;
-
-    rub = spawn();
-    rub.creationtime = time;
-    rub.owner = list;
-
-    return rub;
-}
+.float creationtime;
+
+void RubbleDrop(entity list, void() deleteproc)
+{
+    float t,tt;
+    entity rub,old_rub;
+
+    rub = findchainentity(owner,list);
+    while(rub)
+    {
+        if(rub.creationtime > t)
+        {
+            old_rub = rub;
+            tt = t;
+        }
+        rub = rub.chain;
+    }
+
+    rub = self;
+    self = old_rub;
+    deleteproc();
+    self = rub;
+}
+
+entity RubbleNew(entity list)
+{
+    entity rub;
+
+    rub = spawn();
+    rub.creationtime = time;
+    rub.owner = list;
+
+    return rub;
+}


Property changes on: branches/nexuiz-2.0/data/qcsrc/client/rubble.qc
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: branches/nexuiz-2.0/data/qcsrc/client/sbar.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/client/sbar.qc	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/qcsrc/client/sbar.qc	2009-07-11 14:59:28 UTC (rev 7191)
@@ -12,6 +12,10 @@
 
 float sbar_alpha_fg;
 float sbar_alpha_bg;
+float sbar_color_bg_team;
+float sbar_border_thickness;
+float sbar_scoreboard_alpha_bg;
+float sbar_scoreboard_highlight;
 float sbar_hudselector;
 float sbar_hud_accuracy;
 
@@ -86,14 +90,14 @@
 	vsize_y = w_height;
 	vsize_z = 0;
 	if (active)
-		drawpic(pos, "gfx/hud/sb_ammobg", vsize, color, value * fade * sbar_alpha_fg, 0);
-	drawpic(pos, strcat("gfx/hud/inv_weapon", ftos(nr)), vsize, color, value * fade * sbar_alpha_fg, 0);
+		drawpic(pos, "gfx/hud/sb_ammobg", vsize, color, value * fade * sbar_alpha_fg, DRAWFLAG_NORMAL);
+	drawpic(pos, strcat("gfx/hud/inv_weapon", ftos(nr)), vsize, color, value * fade * sbar_alpha_fg, DRAWFLAG_NORMAL);
 	pos_x += w_space;
 	pos_y += w_space;
 	vsize_x = font_size;
 	vsize_y = font_size;
 	vsize_z = 0;
-	drawstring(pos, ftos(imp), vsize, '1 1 1', sbar_alpha_fg, 0);
+	drawstring(pos, ftos(imp), vsize, '1 1 1', sbar_alpha_fg, DRAWFLAG_NORMAL);
 
 	// draw the weapon accuracy on the HUD
 	if(sbar_hud_accuracy)
@@ -105,13 +109,14 @@
  	}
 }
 
-void Sbar_DrawXNum (vector pos, float num, float digits, float lettersize, vector rgb, float highlighted, float a, float dflags)
+void Sbar_DrawXNum (vector pos, float num, float digits, float lettersize, vector rgb, float highlighted, float stroke, float a, float dflags)
 {
 	float l, i;
 	string str, tmp, l_length;
 	float minus;
-	vector vsize;
-
+	vector vsize, num_color;
+	num_color = rgb;
+	
 	vsize_x = vsize_y = lettersize;
 	vsize_z = 0;
 
@@ -151,21 +156,28 @@
 
 		vector hl_pos;
 		hl_pos_x = pos_x - lettersize/10;
-		hl_pos_y = pos_y - lettersize/30;
+		hl_pos_y = pos_y - lettersize/20;
 		hl_pos_z = 0;
 
 		drawpic(hl_pos, strcat("gfx/hud/sb_highlight_", l_length), hl_size, '1 1 1', sbar_alpha_fg, dflags);
 	}
-
+	
+	if (stroke == 1)
+		num_color = '1 1 1';
+	
 	if(minus)
 	{
-		drawpic(pos, "gfx/hud/num_minus", vsize, rgb, a * sbar_alpha_fg, dflags);
+		drawpic(pos, "gfx/hud/num_minus", vsize, num_color, a * sbar_alpha_fg, dflags);
+		if (stroke == 1)
+			drawpic(pos, "gfx/hud/num_minus_stroke", vsize, rgb, a * sbar_alpha_fg, dflags);
 		pos_x += lettersize;
 	}
 
 	for(i = 0; i < l; ++i)
 	{
-		drawpic(pos, strcat("gfx/hud/num_", substring(str, i, 1)), vsize, rgb, a * sbar_alpha_fg, dflags);
+		drawpic(pos, strcat("gfx/hud/num_", substring(str, i, 1)), vsize, num_color, a * sbar_alpha_fg, dflags);
+		if (stroke == 1)
+			drawpic(pos, strcat("gfx/hud/num_", substring(str, i, 1), "_stroke"), vsize, rgb, a * sbar_alpha_fg, dflags);
 		pos_x += lettersize;
 	}
 }
@@ -176,34 +188,33 @@
 		color_x = 0;
 		color_y = 1;
 		color_z = 0;
-		Sbar_DrawXNum(pos, x, 3, lettersize, color, 0, alpha, 0);
 	}
 	else if(x > 150) {
-		color_x = 0.4 - ((x-150)*0.02 * 0.4); //red value between 0.4 -> 0
-		color_y = 0.9 + ((x-150)*0.02 * 0.1); // green value between 0.9 -> 1
+		color_x = 0.4 - (x-150)*0.02 * 0.4; //red value between 0.4 -> 0
+		color_y = 0.9 + (x-150)*0.02 * 0.1; // green value between 0.9 -> 1
 		color_z = 0;
-		Sbar_DrawXNum(pos, x, 3, lettersize, color, 0, alpha, 0);
 	}
 	else if(x > 100) {
-		color_x = 0.6 - ((x-100)*0.02 * 0.2); //red value between 0.6 -> 0.4
-		color_y = 0.7 + ((x-100)*0.02 * 0.2); // green value between 0.7 -> 0.9
-		color_z = 0.8 - ((x-100)*0.02 * 0.8); // blue value between 0.8 -> 0
-		Sbar_DrawXNum(pos, x, 3, lettersize, color, 0, alpha, 0);
+		color_x = 1 - (x-100)*0.02 * 0.6; //red value between 1 -> 0.4
+		color_y = 1 - (x-100)*0.02 * 0.1; // green value between 1 -> 0.9
+		color_z = 1 - (x-100)*0.02; // blue value between 1 -> 0
 	}
 	else if(x > 50) {
-		color_x = 1 - ((x-50)*0.02 * 0.4); //red value between 1 -> 0.6
-		color_y = 1 - ((x-50)*0.02 * 0.3); // green value between 1 -> 0.7
-		color_z = 0.2 + ((x-50)*0.02 * 0.6); // blue value between 0.2 -> 0.8
-		Sbar_DrawXNum(pos, x, 3, lettersize, color, 0, alpha, 0);
+		color_x = 1;
+		color_y = 1;
+		color_z = 0.2 + (x-50)*0.02 * 0.8; // blue value between 0.2 -> 1
 	}
 	else if(x > 20) {
 		color_x = 1;
 		color_y = (x-20)*90/27/100; // green value between 0 -> 1
 		color_z = (x-20)*90/27/100 * 0.2; // blue value between 0 -> 0.2
-		Sbar_DrawXNum(pos, x, 3, lettersize, color, 0, alpha, 0);
 	}
-	else
-		Sbar_DrawXNum(pos, x, 3, lettersize, '1 0 0', 0, alpha, 0);
+	else {
+		color_x = 1;
+		color_y = 0;
+		color_z = 0;
+	}
+	Sbar_DrawXNum(pos, x, 3, lettersize, color, 0, 0, alpha, DRAWFLAG_NORMAL);
 }
 
 void Cmd_Sbar_SetFields(float argc);
@@ -538,7 +549,7 @@
 		have_secondary = 1;
 	if(ps_primary == ps_secondary)
 		have_secondary = 1;
-	missing = !have_primary + !have_secondary + !have_separator + !have_name;
+	missing = (!have_primary) + (!have_secondary) + (!have_separator) + (!have_name);
 
 	if(sbar_num_fields+missing < MAX_SBAR_FIELDS)
 	{
@@ -782,7 +793,7 @@
 	return str;
 }
 
-void Sbar_PrintScoreboardItem(vector pos, entity pl, float is_self)
+void Sbar_PrintScoreboardItem(vector pos, entity pl, float is_self, float pl_number)
 {
 	vector tmp;
 	string str;
@@ -791,13 +802,20 @@
 	is_spec = (GetPlayerColor(pl.sv_entnum) == COLOR_SPECTATOR);
 
 	// Layout:
+	tmp_x = sbwidth;
+	tmp_y = sbar_fontsize_y * 1.25;
 	tmp_z = 0;
-	if(is_self)
+	
+	// alternated rows highlighting
+	if (is_self)
+		drawfill(pos - '1 1 0', tmp + '2 0 0', '1 1 1', 0.25, DRAWFLAG_NORMAL);
+	else
 	{
-		tmp_x = sbwidth;
-		tmp_y = sbar_fontsize_y;
-		drawfill(pos - '1 1 0', tmp + '2 2 0', '1 1 1', 0.3, DRAWFLAG_NORMAL);
+		if (sbar_scoreboard_highlight)
+			if(!mod(pl_number,2))
+				drawfill(pos - '1 1 0', tmp + '2 0 0', '1 1 1', 0.09, DRAWFLAG_NORMAL);
 	}
+	
 	tmp_y = 0;
 
 	for(i = 0; i < sbar_num_fields; ++i)
@@ -825,11 +843,11 @@
 
 		tmp_x = sbar_fontsize_x*sbar_size[i] + sbar_fontsize_x;
 		if(sbar_field_icon0 != "")
-			drawpic(pos - tmp, sbar_field_icon0, '0 1 0' * sbar_fontsize_y + '1 0 0' * sbar_fontsize_x * sbar_fixscoreboardcolumnwidth_iconlen, sbar_field_icon1_rgb, sbar_field_icon0_alpha, 0);
+			drawpic(pos - tmp, sbar_field_icon0, '0 1 0' * sbar_fontsize_y + '1 0 0' * sbar_fontsize_x * sbar_fixscoreboardcolumnwidth_iconlen, sbar_field_icon1_rgb, sbar_field_icon0_alpha, DRAWFLAG_NORMAL);
 		if(sbar_field_icon1 != "")
-			drawpic(pos - tmp, sbar_field_icon1, '0 1 0' * sbar_fontsize_y + '1 0 0' * sbar_fontsize_x * sbar_fixscoreboardcolumnwidth_iconlen, sbar_field_icon1_rgb, sbar_field_icon1_alpha, 0);
+			drawpic(pos - tmp, sbar_field_icon1, '0 1 0' * sbar_fontsize_y + '1 0 0' * sbar_fontsize_x * sbar_fixscoreboardcolumnwidth_iconlen, sbar_field_icon1_rgb, sbar_field_icon1_alpha, DRAWFLAG_NORMAL);
 		if(sbar_field_icon2 != "")
-			drawpic(pos - tmp, sbar_field_icon2, '0 1 0' * sbar_fontsize_y + '1 0 0' * sbar_fontsize_x * sbar_fixscoreboardcolumnwidth_iconlen, sbar_field_icon2_rgb, sbar_field_icon2_alpha, 0);
+			drawpic(pos - tmp, sbar_field_icon2, '0 1 0' * sbar_fontsize_y + '1 0 0' * sbar_fontsize_x * sbar_fixscoreboardcolumnwidth_iconlen, sbar_field_icon2_rgb, sbar_field_icon2_alpha, DRAWFLAG_NORMAL);
 	}
 
 	if(sbar_field[i] == SP_SEPARATOR)
@@ -859,25 +877,153 @@
 
 			tmp_x = sbar_fontsize_x*sbar_size[i];
 			if(sbar_field_icon0 != "")
-				drawpic(pos - tmp, sbar_field_icon0, '0 1 0' * sbar_fontsize_y + '1 0 0' * sbar_fontsize_x * sbar_fixscoreboardcolumnwidth_iconlen, sbar_field_icon1_rgb, sbar_field_icon0_alpha, 0);
+				drawpic(pos - tmp, sbar_field_icon0, '0 1 0' * sbar_fontsize_y + '1 0 0' * sbar_fontsize_x * sbar_fixscoreboardcolumnwidth_iconlen, sbar_field_icon1_rgb, sbar_field_icon0_alpha, DRAWFLAG_NORMAL);
 			if(sbar_field_icon1 != "")
-				drawpic(pos - tmp, sbar_field_icon1, '0 1 0' * sbar_fontsize_y + '1 0 0' * sbar_fontsize_x * sbar_fixscoreboardcolumnwidth_iconlen, sbar_field_icon1_rgb, sbar_field_icon1_alpha, 0);
+				drawpic(pos - tmp, sbar_field_icon1, '0 1 0' * sbar_fontsize_y + '1 0 0' * sbar_fontsize_x * sbar_fixscoreboardcolumnwidth_iconlen, sbar_field_icon1_rgb, sbar_field_icon1_alpha, DRAWFLAG_NORMAL);
 			if(sbar_field_icon2 != "")
-				drawpic(pos - tmp, sbar_field_icon2, '0 1 0' * sbar_fontsize_y + '1 0 0' * sbar_fontsize_x * sbar_fixscoreboardcolumnwidth_iconlen, sbar_field_icon2_rgb, sbar_field_icon2_alpha, 0);
+				drawpic(pos - tmp, sbar_field_icon2, '0 1 0' * sbar_fontsize_y + '1 0 0' * sbar_fontsize_x * sbar_fixscoreboardcolumnwidth_iconlen, sbar_field_icon2_rgb, sbar_field_icon2_alpha, DRAWFLAG_NORMAL);
 
 			pos_x -= sbar_fontsize_x*sbar_size[i] + sbar_fontsize_x;
 		}
 	}
 }
 
+/*
+ * Sbar_Scoreboard_MakeTable
+ * 
+ * Makes a table for a team (for all playing players in DM) and fills it
+ */
+
+vector Sbar_Scoreboard_MakeTable(vector pos, entity tm, vector rgb, vector bg_size)
+{
+	float body_table_height, i, pos_x_save;
+	vector tmp, column_dim;
+	entity pl;
+	
+	body_table_height = 1.25 * sbar_fontsize_y * max(1, tm.team_size); // no player? show 1 empty line
+	
+	pos -= '1 1 0';
+
+	tmp_x = sbwidth + 2;
+	
+	tmp_y = 1.25 * sbar_fontsize_y;
+	
+	// rounded header
+	drawpic(pos, "gfx/hud/sb_scoreboard_tableheader", tmp, '0.5 0.5 0.5', sbar_scoreboard_alpha_bg, DRAWFLAG_NORMAL);
+	
+	// table border
+	tmp_y += sbar_border_thickness;
+	tmp_y += body_table_height;
+	drawborderlines(sbar_border_thickness, pos, tmp, '0 0 0', sbar_scoreboard_alpha_bg, DRAWFLAG_NORMAL); // more transparency for the scoreboard
+	
+	// separator header/table
+	pos_y += 1.25 * sbar_fontsize_y;
+	tmp_y = sbar_border_thickness;
+	drawfill(pos, tmp, '0 0 0', sbar_scoreboard_alpha_bg, DRAWFLAG_NORMAL);
+	
+	pos_y += sbar_border_thickness;
+	
+	// table background
+	tmp_y = body_table_height;
+	drawpic_tiled(pos, "gfx/hud/sb_scoreboard_bg", bg_size, tmp, rgb * sbar_color_bg_team, sbar_scoreboard_alpha_bg, DRAWFLAG_NORMAL);
+		
+	// anyway, apply some color
+	//drawfill(pos, tmp + '2 0 0', rgb, 0.1, DRAWFLAG_NORMAL);
+	
+	// go back to the top to make alternated columns highlighting and to print the strings
+	pos_y -= 1.25 * sbar_fontsize_y;
+	pos_y -= sbar_border_thickness;
+	
+	pos += '1 1 0';
+	
+	pos_x_save = pos_x; // will be restored after the columns headers are printed
+
+	if (sbar_scoreboard_highlight)
+	{
+		column_dim_y = 1.25 * sbar_fontsize_y; // header
+		column_dim_y += sbar_border_thickness;
+		column_dim_y += body_table_height;
+	}
+	
+	// print the strings of the columns headers
+	for(i = 0; i < sbar_num_fields; ++i)
+	{
+		if(sbar_field[i] == SP_SEPARATOR)
+			break;
+		column_dim_x = sbar_fontsize_x*sbar_size[i] + sbar_fontsize_x;
+		if (sbar_scoreboard_highlight)
+		{
+			if (mod(i,2))
+				drawfill(pos - '0 1 0' - sbar_fontsize_x / 2 * '1 0 0', column_dim, '0 0 0', sbar_scoreboard_alpha_bg * 0.4, DRAWFLAG_NORMAL);
+		}
+		drawstring(pos, sbar_title[i], sbar_fontsize, rgb, 1, DRAWFLAG_NORMAL);
+		pos_x += column_dim_x;
+	}
+	if(sbar_field[i] == SP_SEPARATOR)
+	{
+		pos_x = xmax;
+		for(i = sbar_num_fields-1; i > 0; --i)
+		{
+			if(sbar_field[i] == SP_SEPARATOR)
+				break;
+			/**
+			 * FTEQCC BUG!
+			 * Using strlen(sbar_title[i])*8 instead of
+			 * stringwidth(sbar_title[i], FALSE) will mess it all up
+			 */
+			pos_x -= stringwidth(sbar_title[i], FALSE)*sbar_fontsize_x;
+
+			if (sbar_scoreboard_highlight)
+			{
+				if (i == sbar_num_fields-1)
+					column_dim_x = sbar_fontsize_x*sbar_size[i] + sbar_fontsize_x / 2;
+				else
+					column_dim_x = sbar_fontsize_x*sbar_size[i] + sbar_fontsize_x;
+				if (!mod(i,2))
+					drawfill(pos - '0 1 0' - sbar_fontsize_x / 2 * '1 0 0', column_dim, '0 0 0', sbar_scoreboard_alpha_bg * 0.2, DRAWFLAG_NORMAL);
+			}
+			drawstring(pos, sbar_title[i], sbar_fontsize, rgb, 1, DRAWFLAG_NORMAL);
+			pos_x -= sbar_fontsize_x;
+		}
+	}
+	
+	pos_x = pos_x_save;
+	pos_y += 1.25 * sbar_fontsize_y; // skip the header
+	pos_y += sbar_border_thickness;
+			
+	i = 0;
+	if (teamplay)
+		for(pl = players.sort_next; pl; pl = pl.sort_next)
+		{
+			if(pl.team != tm.team)
+				continue;
+			Sbar_PrintScoreboardItem(pos, pl, (pl.sv_entnum == player_localentnum - 1), i);
+			pos_y += 1.25 * sbar_fontsize_y;
+			++i;
+		}
+	else
+		for(pl = players.sort_next; pl; pl = pl.sort_next)
+		{
+			if(pl.team == COLOR_SPECTATOR)
+				continue;
+			Sbar_PrintScoreboardItem(pos, pl, (pl.sv_entnum == player_localentnum - 1), i);
+			pos_y += 1.25 * sbar_fontsize_y;
+			++i;
+		}
+
+	pos_y += 1.25 * sbar_fontsize_y;
+	pos_y += 1.25 * sbar_fontsize_y; // add an empty row
+	
+	return pos;
+}
+
 float lastpingstime;
 float scoreboard_bottom;
 void Sbar_DrawScoreboard()
 {
-	//float xmin, ymin, xmax, ymax;
 	vector rgb, pos, tmp, sbar_save;
 	entity pl, tm;
-	float specs, i;
+	float specs;
 	float center_x;
 
 	if(time > lastpingstime + 10)
@@ -889,69 +1035,32 @@
 	sbwidth = Sbar_GetWidth(6.5 * sbar_fontsize_y);
 
 	xmin = 0.5 * (vid_conwidth - sbwidth);
-	ymin = 45;
+	ymin = 60;
 
 	xmax = vid_conwidth - xmin;
     ymax = vid_conheight - 0.2*vid_conheight;
 
 	center_x = xmin + 0.5*sbwidth;
 
-	//Sbar_UpdateFields();
-
 	// Initializes position
-	//pos_x = xmin;
+	pos_x = xmin;
 	pos_y = ymin;
 	pos_z = 0;
 
 	// Heading
 	drawfont = sbar_bigfont;
-	pos_x = center_x - stringwidth("Scoreboard", TRUE)*0.5*24;
-	drawstring(pos, "Scoreboard", '24 24 0', '1 1 1', 1, DRAWFLAG_NORMAL);
-	pos_x = xmin;
+	drawstringcenter('0 1 0' * ymin, "Scoreboard", '24 24 0', '1 1 1', 1, DRAWFLAG_NORMAL);
+
 	pos_y += 24 + 4;
+	pos_y += sbar_fontsize_y;
 
-	// Titlebar background:
-	tmp_x = sbwidth;
-	tmp_y = sbar_fontsize_y;
-	drawfill(pos - '1 1 0', tmp + '2 2 0', '0.5 0.5 0.5', 0.5, DRAWFLAG_NORMAL);
-
 	drawfont = sbar_font;
 
-	for(i = 0; i < sbar_num_fields; ++i)
-	{
-		if(sbar_field[i] == SP_SEPARATOR)
-			break;
-		drawstring(pos, sbar_title[i], sbar_fontsize, '1 1 1', 1, DRAWFLAG_NORMAL);
-		pos_x += sbar_fontsize_x*sbar_size[i] + sbar_fontsize_x;
-	}
-
-	if(sbar_field[i] == SP_SEPARATOR)
-	{
-		pos_x = xmax + sbar_fontsize_x;
-		tmp_y = tmp_z = 0;
-		for(i = sbar_num_fields-1; i > 0; --i)
-		{
-			if(sbar_field[i] == SP_SEPARATOR)
-				break;
-
-			pos_x -= sbar_fontsize_x*sbar_size[i] + sbar_fontsize_x;
-			/**
-			 * FTEQCC BUG!
-			 * Using the following line will mess it all up:
-			 **
-			 * tmp_x = sbar_size[i] - strlen(sbar_title[i])*8;
-			 */
-			tmp_x = sbar_fontsize_x*sbar_size[i];
-			tmp_x -= stringwidth(sbar_title[i], FALSE)*sbar_fontsize_x;
-			drawstring(pos + tmp, sbar_title[i], sbar_fontsize, '1 1 1', 1, DRAWFLAG_NORMAL);
-		}
-	}
-
-	pos_x = xmin;
-	pos_y += 1.5 * sbar_fontsize_y;
-
 	sbar_save = sbar;
 	sbar = '0 0 0';
+	
+	vector bg_size;
+	bg_size = drawgetimagesize("gfx/hud/sb_scoreboard_bg");
 
 	if(teamplay)
 	{
@@ -963,75 +1072,40 @@
 
 			rgb = GetTeamRGB(tm.team);
 
-			pos_x = xmin;
+			Sbar_DrawXNum(sbar + pos - '6.5 0 0' * sbar_fontsize_y + '0 1 0' * sbar_fontsize_y, tm.(teamscores[ts_primary]), 4, sbar_fontsize_y * 1.5, rgb, 0, 1, 1, DRAWFLAG_NORMAL);
 
-			Sbar_DrawXNum(sbar + pos - '6.5 0 0' * sbar_fontsize_y, tm.(teamscores[ts_primary]), 4, sbar_fontsize_y * 1.5, rgb, 0, 1, DRAWFLAG_NORMAL);
-
 			if(ts_primary != ts_secondary)
-			Sbar_DrawXNum(sbar + pos - '4.5 0 0' * sbar_fontsize_y + '0 1.5 0' * sbar_fontsize_y, tm.(teamscores[ts_secondary]), 4, sbar_fontsize_y * 1, rgb, 0, 1, DRAWFLAG_NORMAL);
+				Sbar_DrawXNum(sbar + pos - '4.5 0 0' * sbar_fontsize_y + '0 2.5 0' * sbar_fontsize_y, tm.(teamscores[ts_secondary]), 4, sbar_fontsize_y * 1, rgb, 0, 1, 1, DRAWFLAG_NORMAL);
 
-			specs = tm.team_size;
-
-			if(specs < 2)
-				specs = 2;
-
-			tmp_x = sbwidth;
-			tmp_y = 1.25 * sbar_fontsize_y * specs;
-			drawfill(pos - '1 1 0', tmp + '2 0 0', rgb, 0.2, DRAWFLAG_NORMAL);
-
-			for(pl = players.sort_next; pl; pl = pl.sort_next)
-			{
-				if(pl.team != tm.team)
-					continue;
-				Sbar_PrintScoreboardItem(pos, pl, (pl.sv_entnum == player_localentnum - 1));
-				pos_y += 1.25 * sbar_fontsize_y;
-				tmp_y -= 1.25 * sbar_fontsize_y;
-			}
-			pos_y += tmp_y + 1.5 * sbar_fontsize_y;
+			pos = Sbar_Scoreboard_MakeTable(pos, tm, rgb, bg_size);
 		}
-		// rgb := tempvector :)
-		rgb = pos + '0 1.5 0' * sbar_fontsize_y;
-		pos_y += 3 * sbar_fontsize_y;
-		specs = 0;
-		for(pl = players.sort_next; pl; pl = pl.sort_next)
-		{
-			if(pl.team != COLOR_SPECTATOR)
-				continue;
-			Sbar_PrintScoreboardItem(pos, pl, (pl.sv_entnum == player_localentnum - 1));
-			pos += '0 1.25 0' * sbar_fontsize_y;
-			++specs;
-		}
+	}
+	else
+	{
+		rgb_x = cvar("sbar_color_bg_r");
+		rgb_y = cvar("sbar_color_bg_g");
+		rgb_z = cvar("sbar_color_bg_b");
 
-		if(specs)
-			drawstring(rgb, "Spectators", sbar_fontsize, '1 1 1', 1, 0);
-	} else {
-		pos_x = xmin;
-		for(pl = players.sort_next; pl; pl = pl.sort_next)
-		{
-			if(pl.team == COLOR_SPECTATOR)
-				continue;
-			Sbar_PrintScoreboardItem(pos, pl, (pl.sv_entnum == player_localentnum - 1));
-			pos_y += 1.25 * sbar_fontsize_y;
-			tmp_y -= 1.25 * sbar_fontsize_y;
-		}
+		tm = teams.sort_next;
+		
+		pos = Sbar_Scoreboard_MakeTable(pos, tm, rgb, bg_size);
+	}
 
-		// rgb := tempvector :)
-		rgb = pos + '0 1.5 0' * sbar_fontsize_y;
-		pos_y += 3 * sbar_fontsize_y;
-		specs = 0;
-		for(pl = players.sort_next; pl; pl = pl.sort_next)
-		{
-			if(pl.team != COLOR_SPECTATOR)
-				continue;
-			Sbar_PrintScoreboardItem(pos, pl, (pl.sv_entnum == player_localentnum - 1));
-			pos += '0 1.25 0' * sbar_fontsize_y;
-			++specs;
-		}
-
-		if(specs)
-			drawstring(rgb, "Spectators", sbar_fontsize, '1 1 1', 1, 0);
+	tmp = pos + '0 1.5 0' * sbar_fontsize_y;
+	pos_y += 3 * sbar_fontsize_y;
+	specs = 0;
+	for(pl = players.sort_next; pl; pl = pl.sort_next)
+	{
+		if(pl.team != COLOR_SPECTATOR)
+			continue;
+		Sbar_PrintScoreboardItem(pos, pl, (pl.sv_entnum == player_localentnum - 1), specs);
+		pos_y += 1.25 * sbar_fontsize_y;
+		++specs;
 	}
 
+	if(specs)
+		drawstring(tmp, "Spectators", sbar_fontsize, '1 1 1', 1, DRAWFLAG_NORMAL);
+
 	string str;
 	float tl, fl, ll;
 	str = strcat("playing on ^2", shortmapname, "^7");
@@ -1101,7 +1175,7 @@
 
 
 	pos_y += 1.2 * sbar_fontsize_y;
-	drawcolorcodedstring(pos + '0.5 0 0' * (sbwidth - sbar_fontsize_x * stringwidth(str, TRUE)), str, sbar_fontsize, 0.8, 0);
+	drawcolorcodedstring(pos + '0.5 0 0' * (sbwidth - sbar_fontsize_x * stringwidth(str, TRUE)), str, sbar_fontsize, 0.8, DRAWFLAG_NORMAL);
 
 	sbar = sbar_save;
 	scoreboard_bottom = pos_y + 2 * sbar_fontsize_y;
@@ -1155,7 +1229,11 @@
 	else
 		col = "^7";
 
-	if(cp)
+	if(cp == 254)
+		cpname = "Start line";
+	else if(cp == 255)
+		cpname = "Finish line";
+	else if(cp)
 		cpname = strcat("Intermediate ", ftos(cp));
 	else
 		cpname = "Finish line";
@@ -1170,10 +1248,10 @@
 
 void Sbar_Score(float margin)
 {
-	float timelimit, minutes, seconds, timeleft, minutesLeft, secondsLeft, distribution, myplace, score, desiredPlayerId;
-	vector sbar_save, place, timer_color, offset;
+	float timelimit, minutes, seconds, timeleft, minutesLeft, secondsLeft, distribution, score, desiredPlayerId;
+	vector sbar_save, score_offset, timer_color, offset;
 	entity tm, pl, me;
-	sbar_save = sbar;
+	sbar_save = sbar;
 
  	vector bottomright;
  	bottomright_x = vid_conwidth;
@@ -1185,22 +1263,27 @@
  	topright_y = 0;
  	topright_z = 0;
 
- 	sbar_alpha_bg = cvar("sbar_alpha_bg");
-	//get the ID (could be "me", or the player I'm spectating)
-	desiredPlayerId = player_localentnum - 1;
-	if (spectatee_status) {
-		if (spectatee_status != -1) {
-			desiredPlayerId = spectatee_status - 1;
-		}
-	}
-
-	myteam = GetPlayerColor(desiredPlayerId);
+	//get the ID (could be "me", or the player I'm spectating)
+	if (spectatee_status)
+		desiredPlayerId = spectatee_status - 1;
+	else
+		desiredPlayerId = player_localentnum - 1;
 
 	sbar_y = vid_conheight - (32+12);
 	sbar_x -= margin;
 
 	offset = '0 0 0';
-	place_z = 0;
+	
+	if (vid_conwidth >= 800) {
+		score_offset_x = 196;
+		score_offset_y = 36;
+	}
+	else { // move the scores if vid_conwidth < 800
+		score_offset_x = 196;
+		score_offset_y = 84;
+	}
+	score_offset_z = 0;
+	
 	if(teamplay)
 	{
 		// Layout:
@@ -1209,16 +1292,7 @@
 		//
 		//         TEAM2
 		//for(i = 0; i < 4; ++i)
-		if (cvar("vid_conwidth") >= 800) {
-			place_x = 196;
-			place_y = 36;
 
-		}
-		else {
-			place_x = 196;
-			place_y = 86;
-		}
-
 		float max_fragcount;
 		max_fragcount = -999;
 
@@ -1234,31 +1308,22 @@
 
 			if(tm.team == myteam) {
 				if (max_fragcount == score)
-					Sbar_DrawXNum(bottomright - element_offset - place, score, 4, 34, GetTeamRGB(tm.team) * 0.8, 1, 1, DRAWFLAG_NORMAL);
+					Sbar_DrawXNum(bottomright - element_offset - score_offset, score, 4, 34, GetTeamRGB(tm.team) * 0.8, 1, 1, sbar_alpha_fg, DRAWFLAG_NORMAL);
 				else
-					Sbar_DrawXNum(bottomright - element_offset - place, score, 4, 34, GetTeamRGB(tm.team) * 0.8, 0, 1, DRAWFLAG_NORMAL);
+					Sbar_DrawXNum(bottomright - element_offset - score_offset, score, 4, 34, GetTeamRGB(tm.team) * 0.8, 0, 1, sbar_alpha_fg, DRAWFLAG_NORMAL);
 			}
 			else
 			{
 				if (max_fragcount == score)
-					Sbar_DrawXNum(bottomright - element_offset - place + '132 -6 0' - offset, score, 4, 16, GetTeamRGB(tm.team) * 0.8, 1, 1, DRAWFLAG_NORMAL);
+					Sbar_DrawXNum(bottomright - element_offset - score_offset + '132 -6 0' - offset, score, 4, 16, GetTeamRGB(tm.team) * 0.8, 1, 1, sbar_alpha_fg, DRAWFLAG_NORMAL);
 				else
-					Sbar_DrawXNum(bottomright - element_offset - place + '132 -6 0' - offset, score, 4, 16, GetTeamRGB(tm.team) * 0.8, 0, 1, DRAWFLAG_NORMAL);
+					Sbar_DrawXNum(bottomright - element_offset - score_offset + '132 -6 0' - offset, score, 4, 16, GetTeamRGB(tm.team) * 0.8, 0, 1, sbar_alpha_fg, DRAWFLAG_NORMAL);
 				offset_y -= 16;
 			}
 		}
 	} else {
 		// me vector := [team/connected frags id]
 
-		myplace = 0;
-		for(me = players.sort_next; me; me = me.sort_next)
-		{
-			if(me.team != COLOR_SPECTATOR)
-				++myplace;
-			if(me.sv_entnum == desiredPlayerId)
-				break;
-		}
-
 		pl = players.sort_next;
 		if(pl == me)
 			pl = pl.sort_next;
@@ -1269,37 +1334,28 @@
 		} else
 			distribution = 0;
 
-		if (cvar("vid_conwidth") >= 800) {
-			place_x = 196;
-			place_y = 36;
-
-		}
-		else { // move the scores if vid_conwidth < 800
-			place_x = 196;
-			place_y = 86;
-		}
 		score = me.(scores[ps_primary]);
 
 		if(distribution >= 0)
 		{
 			if (distribution != 0) {
 				// draw a + sign in front of the score
-				if (distribution < 10) { drawpic(bottomright - element_offset - place + '132 -5 0' + '32 0 0', "gfx/hud/num_plus", '16 16 0', '1 1 1', sbar_alpha_fg, DRAWFLAG_ADDITIVE); }
-				else if (distribution < 100) { drawpic(bottomright - element_offset - place + '132 -5 0' + '16 0 0', "gfx/hud/num_plus", '16 16 0', '1 1 1', sbar_alpha_fg, DRAWFLAG_ADDITIVE); }
-				else if (distribution < 1000) { drawpic(bottomright - element_offset - place + '132 -5 0', "gfx/hud/num_plus", '16 16 0', '1 1 1', sbar_alpha_fg, DRAWFLAG_ADDITIVE); }
+				if (distribution < 10) { drawpic(bottomright - element_offset - score_offset + '132 -6 0' + '32 0 0', "gfx/hud/num_plus", '16 16 0', '1 1 1', sbar_alpha_fg, DRAWFLAG_ADDITIVE); }
+				else if (distribution < 100) { drawpic(bottomright - element_offset - score_offset + '132 -6 0' + '16 0 0', "gfx/hud/num_plus", '16 16 0', '1 1 1', sbar_alpha_fg, DRAWFLAG_ADDITIVE); }
+				else if (distribution < 1000) { drawpic(bottomright - element_offset - score_offset + '132 -6 0', "gfx/hud/num_plus", '16 16 0', '1 1 1', sbar_alpha_fg, DRAWFLAG_ADDITIVE); }
 			}
 
-			Sbar_DrawXNum(bottomright - element_offset - place + '132 -6 0', distribution, 4, 16, ' 1 1 1', 0, 1, DRAWFLAG_NORMAL);
-			Sbar_DrawXNum(bottomright - element_offset - place, score, 4, 34, '1 1 1', 1, 1, DRAWFLAG_NORMAL);
+			Sbar_DrawXNum(bottomright - element_offset - score_offset + '132 -6 0', distribution, 4, 16, ' 1 1 1', 0, 0, sbar_alpha_fg, DRAWFLAG_NORMAL);
+			Sbar_DrawXNum(bottomright - element_offset - score_offset, score, 4, 34, '1 1 1', 1, 0, sbar_alpha_fg, DRAWFLAG_NORMAL);
 		}
 		else if(distribution >= -5)
 		{
-			Sbar_DrawXNum(bottomright - element_offset - place + '132 -6 0', distribution, 4, 16, ' 1 1 0', 0, 1, DRAWFLAG_NORMAL);
-			Sbar_DrawXNum(bottomright - element_offset - place, score, 4, 34, '1 1 0', 0, 1, DRAWFLAG_NORMAL);
+			Sbar_DrawXNum(bottomright - element_offset - score_offset + '132 -6 0', distribution, 4, 16, ' 1 1 0', 0, 0, sbar_alpha_fg, DRAWFLAG_NORMAL);
+			Sbar_DrawXNum(bottomright - element_offset - score_offset, score, 4, 34, '1 1 0', 0, 0, sbar_alpha_fg, DRAWFLAG_NORMAL);
 		}
 		else {
-			Sbar_DrawXNum(bottomright - element_offset - place + '132 -6 0', distribution, 4, 16, ' 1 0 0', 0, 1, DRAWFLAG_NORMAL);
-			Sbar_DrawXNum(bottomright - element_offset - place, score, 4, 34, '1 0 0', 0, 1, DRAWFLAG_NORMAL);
+			Sbar_DrawXNum(bottomright - element_offset - score_offset + '132 -6 0', distribution, 4, 16, ' 1 0 0', 0, 0, sbar_alpha_fg, DRAWFLAG_NORMAL);
+			Sbar_DrawXNum(bottomright - element_offset - score_offset, score, 4, 34, '1 0 0', 0, 0, sbar_alpha_fg, DRAWFLAG_NORMAL);
 		}
 	}
 
@@ -1314,18 +1370,13 @@
 		minutesLeft = floor(timeleft / 60);
 		secondsLeft = timeleft - minutesLeft*60;
 
-		if(minutesLeft >= 5) {
+		if(minutesLeft >= 5 || warmup_stage) //don't use red or yellow for timer during warmup
 			timer_color = '1 1 1'; //white
-		} else if(minutesLeft >= 1) {
+		else if(minutesLeft >= 1)
 			timer_color = '1 1 0'; //yellow
-		} else {
+		else
 			timer_color = '1 0 0'; //red
-		}
 
-		if (warmup_stage) {
-			timer_color = '1 1 1'; //don't use red or yellow for timer during warmup
-		}
-
 		if (cvar("sbar_increment_maptime")) {
 			if (time < getstatf(STAT_GAMESTARTTIME)) {
 				//while restart is still active, show negative counter
@@ -1342,8 +1393,12 @@
 			seconds = secondsLeft;
 		}
 
-		if (minutes == 0)
-			bgpos_x = topright_x - 36 - 7 - 12;
+		if (minutes == 0) {
+			if (cvar("sbar_increment_maptime") == 1)
+				bgpos_x = topright_x - 54 - 17 - 12;
+			else
+				bgpos_x = topright_x - 36 - 7 - 12;
+		}
 		else if (minutes < 10) // nudge the timer background left if more digits are drawn
 			bgpos_x = topright_x - 54 - 17 - 12;
 		else if (minutes < 100)
@@ -1355,21 +1410,21 @@
 
 		if (cvar("viewsize") <= 100) { // draw timer background when viewsize <= 100
 			if (teamplay)
-				drawpic(bgpos, "gfx/hud/sb_timerbg", '120 30 0', GetTeamRGB(myteam) * cvar("sbar_color_bg_team"), sbar_alpha_bg, 0); // timer bg color = myteam color
+				drawpic(bgpos, "gfx/hud/sb_timerbg", '120 30 0', GetTeamRGB(myteam) * sbar_color_bg_team, sbar_alpha_bg, DRAWFLAG_NORMAL); // timer bg color = myteam color
 			else {
 				color_x = cvar("sbar_color_bg_r");
 				color_y = cvar("sbar_color_bg_g");
 				color_z = cvar("sbar_color_bg_b");
 
-				drawpic(bgpos, "gfx/hud/sb_timerbg", '120 30 0', color, sbar_alpha_bg, 0);
+				drawpic(bgpos, "gfx/hud/sb_timerbg", '120 30 0', color, sbar_alpha_bg, DRAWFLAG_NORMAL);
 			}
 		}
 
-		if(minutesLeft >= 1 || (cvar("sbar_increment_maptime") && minutes >= 1) ) {
-			Sbar_DrawXNum(topright - '103 0 0', minutes, 3, 18, timer_color, 0, sbar_alpha_fg, 0);
-			drawpic(topright - '53 0 0', "gfx/hud/num_colon", '18 18 0', timer_color, sbar_alpha_fg, 0);
+		if(minutesLeft >= 1) {
+			Sbar_DrawXNum(topright - '103 0 0' + '0 2 0', minutes, 3, 18, timer_color, 0, 0, sbar_alpha_fg, DRAWFLAG_NORMAL);
+			drawpic(topright - '53 0 0' + '0 1 0', "gfx/hud/num_colon", '18 18 0', timer_color, sbar_alpha_fg, DRAWFLAG_NORMAL);
 		}
-		Sbar_DrawXNum(topright - '36 0 0' - '3 0 0', seconds, -2, 18, timer_color, 0, 1, DRAWFLAG_NORMAL);
+		Sbar_DrawXNum(topright - '36 0 0' - '3 0 0' + '0 2 0', seconds, -2, 18, timer_color, 0, 0, sbar_alpha_fg, DRAWFLAG_NORMAL);
 
 	} else {
 		timer_color = '1 1 1'; //white
@@ -1387,25 +1442,25 @@
 
 		if (cvar("viewsize") <= 100) { // draw timer background when viewsize <= 100
 			if (teamplay)
-				drawpic(bgpos, "gfx/hud/sb_timerbg", '120 30 0', GetTeamRGB(myteam), sbar_alpha_bg, 0); // timer bg color = myteam color
+				drawpic(bgpos, "gfx/hud/sb_timerbg", '120 30 0', GetTeamRGB(myteam) * sbar_color_bg_team, sbar_alpha_bg, DRAWFLAG_NORMAL); // timer bg color = myteam color
 			else {
 				color_x = cvar("sbar_color_bg_r");
 				color_y = cvar("sbar_color_bg_g");
 				color_z = cvar("sbar_color_bg_b");
 
-				drawpic(bgpos, "gfx/hud/sb_timerbg", '120 30 0', color, sbar_alpha_bg, 0);
+				drawpic(bgpos, "gfx/hud/sb_timerbg", '120 30 0', color, sbar_alpha_bg, DRAWFLAG_NORMAL);
 			}
 		}
 
-		Sbar_DrawXNum(topright - '103 0 0', minutes, 3, 18, timer_color, 0, 1, DRAWFLAG_NORMAL);
-		drawpic(topright - '53 0 0', "gfx/hud/num_colon", '18 18 0', timer_color, sbar_alpha_fg, 0);
-		Sbar_DrawXNum(topright - '36 0 0' - '3 0 0', seconds, -2, 18, timer_color, 0, 1, DRAWFLAG_NORMAL);
+		Sbar_DrawXNum(topright - '103 0 0' + '0 2 0', minutes, 3, 18, timer_color, 0, 0, sbar_alpha_fg, DRAWFLAG_NORMAL);
+		drawpic(topright - '53 0 0' + '0 1 0', "gfx/hud/num_colon", '18 18 0', timer_color, sbar_alpha_fg, DRAWFLAG_NORMAL);
+		Sbar_DrawXNum(topright - '36 0 0' - '3 0 0' + '0 2 0', seconds, -2, 18, timer_color, 0, 0, sbar_alpha_fg, DRAWFLAG_NORMAL);
 	}
 
 	if(gametype == GAME_RACE)
 	{
 		drawfont = sbar_bigfont;
-		float a;
+		float a, t;
 		vector m;
 		string s, forcetime;
 
@@ -1418,21 +1473,24 @@
 			forcetime = "";
 			if(a > 0) // just hit a checkpoint?
 			{
-				if(race_time && race_previousbesttime)
-					s = MakeRaceString(race_checkpoint, race_time / 10 - race_previousbesttime / 10, 0, 0, race_previousbestname);
-				else
-					s = MakeRaceString(race_checkpoint, 0, -1, 0, race_previousbestname);
-				if(race_time)
-					forcetime = mmsss(race_time);
+				if(race_checkpoint != 254)
+				{
+					if(race_time && race_previousbesttime)
+						s = MakeRaceString(race_checkpoint, race_time / 10 - race_previousbesttime / 10, 0, 0, race_previousbestname);
+					else
+						s = MakeRaceString(race_checkpoint, 0, -1, 0, race_previousbestname);
+					if(race_time)
+						forcetime = mmsss(race_time);
+				}
 			}
 			else
 			{
-				if(race_laptime && race_nextbesttime)
+				if(race_laptime && race_nextbesttime && race_nextcheckpoint != 254)
 				{
-					a = bound(0, 2 - ((race_laptime + race_nextbesttime/10) - time), 1);
+					a = bound(0, 2 - ((race_laptime + race_nextbesttime/10) - (time + race_penaltyaccumulator/10)), 1);
 					if(a > 0) // next one?
 					{
-						s = MakeRaceString(race_nextcheckpoint, time - race_laptime, race_nextbesttime / 10, 0, race_nextbestname);
+						s = MakeRaceString(race_nextcheckpoint, (time + race_penaltyaccumulator/10) - race_laptime, race_nextbesttime / 10, 0, race_nextbestname);
 					}
 				}
 			}
@@ -1440,9 +1498,20 @@
 			if(s != "" && a > 0)
 			{
 				dummyfunction(0, 0, 0, 0, 0, 0, 0, 0); // work around DP bug (set OFS_PARAM5 to 0)
-				drawcolorcodedstring(m - '0 16 0' - '8 0 0' * stringwidth(s, TRUE), s, '16 16 0', sbar_alpha_fg * a, 0);
+				drawcolorcodedstring(m - '0 16 0' - '8 0 0' * stringwidth(s, TRUE), s, '16 16 0', sbar_alpha_fg * a, DRAWFLAG_NORMAL);
 			}
 
+			if(race_penaltytime)
+			{
+				a = bound(0, 2 - (time - race_penaltyeventtime), 1);
+				if(a > 0)
+				{
+					s = strcat("^1PENALTY: ", ftos_decimals(race_penaltytime * 0.1, 1), " (", race_penaltyreason, ")");
+					dummyfunction(0, 0, 0, 0, 0, 0, 0, 0); // work around DP bug (set OFS_PARAM5 to 0)
+					drawcolorcodedstring(m - '0 32 0' - '8 0 0' * stringwidth(s, TRUE), s, '16 16 0', sbar_alpha_fg * a, DRAWFLAG_NORMAL);
+				}
+			}
+
 			if(forcetime != "")
 			{
 				a = bound(0, (time - race_checkpointtime) / 0.5, 1);
@@ -1451,10 +1520,10 @@
 			else
 				a = 1;
 
-			if(race_laptime)
+			if(race_laptime && race_checkpoint != 255)
 			{
-				s = mmsss(10*(time - race_laptime));
-				drawstring(m - '16 0 0' * stringwidth(s, FALSE), s, '32 32 0', '1 1 1', sbar_alpha_fg * a, 0);
+				s = mmsss(10*(time + race_penaltyaccumulator/10 - race_laptime));
+				drawstring(m - '16 0 0' * stringwidth(s, FALSE), s, '32 32 0', '1 1 1', sbar_alpha_fg * a, DRAWFLAG_NORMAL);
 			}
 		}
 		else
@@ -1464,15 +1533,30 @@
 				a = bound(0, 2 - (time - race_mycheckpointtime), 1);
 				s = MakeRaceString(race_mycheckpoint, race_mycheckpointdelta / 10, -!race_mycheckpointenemy, race_mycheckpointlapsdelta, race_mycheckpointenemy);
 				dummyfunction(0, 0, 0, 0, 0, 0, 0, 0); // work around DP bug (set OFS_PARAM5 to 0)
-				drawcolorcodedstring(m - '0 16 0' - '8 0 0' * stringwidth(s, TRUE), s, '16 16 0', sbar_alpha_fg * a, 0);
+				drawcolorcodedstring(m - '0 16 0' - '8 0 0' * stringwidth(s, TRUE), s, '16 16 0', sbar_alpha_fg * a, DRAWFLAG_NORMAL);
 			}
 			if(race_othercheckpointtime && race_othercheckpointenemy != "")
 			{
 				a = bound(0, 2 - (time - race_othercheckpointtime), 1);
 				s = MakeRaceString(race_othercheckpoint, -race_othercheckpointdelta / 10, -!race_othercheckpointenemy, race_othercheckpointlapsdelta, race_othercheckpointenemy);
 				dummyfunction(0, 0, 0, 0, 0, 0, 0, 0); // work around DP bug (set OFS_PARAM5 to 0)
-				drawcolorcodedstring(m - '0 0 0' - '8 0 0' * stringwidth(s, TRUE), s, '16 16 0', sbar_alpha_fg * a, 0);
+				drawcolorcodedstring(m - '0 0 0' - '8 0 0' * stringwidth(s, TRUE), s, '16 16 0', sbar_alpha_fg * a, DRAWFLAG_NORMAL);
 			}
+
+			if(race_penaltytime && !race_penaltyaccumulator)
+			{
+				t = race_penaltytime * 0.1 + race_penaltyeventtime;
+				a = bound(0, (1 + t - time), 1);
+				if(a > 0)
+				{
+					if(time < t)
+						s = strcat("^1PENALTY: ", ftos_decimals(t - time, 1), " (", race_penaltyreason, ")");
+					else
+						s = strcat("^2PENALTY: 0.0 (", race_penaltyreason, ")");
+					dummyfunction(0, 0, 0, 0, 0, 0, 0, 0); // work around DP bug (set OFS_PARAM5 to 0)
+					drawcolorcodedstring(m - '0 32 0' - '8 0 0' * stringwidth(s, TRUE), s, '16 16 0', sbar_alpha_fg * a, DRAWFLAG_NORMAL);
+				}
+			}
 		}
 
 		drawfont = sbar_font;
@@ -1537,7 +1621,7 @@
 			{
 				drawpic(bottom + '192 -46 0', "gfx/hud/sb_str", picsize, '1 1 1', sbar_alpha_fg, DRAWFLAG_ADDITIVE);
 			}
-			Sbar_DrawXNum(bottom + '152 -44 0', ceil(dt), 2, countdown_fontsize, '1 1 1', 0, 1, DRAWFLAG_NORMAL);
+			Sbar_DrawXNum(bottom + '152 -44 0', ceil(dt), 2, countdown_fontsize, '1 1 1', 0, 0, sbar_alpha_fg, DRAWFLAG_NORMAL);
 		}
 		else if(dt > -1)
 		{
@@ -1560,7 +1644,7 @@
 			{
 				drawpic(bottom + '192 -24 0', "gfx/hud/sb_invinc", picsize, '1 1 1', sbar_alpha_fg, DRAWFLAG_ADDITIVE);
 			}
-			Sbar_DrawXNum(bottom + '152 -22 0', ceil(dt), 2, countdown_fontsize, '1 1 1', 0, 1, DRAWFLAG_NORMAL);
+			Sbar_DrawXNum(bottom + '152 -22 0', ceil(dt), 2, countdown_fontsize, '1 1 1', 0, 0, 1, DRAWFLAG_NORMAL);
 		}
 		else if(dt > -1)
 		{
@@ -1808,7 +1892,6 @@
 	float i, count_hitscan, count_splash, row;  // count is the number of 'colums'
 	float weapon_hit, weapon_damage, weapon_stats;
 	float left_border;  // position where the weapons start, the description is in the border
-	float border_thickness = 2;
 	vector fill_colour, fill_size;
 	vector pos;
 
@@ -1872,10 +1955,7 @@
 
 			// background
 			drawpic(pos, "gfx/hud/sb_accuracy", fill_size , fill_colour, sbar_alpha_bg, DRAWFLAG_NORMAL);
-			drawline(border_thickness, pos, pos + '1 0 0' * fill_size_x, '0 0 0', sbar_alpha_bg, DRAWFLAG_NORMAL);
-			drawline(border_thickness, pos, pos + '0 1 0' * fill_size_y, '0 0 0', sbar_alpha_bg, DRAWFLAG_NORMAL);
-			drawline(border_thickness, pos + '1 0 0' * fill_size_x, pos + '1 0 0' * fill_size_x + '0 1 0' * fill_size_y, '0 0 0', sbar_alpha_bg, DRAWFLAG_NORMAL);
-			drawline(border_thickness, pos + '0 1 0' * fill_size_y, pos + '0 1 0' * fill_size_y + '1 0 0' * fill_size_x, '0 0 0', sbar_alpha_bg, DRAWFLAG_NORMAL);
+			drawborderlines(sbar_border_thickness, pos, fill_size, '0 0 0', sbar_alpha_bg, DRAWFLAG_NORMAL);
 
 			// the weapon
 			drawpic(pos, strcat("gfx/hud/inv_weapon", ftos(i-1)), '1 0.5 0' * fill_size_x , '1 1 1', sbar_alpha_fg, DRAWFLAG_NORMAL);
@@ -1928,10 +2008,7 @@
 
 			// background
 			drawpic(pos, "gfx/hud/sb_accuracy", fill_size , fill_colour, sbar_alpha_bg, DRAWFLAG_NORMAL);
-			drawline(border_thickness, pos, pos + '1 0 0' * fill_size_x, '0 0 0', sbar_alpha_bg, DRAWFLAG_NORMAL);
-			drawline(border_thickness, pos, pos + '0 1 0' * fill_size_y, '0 0 0', sbar_alpha_bg, DRAWFLAG_NORMAL);
-			drawline(border_thickness, pos + '1 0 0' * fill_size_x, pos + '1 0 0' * fill_size_x + '0 1 0' * fill_size_y, '0 0 0', sbar_alpha_bg, DRAWFLAG_NORMAL);
-			drawline(border_thickness, pos + '0 1 0' * fill_size_y, pos + '0 1 0' * fill_size_y + '1 0 0' * fill_size_x, '0 0 0', sbar_alpha_bg, DRAWFLAG_NORMAL);
+			drawborderlines(sbar_border_thickness, pos, fill_size, '0 0 0', sbar_alpha_bg, DRAWFLAG_NORMAL);
 
 			// the weapon
 			drawpic(pos, strcat("gfx/hud/inv_weapon", ftos(i-1)), '1 0.5 0' * fill_size_x , '1 1 1', sbar_alpha_fg, DRAWFLAG_NORMAL);
@@ -2050,6 +2127,10 @@
 	bottomleft_z = 0;
 
 	sbar_alpha_bg = cvar("sbar_alpha_bg");
+	sbar_border_thickness = bound(0, cvar("sbar_border_thickness"), 5);
+	sbar_color_bg_team = cvar("sbar_color_bg_team");
+	sbar_scoreboard_alpha_bg = cvar("sbar_scoreboard_alpha_bg");
+	sbar_scoreboard_highlight = cvar("sbar_scoreboard_highlight");
 
 	float i;
 	float weapon_stats;
@@ -2180,7 +2261,7 @@
 			o = Sbar_DrawNoteLine(o, s);
 		}
 	}
-	if(teamplay && !intermission)
+	if(teamplay && !intermission && !spectatee_status)
 	{
 		entity tm;
 		float ts_min, ts_max;
@@ -2266,40 +2347,37 @@
 
 		if (cvar("viewsize") <= 100) {
 			if (teamplay)
-				drawpic(bottomleft - '0 58 0' + bgoffset, "gfx/hud/sbar", bg_size, GetTeamRGB(myteam) * cvar("sbar_color_bg_team"), sbar_alpha_bg, 0); // hud color = myteam color
+				drawpic(bottomleft - '0 58 0' + bgoffset, "gfx/hud/sbar", bg_size, GetTeamRGB(myteam) * sbar_color_bg_team, sbar_alpha_bg, DRAWFLAG_NORMAL); // hud color = myteam color
 			else {
 				// allow for custom HUD colors in non-teamgames
 				color_x = cvar("sbar_color_bg_r");
 				color_y = cvar("sbar_color_bg_g");
 				color_z = cvar("sbar_color_bg_b");
 
-				drawpic(bottomleft - '0 58 0' + bgoffset, "gfx/hud/sbar", bg_size, color, sbar_alpha_bg, 0);
+				drawpic(bottomleft - '0 58 0' + bgoffset, "gfx/hud/sbar", bg_size, color, sbar_alpha_bg, DRAWFLAG_NORMAL);
 			}
 		}
 
 		if(sbar_hudselector == 2) // combined health and armor display
 		{
-			// NOTE: we'll always choose the SMALLER value...
-			float healthdamage, armordamage, armorideal;
-			healthdamage = (health - 1) / (1 - armorblockpercent); // damage we can take if we could use more health
-			armordamage = armor + (health - 1); // damage we can take if we could use more armor
-			armorideal = healthdamage * armorblockpercent;
+			vector v;
+			v = healtharmor_maxdamage(health, armor, armorblockpercent);
 
 			vector num_pos;
-			num_pos = bottom - element_offset - '0 24 0' + '-96 0 0';
+			num_pos = bottom - element_offset - '0 22 0' + '-96 0 0';
 
-			if(armordamage < healthdamage)
+			x = floor(v_x + 1);
+
+			if(v_z) // fully armored
 			{
 				// here, armorideal > armor
-				x = floor(armordamage + 1);
-				drawpic(num_pos + '78 -3 0', "gfx/hud/sb_health", '32 32 0', '1 1 1', sbar_alpha_fg, 0);
-				drawpic(num_pos + '108 -3 0', "gfx/hud/sb_armor", '20 20 0', '1 1 1', sbar_alpha_fg * armor / armorideal, 0);
+				drawpic(num_pos + '78 -4.5 0', "gfx/hud/sb_health", '32 32 0', '1 1 1', sbar_alpha_fg, DRAWFLAG_NORMAL);
+				drawpic(num_pos + '108 -4.5 0', "gfx/hud/sb_armor", '20 20 0', '1 1 1', sbar_alpha_fg * armor / v_y, DRAWFLAG_NORMAL);
 			}
 			else
 			{
-				x = floor(healthdamage + 1);
-				drawpic(num_pos + '108 -3 0', "gfx/hud/sb_health", '20 20 0', '1 1 1', sbar_alpha_fg * armorideal / armor, 0);
-				drawpic(num_pos + '78 -3 0', "gfx/hud/sb_armor", '32 32 0', '1 1 1', sbar_alpha_fg, 0);
+				drawpic(num_pos + '108 -4.5 0', "gfx/hud/sb_health", '20 20 0', '1 1 1', sbar_alpha_fg * v_y / armor, DRAWFLAG_NORMAL);
+				drawpic(num_pos + '78 -4.5 0', "gfx/hud/sb_armor", '32 32 0', '1 1 1', sbar_alpha_fg, DRAWFLAG_NORMAL);
 			}
 			Sbar_DrawXNum_Colored(num_pos, x, 24, sbar_alpha_fg); // draw the combined health and armor
 		}
@@ -2309,20 +2387,19 @@
 			vector health_pos, armor_pos;
 
 			if (sbar_hudselector == 0) { // old style layout with armor left of health
-				health_pos = bottom - element_offset - '0 24 0' + '14 0 0';
-				armor_pos = bottom - element_offset - '0 24 0' + '-96 0 0';
+				health_pos = bottom - element_offset - '0 22 0' + '14 0 0';
+				armor_pos = bottom - element_offset - '0 22 0' + '-96 0 0';
 			}
-
 			else {
-				health_pos = bottom - element_offset - '0 24 0' + '-96 0 0';
-				armor_pos = bottom - element_offset - '0 24 0' + '14 0 0';
+				health_pos = bottom - element_offset - '0 22 0' + '-96 0 0';
+				armor_pos = bottom - element_offset - '0 22 0' + '14 0 0';
 			}
 
 			// armor
 			x = armor;
 			if (x > 0)
 			{
-				drawpic(armor_pos + '78 -3 0', "gfx/hud/sb_armor", '32 32 0', '1 1 1', (x+10)/55 * sbar_alpha_fg, 0);
+				drawpic(armor_pos + '78 -4.5 0', "gfx/hud/sb_armor", '32 32 0', '1 1 1', (x+10)/55 * sbar_alpha_fg, DRAWFLAG_NORMAL);
 				if (x > 45)
 					Sbar_DrawXNum_Colored(armor_pos, x, 24, sbar_alpha_fg);
 				else
@@ -2331,7 +2408,7 @@
 
 			// health
 			x = health;
-			drawpic(health_pos + '78 -3 0', "gfx/hud/sb_health", '32 32 0', '1 1 1', sbar_alpha_fg, 0);
+			drawpic(health_pos + '78 -4.5 0', "gfx/hud/sb_health", '32 32 0', '1 1 1', sbar_alpha_fg, DRAWFLAG_NORMAL);
 			Sbar_DrawXNum_Colored(health_pos, x, 24, sbar_alpha_fg);
 		}
 
@@ -2361,35 +2438,28 @@
 				pos = '0 0 0';
 				if (stat_items & GetAmmoItemCode(i))
 				{
-					if(cvar("vid_conwidth") >= 800)
-					{
+					if(vid_conwidth >= 800) {
 						pos_x = 170;
 						pos_y = -40;
-						drawpic(bottomleft + pos + '0 1.5 0', "gfx/hud/sb_ammobg", '107 29 0', '1 1 1', sbar_alpha_fg, 0);
-						drawpic(bottomleft + pos + '76 3 0', GetAmmoPicture(i), '24 24 0', '1 1 1', sbar_alpha_fg, 0);
-						if(a > 10)
-							Sbar_DrawXNum(bottomleft + pos + '5 4 0', a, 3, 24, '0.6 0.7 0.8', 0, 1, 0);
-						else
-							Sbar_DrawXNum(bottomleft + pos + '5 4 0', a, 3, 24, '0.7 0 0', 0, 1, 0);
 					}
-					else
-					{
+					else {
 						pos_x = vid_conwidth - 110;
 						pos_y = -128;
-						drawpic(bottomleft + pos + '0 1.5 0', "gfx/hud/sb_ammobg", '107 29 0', '1 1 1', sbar_alpha_fg, 0);
-						drawpic(bottomleft + pos + '76 3 0', GetAmmoPicture(i), '24 24 0', '1 1 1', sbar_alpha_fg, 0);
-						if(a > 10)
-							Sbar_DrawXNum(bottomleft + pos + '5 4 0', a, 3, 24, '0.6 0.7 0.8', 0, 1, 0);
-						else
-							Sbar_DrawXNum(bottomleft + pos + '5 4 0', a, 3, 24, '0.7 0 0', 0, 1, 0);
 					}
+					
+					drawpic(bottomleft + pos + '0 1.5 0', "gfx/hud/sb_ammobg", '107 29 0', '1 1 1', sbar_alpha_fg, DRAWFLAG_NORMAL);
+					drawpic(bottomleft + pos + '76 3 0', GetAmmoPicture(i), '24 24 0', '1 1 1', sbar_alpha_fg, DRAWFLAG_NORMAL);
+					if(a < 10)
+						Sbar_DrawXNum(bottomleft + pos + '5 5 0', a, 3, 24, '0.7 0 0', 0, 0, sbar_alpha_fg, DRAWFLAG_NORMAL);
+					else
+						Sbar_DrawXNum(bottomleft + pos + '5 5 0', a, 3, 24, '1 1 1', 0, 0, sbar_alpha_fg, DRAWFLAG_NORMAL);
 				}
 			}
 			else
 			{
 				if (a > 0) {
 					pos = '0 0 0';
-					if (cvar("vid_conwidth") >= 800)
+					if (vid_conwidth >= 800)
 						switch (i) {
 							case 0: pos_x = 114; pos_y = -48; break; // shells
 							case 1: pos_x = 114; pos_y = -26; break; // bullets
@@ -2405,12 +2475,19 @@
 						}
 
 					if (stat_items & GetAmmoItemCode(i))
-						drawpic(bottomleft + pos + '0 1.5 0', "gfx/hud/sb_ammobg", '80 22 0', '1 1 1', sbar_alpha_fg, 0);
-					drawpic(bottomleft + pos + '56 3 0', GetAmmoPicture(i), '18 18 0', '1 1 1', sbar_alpha_fg, 0);
-					if (a > 10)
-						Sbar_DrawXNum(bottomleft + pos + '6 4 0', a, 3, 16, '0.6 0.7 0.8', 0, 1, 0);
-					else
-						Sbar_DrawXNum(bottomleft + pos + '6 4 0', a, 3, 16, '0.7 0 0', 0, 1, 0);
+						drawpic(bottomleft + pos + '0 1.5 0', "gfx/hud/sb_ammobg", '80 22 0', '1 1 1', sbar_alpha_fg, DRAWFLAG_NORMAL);
+					drawpic(bottomleft + pos + '56 3 0', GetAmmoPicture(i), '18 18 0', '1 1 1', sbar_alpha_fg, DRAWFLAG_NORMAL);
+					if (a < 10) {
+						if(stat_items & GetAmmoItemCode(i))
+							Sbar_DrawXNum(bottomleft + pos + '6 4.5 0', a, 3, 16, '0.7 0 0', 0, 0, sbar_alpha_fg, DRAWFLAG_NORMAL);
+						else
+							Sbar_DrawXNum(bottomleft + pos + '6 4.5 0', a, 3, 16, '0.7 0 0', 0, 0, sbar_alpha_fg * 0.7, DRAWFLAG_NORMAL);
+					} else {
+						if(stat_items & GetAmmoItemCode(i))
+							Sbar_DrawXNum(bottomleft + pos + '6 4.5 0', a, 3, 16, '1 1 1', 0, 0, sbar_alpha_fg, DRAWFLAG_NORMAL);
+						else
+							Sbar_DrawXNum(bottomleft + pos + '6 4.5 0', a, 3, 16, '0.7 0.7 0.7', 0, 0, sbar_alpha_fg * 0.7, DRAWFLAG_NORMAL);
+					}
 				}
 			}
 		}
@@ -2430,11 +2507,11 @@
 				pos_x = bottom_x + 140;
 				pos_y = bottom_y - 22;
 			}
-			drawpic(pos - '0 2 0' + '52 0 0', GetAmmoPicture(4), '20 20 0', '1 1 1', sbar_alpha_fg, 0);
+			drawpic(pos - '0 2 0' + '52 0 0', GetAmmoPicture(4), '20 20 0', '1 1 1', sbar_alpha_fg, DRAWFLAG_NORMAL);
 			if (a > 10)
-				Sbar_DrawXNum(pos, a, 3, 16, '0.6 0.7 0.8', 0, 1, 0);
+				Sbar_DrawXNum(pos, a, 3, 16, '1 1 1', 0, 0, 1, DRAWFLAG_NORMAL);
 			else
-				Sbar_DrawXNum(pos, a, 3, 16, '0.7 0 0', 0, 1, 0);
+				Sbar_DrawXNum(pos, a, 3, 16, '0.7 0 0', 0, 0, 1, DRAWFLAG_NORMAL);
 		}
 
 		// draw scores and timer
@@ -2473,12 +2550,12 @@
 
 	if (myteam == COLOR_TEAM1) { // always draw own flag on left
 		redflag_pos = bottomleft - element_offset - '-4 36 0';
-		blueflag_pos = bottomleft - element_offset - '-72 36 0';
+		blueflag_pos = bottomleft - element_offset - '-68 36 0';
 	}
 	
 	else {
 		blueflag_pos = bottomleft - element_offset - '-4 36 0';
-		redflag_pos = bottomleft - element_offset - '-72 36 0';
+		redflag_pos = bottomleft - element_offset - '-68 36 0';
 	}
 	
 	switch(redflag)
@@ -2494,9 +2571,9 @@
 
 	switch(blueflag)
 	{
-	case 1: drawpic(blueflag_pos, "gfx/hud/sb_flag_blue_taken", '48 48 0', '1 1 1', sbar_alpha_fg, 0); break;
-	case 2: drawpic(blueflag_pos, "gfx/hud/sb_flag_blue_lost", '48 48 0', '1 1 1', sbar_alpha_fg, 0); break;
-	case 3: drawpic(blueflag_pos, "gfx/hud/sb_flag_blue_carrying", '48 48 0', '1 1 1', sbar_alpha_fg, 0); break;
+	case 1: drawpic(blueflag_pos, "gfx/hud/sb_flag_blue_taken", '48 48 0', '1 1 1', sbar_alpha_fg, DRAWFLAG_NORMAL); break;
+	case 2: drawpic(blueflag_pos, "gfx/hud/sb_flag_blue_lost", '48 48 0', '1 1 1', sbar_alpha_fg, DRAWFLAG_NORMAL); break;
+	case 3: drawpic(blueflag_pos, "gfx/hud/sb_flag_blue_carrying", '48 48 0', '1 1 1', sbar_alpha_fg, DRAWFLAG_NORMAL); break;
 	default:
 		if(stat_items & IT_CTF_SHIELDED)
 			if(myteam == COLOR_TEAM1)
@@ -2538,29 +2615,29 @@
 	kh_size = '22 35 0';
 
 	if (kh_keys_status & 1)  // red
-		drawpic (red_pos, "gfx/hud/sb_kh_red", kh_size, '1 1 1', 0.3, 0);  // show 30% alpha key
+		drawpic (red_pos, "gfx/hud/sb_kh_red", kh_size, '1 1 1', 0.3, DRAWFLAG_NORMAL);  // show 30% alpha key
 	if (kh_keys & 1)
-		drawpic (red_pos, "gfx/hud/sb_kh_red", kh_size, '1 1 1', 1.0, 0);  // show solid key 100% alpha
+		drawpic (red_pos, "gfx/hud/sb_kh_red", kh_size, '1 1 1', 1.0, DRAWFLAG_NORMAL);  // show solid key 100% alpha
 
 	if (kh_keys_status & 2)  // blue
-		drawpic (blue_pos, "gfx/hud/sb_kh_blue", kh_size, '1 1 1', 0.3, 0);
+		drawpic (blue_pos, "gfx/hud/sb_kh_blue", kh_size, '1 1 1', 0.3, DRAWFLAG_NORMAL);
 	if (kh_keys & 2)
-		drawpic (blue_pos, "gfx/hud/sb_kh_blue", kh_size, '1 1 1', 1.0, 0);
+		drawpic (blue_pos, "gfx/hud/sb_kh_blue", kh_size, '1 1 1', 1.0, DRAWFLAG_NORMAL);
 
 	if (kh_teams_set & 4)  // yellow
 	{
 		if (kh_keys_status & 4)
-			drawpic (yellow_pos, "gfx/hud/sb_kh_yellow", kh_size, '1 1 1', 0.3, 0);
+			drawpic (yellow_pos, "gfx/hud/sb_kh_yellow", kh_size, '1 1 1', 0.3, DRAWFLAG_NORMAL);
 		if (kh_keys & 4)
-			drawpic (yellow_pos, "gfx/hud/sb_kh_yellow", kh_size, '1 1 1', 1.0, 0);
+			drawpic (yellow_pos, "gfx/hud/sb_kh_yellow", kh_size, '1 1 1', 1.0, DRAWFLAG_NORMAL);
 	}
 
 	if (kh_teams_set & 8)  // pink
 	{
 		if (kh_keys_status & 8)
-			drawpic (pink_pos, "gfx/hud/sb_kh_pink", kh_size, '1 1 1', 0.3, 0);
+			drawpic (pink_pos, "gfx/hud/sb_kh_pink", kh_size, '1 1 1', 0.3, DRAWFLAG_NORMAL);
 		if (kh_keys & 8)
-			drawpic (pink_pos, "gfx/hud/sb_kh_pink", kh_size, '1 1 1', 1.0, 0);
+			drawpic (pink_pos, "gfx/hud/sb_kh_pink", kh_size, '1 1 1', 1.0, DRAWFLAG_NORMAL);
 	}
 }
 


Property changes on: branches/nexuiz-2.0/data/qcsrc/client/sbar.qc
___________________________________________________________________
Name: svn:eol-style
   + native


Property changes on: branches/nexuiz-2.0/data/qcsrc/client/sortlist.qc
___________________________________________________________________
Name: svn:eol-style
   + native


Property changes on: branches/nexuiz-2.0/data/qcsrc/client/teamplay.qc
___________________________________________________________________
Name: svn:eol-style
   + native


Property changes on: branches/nexuiz-2.0/data/qcsrc/client/teamradar.qc
___________________________________________________________________
Name: svn:eol-style
   + native


Property changes on: branches/nexuiz-2.0/data/qcsrc/client/teamradar.qh
___________________________________________________________________
Name: svn:eol-style
   + native


Property changes on: branches/nexuiz-2.0/data/qcsrc/client/wall.qc
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: branches/nexuiz-2.0/data/qcsrc/client/waypointsprites.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/client/waypointsprites.qc	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/qcsrc/client/waypointsprites.qc	2009-07-11 14:59:28 UTC (rev 7191)
@@ -18,9 +18,12 @@
 .float hideflags;
 .float spawntime;
 .float health;
+.float build_started;
+.float build_starthealth;
+.float build_finished;
 
-vector SPRITE_SIZE = '256 32 0';
-vector SPRITE_HOTSPOT = '128 32 0';
+vector SPRITE_SIZE = '288 36 0';
+vector SPRITE_HOTSPOT = '144 36 0';
 float SPRITE_HEALTHBAR_WIDTH = 96;
 float SPRITE_HEALTHBAR_HEIGHT = 6;
 float SPRITE_HEALTHBAR_MARGIN = 4;
@@ -66,7 +69,7 @@
 	R_EndPolygon();
 }
 
-void drawhealthbar(vector org, float rot, float h, vector sz, vector hotspot, float width, float height, float margin, float border, vector rgb, float a, vector hrgb, float ha, float f)
+void drawhealthbar(vector org, float rot, float h, vector sz, vector hotspot, float width, float height, float margin, float border, float align, vector rgb, float a, vector hrgb, float ha, float f)
 {
 	vector o, ri, up;
 	float owidth; // outer width
@@ -86,11 +89,11 @@
 	owidth = width + 2 * border;
 	o = o - up * (margin + border + height) + ri * (sz_x - owidth) * 0.5;
 
-	drawquad(o - up * border,            ri * owidth,    up * border, "", rgb,  a,  f);
-	drawquad(o + up * height,            ri * owidth,    up * border, "", rgb,  a,  f);
-	drawquad(o,                          ri * border,    up * height, "", rgb,  a,  f);
-	drawquad(o + ri * (owidth - border), ri * border,    up * height, "", rgb,  a,  f);
-	drawquad(o + ri * border,            ri * width * h, up * height, "", hrgb, ha, f);
+	drawquad(o - up * border,                               ri * owidth,    up * border, "", rgb,  a,  f);
+	drawquad(o + up * height,                               ri * owidth,    up * border, "", rgb,  a,  f);
+	drawquad(o,                                             ri * border,    up * height, "", rgb,  a,  f);
+	drawquad(o + ri * (owidth - border),                    ri * border,    up * height, "", rgb,  a,  f);
+	drawquad(o + ri * (border + align * ((1 - h) * width)), ri * width * h, up * height, "", hrgb, ha, f);
 }
 
 void Draw_WaypointSprite()
@@ -236,9 +239,29 @@
 
 	drawrotpic(o, rot * 90 * DEG2RAD, spriteimage, SPRITE_SIZE * waypointsprite_scale * vidscale, SPRITE_HOTSPOT * waypointsprite_scale * vidscale, '1 1 1', a, DRAWFLAG_MIPMAP);
 
+	if(self.build_finished)
+	{
+		if(time < self.build_finished + 0.25)
+		{
+			if(time < self.build_started)
+				self.health = self.build_starthealth;
+			else if(time < self.build_finished)
+				self.health = (time - self.build_started) / (self.build_finished - self.build_started) * (1 - self.build_starthealth) + self.build_starthealth;
+			else
+				self.health = 1;
+		}
+		else
+			self.health = -1;
+	}
+
 	if(self.health >= 0)
 	{
-		drawhealthbar(o, rot * 90 * DEG2RAD, self.health, SPRITE_SIZE * waypointsprite_scale * vidscale, SPRITE_HOTSPOT * waypointsprite_scale * vidscale, SPRITE_HEALTHBAR_WIDTH, SPRITE_HEALTHBAR_HEIGHT, SPRITE_HEALTHBAR_MARGIN, SPRITE_HEALTHBAR_BORDER, self.teamradar_color, a * SPRITE_HEALTHBAR_BORDERALPHA, self.teamradar_color, a * SPRITE_HEALTHBAR_HEALTHALPHA, DRAWFLAG_NORMAL);
+		float align;
+		if(self.build_finished)
+			align = 0.5;
+		else
+			align = 0;
+		drawhealthbar(o, rot * 90 * DEG2RAD, self.health, SPRITE_SIZE * waypointsprite_scale * vidscale, SPRITE_HOTSPOT * waypointsprite_scale * vidscale, SPRITE_HEALTHBAR_WIDTH, SPRITE_HEALTHBAR_HEIGHT, SPRITE_HEALTHBAR_MARGIN, SPRITE_HEALTHBAR_BORDER, align, self.teamradar_color, a * SPRITE_HEALTHBAR_BORDERALPHA, self.teamradar_color, a * SPRITE_HEALTHBAR_HEALTHALPHA, DRAWFLAG_NORMAL);
 	}
 }
 
@@ -254,7 +277,7 @@
 
 void Ent_WaypointSprite()
 {
-	float sendflags, f;
+	float sendflags, f, t;
 	sendflags = ReadByte();
 
 	if(!self.spawntime)
@@ -265,9 +288,30 @@
 	InterpolateOrigin_Undo();
 
 	if(sendflags & 0x80)
-		self.health = ReadByte() / 255.0;
+	{
+		t = ReadByte();
+		if(t < 192)
+		{
+			self.health = t / 191.0;
+			self.build_finished = 0;
+		}
+		else
+		{
+			t = (t - 192) * 256 + ReadByte();
+			self.build_started = servertime;
+			if(self.build_finished)
+				self.build_starthealth = bound(0, self.health, 1);
+			else
+				self.build_starthealth = 0;
+			self.build_finished = servertime + t / 32;
+			//print("build: ", ftos(self.build_finished - self.build_started), "\n");
+		}
+	}
 	else
+	{
 		self.health = -1;
+		self.build_finished = 0;
+	}
 
 	if(sendflags & 64)
 	{


Property changes on: branches/nexuiz-2.0/data/qcsrc/client/waypointsprites.qc
___________________________________________________________________
Name: svn:eol-style
   + native


Property changes on: branches/nexuiz-2.0/data/qcsrc/client/waypointsprites.qh
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: branches/nexuiz-2.0/data/qcsrc/common/constants.qh
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/common/constants.qh	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/qcsrc/common/constants.qh	2009-07-11 14:59:28 UTC (rev 7191)
@@ -56,6 +56,8 @@
 const float RACE_NET_CHECKPOINT_HIT_RACE = 3; // byte checkpoint, short delta, byte lapsdelta, string opponent
 const float RACE_NET_CHECKPOINT_HIT_RACE_BY_OPPONENT = 4; // byte checkpoint, short delta, byte lapsdelta, string opponent
 const float RACE_NET_CHECKPOINT_NEXT_SPEC_QUALIFYING = 5; // byte nextcheckpoint, float laptime, short recordtime, string recordholder
+const float RACE_NET_PENALTY_RACE = 6; // byte penaltytime, string reason
+const float RACE_NET_PENALTY_QUALIFYING = 7; // byte penaltytime, string reason
 
 const float ENT_CLIENT = 0;
 const float ENT_CLIENT_DEAD = 1;
@@ -77,9 +79,9 @@
 const float ENT_CLIENT_MAPVOTE = 17;
 const float ENT_CLIENT_CLIENTDATA = 18;
 const float ENT_CLIENT_RANDOMSEED = 19;
-const float ENT_CLIENT_WALL = 20;
-const float ENT_CLIENT_SPIDERBOT = 21;
-
+const float ENT_CLIENT_WALL = 20;
+const float ENT_CLIENT_SPIDERBOT = 21;
+
 const float ENT_CLIENT_TURRET = 40;
 
 const float SPRITERULE_DEFAULT = 0;
@@ -257,28 +259,29 @@
 const float STAT_NB_METERSTART = 45;
 const float STAT_SHOTORG = 46; // compressShotOrigin
 const float STAT_LEADLIMIT = 47;
+const float STAT_BULLETS_LOADED = 48;
 const float CTF_STATE_ATTACK = 1;
 const float CTF_STATE_DEFEND = 2;
 const float CTF_STATE_COMMANDER = 3;
-
-const float STAT_HUD = 50;
-const float HUD_NORMAL = 0;
-const float HUD_SPIDEBOT = 10;
-
-const float STAT_SPIDERBOT_HEALTH  = 60;
-const float STAT_SPIDERBOT_ROCKETS = 61;
-const float STAT_SPIDERBOT_HEAT    = 62;
-const float STAT_SPIDERBOT_RELOAD  = 63;
-const float STAT_SPIDERBOT_ENERGY  = 64;
-const float STAT_SPIDERBOT_SHIELD  = 65;
-
-//const float STAT_SPIDERBOT_AIM     53 // compressShotOrigin
-
-//const float STAT_SPIDERBOT_TARGET  54 // compressShotOrigin
-
-
-
 
+const float STAT_HUD = 50;
+const float HUD_NORMAL = 0;
+const float HUD_SPIDEBOT = 10;
+
+const float STAT_SPIDERBOT_HEALTH  = 60;
+const float STAT_SPIDERBOT_ROCKETS = 61;
+const float STAT_SPIDERBOT_HEAT    = 62;
+const float STAT_SPIDERBOT_RELOAD  = 63;
+const float STAT_SPIDERBOT_ENERGY  = 64;
+const float STAT_SPIDERBOT_SHIELD  = 65;
+
+//const float STAT_SPIDERBOT_AIM     53 // compressShotOrigin
+
+//const float STAT_SPIDERBOT_TARGET  54 // compressShotOrigin
+
+
+
+
 // moved that here so the client knows the max.
 // # of maps, I'll use arrays for them :P
 #define MAPVOTE_COUNT 10


Property changes on: branches/nexuiz-2.0/data/qcsrc/common/constants.qh
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: branches/nexuiz-2.0/data/qcsrc/common/gamecommand.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/common/gamecommand.qc	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/qcsrc/common/gamecommand.qc	2009-07-11 14:59:28 UTC (rev 7191)
@@ -250,11 +250,7 @@
 		else if(argv(1) == "cleanup")
 		{
 			MapInfo_Enumerate();
-			if(cvar("g_maplist_allow_hidden"))
-				i = MAPINFO_FLAG_FORBIDDEN;
-			else
-				i = MAPINFO_FLAG_HIDDEN | MAPINFO_FLAG_FORBIDDEN;
-			MapInfo_FilterGametype(MapInfo_CurrentGametype(), MapInfo_CurrentFeatures(), 0, i, 0);
+			MapInfo_FilterGametype(MapInfo_CurrentGametype(), MapInfo_CurrentFeatures(), MapInfo_RequiredFlags(), MapInfo_ForbiddenFlags(), 0);
 			n = tokenizebyseparator(cvar_string("g_maplist"), " ");
 			s2 = "";
 			for(i = 0; i < n; ++i)


Property changes on: branches/nexuiz-2.0/data/qcsrc/common/items.qc
___________________________________________________________________
Name: svn:eol-style
   + native


Property changes on: branches/nexuiz-2.0/data/qcsrc/common/items.qh
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: branches/nexuiz-2.0/data/qcsrc/common/mapinfo.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/common/mapinfo.qc	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/qcsrc/common/mapinfo.qc	2009-07-11 14:59:28 UTC (rev 7191)
@@ -29,7 +29,38 @@
 		return string_null;
 	return substring(s, o + 1, strlen(s) - (o + 1));
 }
+float matchacl(string acl, string str)
+{
+	string t, s;
+	float r, d;
+	r = 0;
+	while(acl)
+	{
+		t = car(acl); acl = cdr(acl);
+		d = 1;
+		if(substring(t, 0, 1) == "-")
+		{
+			d = -1;
+			t = substring(t, 1, strlen(t) - 1);
+		}
+		else if(substring(t, 0, 1) == "+")
+			t = substring(t, 1, strlen(t) - 1);
+		if(substring(t, -1, 1) == "*")
+		{
+			t = substring(t, 0, strlen(t) - 1);
+			s = substring(s, 0, strlen(t));
+		}
+		else
+			s = str;
 
+		if(s == t)
+		{
+			r = d;
+		}
+	}
+	return r;
+}
+
 float _MapInfo_Cache_Active;
 float _MapInfo_Cache_DB_NameToIndex;
 float _MapInfo_Cache_Buf_IndexToMapData;
@@ -246,6 +277,7 @@
 	float r;
 	float twoBaseModes;
 	float diameter, spawnpoints;
+	float spawnplaces;
 
 	vector mapMins, mapMaxs;
 
@@ -263,8 +295,10 @@
 	print("Analyzing ", fn, " to generate initial mapinfo; please edit that file later\n");
 
 	inWorldspawn = 2;
+	MapInfo_Map_flags = 0;
 	MapInfo_Map_supportedGametypes = 0;
 	spawnpoints = 0;
+	spawnplaces = 0;
 	_MapInfo_Map_worldspawn_music = "";
 
 	for(;;)
@@ -312,6 +346,15 @@
 				mapMaxs_y = max(mapMaxs_y, o_y);
 				mapMaxs_z = max(mapMaxs_z, o_z);
 			}
+			else if(k == "race_place")
+			{
+				if(v == "1")
+					spawnplaces |= 1;
+				else if(v == "2")
+					spawnplaces |= 2;
+				else if(v == "3")
+					spawnplaces |= 4;
+			}
 			else if(k == "classname")
 			{
 				if(v == "dom_controlpoint")
@@ -354,7 +397,7 @@
 	}
 	diameter = vlen(mapMaxs - mapMins);
 
-	twoBaseModes = MapInfo_Map_supportedGametypes & (MAPINFO_TYPE_CTF | MAPINFO_TYPE_ASSAULT | MAPINFO_TYPE_RACE);
+	twoBaseModes = MapInfo_Map_supportedGametypes & (MAPINFO_TYPE_CTF | MAPINFO_TYPE_ASSAULT | MAPINFO_TYPE_RACE | MAPINFO_TYPE_NEXBALL);
 	if(twoBaseModes && (MapInfo_Map_supportedGametypes == twoBaseModes))
 	{
 		// we have a CTF-only or Assault-only map. Don't add other modes then,
@@ -374,6 +417,10 @@
 			MapInfo_Map_supportedGametypes |= MAPINFO_TYPE_KEYHUNT;
 	}
 
+	if(MapInfo_Map_supportedGametypes & MAPINFO_TYPE_RACE)
+		if(spawnplaces != 7)
+			MapInfo_Map_flags |= MAPINFO_FLAG_FRUSTRATING;
+
 	dprint("-> diameter ",    ftos(diameter));
 	dprint(";  spawnpoints ", ftos(spawnpoints));
 	dprint(";  modes ",       ftos(MapInfo_Map_supportedGametypes), "\n");
@@ -477,7 +524,10 @@
 	string s, t;
 	float fh, fh2;
 	float r, f, n, i;
+	string acl;
 
+	acl = cvar_string("g_mapinfo_settemp_acl");
+
 	if(strstrofs(pFilename, "/", 0) >= 0)
 	{
 		print("Invalid character in map name, ignored\n");
@@ -530,10 +580,12 @@
 			}
 			fputs(fh, strcat("cdtrack ", ftos(i + 1), "\n"));
 		}
-		if(MapInfo_Map_supportedFeatures & MAPINFO_FEATURE_WEAPONS)    
+		if(MapInfo_Map_supportedFeatures & MAPINFO_FEATURE_WEAPONS)
 			fputs(fh, "has weapons\n");
 		else
 			fputs(fh, "// uncomment this if you added weapon pickups: has weapons\n");
+		if(MapInfo_Map_flags & MAPINFO_FLAG_FRUSTRATING)
+			fputs(fh, "frustrating\n");
 		if(MapInfo_Map_supportedGametypes & MAPINFO_TYPE_DEATHMATCH)      fputs(fh, "type dm 30 20\n");
 		if(MapInfo_Map_supportedGametypes & MAPINFO_TYPE_TEAM_DEATHMATCH) fputs(fh, "type tdm 50 20 2\n");
 		if(MapInfo_Map_supportedGametypes & MAPINFO_TYPE_DOMINATION)      fputs(fh, "type dom 200 20\n");
@@ -606,6 +658,10 @@
 		{
 			MapInfo_Map_flags |= MAPINFO_FLAG_FORBIDDEN;
 		}
+		else if(t == "frustrating")
+		{
+			MapInfo_Map_flags |= MAPINFO_FLAG_FRUSTRATING;
+		}
 		else if(t == "type")
 		{
 			t = car(s); s = cdr(s);
@@ -658,6 +714,10 @@
 						print("Map ", pFilename, " contains a potentially harmful setting, ignored\n");
 					else if not (cvar_value_issafe(s))
 						print("Map ", pFilename, " contains a potentially harmful setting, ignored\n");
+					else if(substring(t, 0, 10) == "g_mapinfo_")
+						print("Map ", pFilename, " contains a potentially harmful setting, ignored\n");
+					else if(matchacl(acl, t) <= 0)
+						print("Map ", pFilename, " contains a denied setting, ignored\n");
 					else
 					{
 						dprint("Applying temporary setting ", t, " := ", s, "\n");
@@ -950,3 +1010,30 @@
 		_MapInfo_globopen = FALSE;
 	}
 }
+
+float MapInfo_ForbiddenFlags()
+{
+	float f;
+	f = MAPINFO_FLAG_FORBIDDEN;
+
+#ifndef MENUQC
+	if not(cvar("g_maplist_allow_hidden"))
+#endif
+		f |= MAPINFO_FLAG_HIDDEN;
+
+	if not(cvar("g_maplist_allow_frustrating"))
+		f |= MAPINFO_FLAG_FRUSTRATING;
+
+	return f;
+}
+
+float MapInfo_RequiredFlags()
+{
+	float f;
+	f = 0;
+
+	if(cvar("g_maplist_allow_frustrating") > 1)
+		f |= MAPINFO_FLAG_FRUSTRATING;
+
+	return f;
+}

Modified: branches/nexuiz-2.0/data/qcsrc/common/mapinfo.qh
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/common/mapinfo.qh	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/qcsrc/common/mapinfo.qh	2009-07-11 14:59:28 UTC (rev 7191)
@@ -16,6 +16,7 @@
 
 float MAPINFO_FLAG_HIDDEN           = 1; // not in lsmaps/menu/vcall/etc., can just be changed to manually
 float MAPINFO_FLAG_FORBIDDEN        = 2; // don't even allow the map by a cvar setting that allows hidden maps
+float MAPINFO_FLAG_FRUSTRATING      = 4; // this map is near impossible to play, enable at your own risk
 
 float MapInfo_count;
 
@@ -41,6 +42,8 @@
 float MapInfo_FilterGametype(float gametype, float features, float pFlagsRequired, float pFlagsForbidden, float pAbortOnGenerate); // 1 on success, 0 on temporary failure (call it again next frame then; use MapInfo_progress as progress indicator)
 float MapInfo_CurrentFeatures(); // retrieves currently required features from cvars
 float MapInfo_CurrentGametype(); // retrieves current gametype from cvars
+float MapInfo_ForbiddenFlags(); // retrieves current flags from cvars
+float MapInfo_RequiredFlags(); // retrieves current flags from cvars
 
 // load info about the i-th map into the MapInfo_Map_* globals
 float MapInfo_Get_ByID(float i); // 1 on success, 0 on failure


Property changes on: branches/nexuiz-2.0/data/qcsrc/common/util-pre.qh
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: branches/nexuiz-2.0/data/qcsrc/common/util.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/common/util.qc	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/qcsrc/common/util.qc	2009-07-11 14:59:28 UTC (rev 7191)
@@ -1564,3 +1564,33 @@
 	}
 }
 
+vector healtharmor_maxdamage(float h, float a, float armorblock)
+{
+	// NOTE: we'll always choose the SMALLER value...
+	float healthdamage, armordamage, armorideal;
+	vector v;
+	healthdamage = (h - 1) / (1 - armorblock); // damage we can take if we could use more health
+	armordamage = a + (h - 1); // damage we can take if we could use more armor
+	armorideal = healthdamage * armorblock;
+	v_y = armorideal;
+	if(armordamage < healthdamage)
+	{
+		v_x = armordamage;
+		v_z = 1;
+	}
+	else
+	{
+		v_x = healthdamage;
+		v_z = 0;
+	}
+	return v;
+}
+
+vector healtharmor_applydamage(float a, float armorblock, float damage)
+{
+	vector v;
+	v_y = bound(0, damage * armorblock, a); // save
+	v_x = bound(0, damage - v_y, damage); // take
+	v_z = 0;
+	return v;
+}

Modified: branches/nexuiz-2.0/data/qcsrc/common/util.qh
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/common/util.qh	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/qcsrc/common/util.qh	2009-07-11 14:59:28 UTC (rev 7191)
@@ -170,3 +170,6 @@
 string RandomSelection_chosen_string;
 void RandomSelection_Init();
 void RandomSelection_Add(entity e, float f, string s, float weight, float priority);
+
+vector healtharmor_maxdamage(float h, float a, float armorblock); // returns vector: maxdamage, armorideal, 1 if fully armored
+vector healtharmor_applydamage(float a, float armorblock, float damage); // returns vector: take, save, 0


Property changes on: branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/bigbutton.c
___________________________________________________________________
Name: svn:eol-style
   + native


Property changes on: branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/bigcommandbutton.c
___________________________________________________________________
Name: svn:eol-style
   + native


Property changes on: branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/colorpicker.c
___________________________________________________________________
Name: svn:eol-style
   + native


Property changes on: branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/cvarlist.c
___________________________________________________________________
Name: svn:eol-style
   + native


Property changes on: branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/demolist.c
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/dialog_multiplayer_create.c
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/dialog_multiplayer_create.c	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/dialog_multiplayer_create.c	2009-07-11 14:59:28 UTC (rev 7191)
@@ -66,10 +66,11 @@
 		}
 	me.TR(me);
 	me.TR(me);
+		me.mapListBox = makeNexuizMapList();
 		me.TD(me, 1, 3, e = makeNexuizTextLabel(0, "Map list:"));
+			makeCallback(e, me.mapListBox, me.mapListBox.refilterCallback);
 	me.TR(me);
-		me.TD(me, me.rows - 7, 3, e = makeNexuizMapList());
-		me.mapListBox = e;
+		me.TD(me, me.rows - 7, 3, me.mapListBox);
 	me.gotoRC(me, me.rows - 3, 0);
 		me.TDempty(me, 0.5);
 		me.TD(me, 1, 1, e = makeNexuizButton("All", '0 0 0'));


Property changes on: branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/dialog_multiplayer_create_advanced.c
___________________________________________________________________
Name: svn:eol-style
   + native


Property changes on: branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/dialog_multiplayer_demo.c
___________________________________________________________________
Name: svn:eol-style
   + native


Property changes on: branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/dialog_multiplayer_join_serverinfo.c
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/dialog_multiplayer_playersetup.c
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/dialog_multiplayer_playersetup.c	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/dialog_multiplayer_playersetup.c	2009-07-11 14:59:28 UTC (rev 7191)
@@ -139,7 +139,12 @@
 		me.TD(me, 1, 2, e = makeNexuizSlider(0, 1, 0.01, "crosshair_color_blue"));
 		setDependentOR(e, "crosshair_per_weapon", 0, 0, "crosshair_color_override", 1, 1);
 	me.TR(me);
+		me.TD(me, 1, 1, e = makeNexuizTextLabel(0, "Hit test:"));
+		me.TD(me, 1, 2/3, e = makeNexuizRadioButton(1, "crosshair_hittest", "0",    "None"));
+		me.TD(me, 1, 2/3, e = makeNexuizRadioButton(1, "crosshair_hittest", "1",    "TrueAim"));
+		me.TD(me, 1, 2/3, e = makeNexuizRadioButton(1, "crosshair_hittest", "1.25", "Enemies"));
 	me.TR(me);
+	me.TR(me);
 		me.TDempty(me, 0.4);
 		me.TD(me, 1, 2.2, e = makeNexuizButton("Radar, HUD & Waypoints...", '0 0 0'));
 			e.onClick = DialogOpenButton_Click;
@@ -148,9 +153,9 @@
 	me.TR(me);
 	me.TR(me);
 		me.TD(me, 1, 1, e = makeNexuizTextLabel(0, "Force Models:"));
-		me.TD(me, 1, 2/3, e = makeNexuizRadioButton(1, string_null, string_null, "None"));
-		me.TD(me, 1, 2/3, e = makeNexuizRadioButton(1, "cl_forceplayermodelsfromnexuiz", string_null, "Custom"));
-		me.TD(me, 1, 2/3, e = makeNexuizRadioButton(1, "cl_forceplayermodels", string_null, "All"));
+		me.TD(me, 1, 2/3, e = makeNexuizRadioButton(2, string_null, string_null, "None"));
+		me.TD(me, 1, 2/3, e = makeNexuizRadioButton(2, "cl_forceplayermodelsfromnexuiz", string_null, "Custom"));
+		me.TD(me, 1, 2/3, e = makeNexuizRadioButton(2, "cl_forceplayermodels", string_null, "All"));
 
 	me.gotoRC(me, me.rows - 1, 0);
 		me.TD(me, 1, me.columns, makeNexuizCommandButton("Apply immediately", '0 0 0', "color -1 -1;name \"$_cl_name\";sendcvar cl_weaponpriority;sendcvar cl_zoomfactor;sendcvar cl_zoomspeed;sendcvar cl_autoswitch;sendcvar cl_shownames;sendcvar cl_forceplayermodelsfromnexuiz;sendcvar cl_forceplayermodels", COMMANDBUTTON_APPLY));


Property changes on: branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/dialog_multiplayer_playersetup_radar.c
___________________________________________________________________
Name: svn:eol-style
   + native


Property changes on: branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/dialog_multiplayer_playersetup_weapons.c
___________________________________________________________________
Name: svn:eol-style
   + native


Property changes on: branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/dialog_settings_audio.c
___________________________________________________________________
Name: svn:eol-style
   + native


Property changes on: branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/dialog_settings_misc_cvars.c
___________________________________________________________________
Name: svn:eol-style
   + native


Property changes on: branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/dialog_settings_network.c
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/maplist.c
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/maplist.c	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/maplist.c	2009-07-11 14:59:28 UTC (rev 7191)
@@ -7,6 +7,7 @@
 	METHOD(NexuizMapList, clickListBoxItem, void(entity, float, vector))
 	METHOD(NexuizMapList, resizeNotify, void(entity, vector, vector, vector, vector))
 	METHOD(NexuizMapList, refilter, void(entity))
+	METHOD(NexuizMapList, refilterCallback, void(entity, entity))
 	METHOD(NexuizMapList, keyDown, float(entity, float, float, float))
 
 	ATTRIB(NexuizMapList, realFontSize, vector, '0 0 0')
@@ -201,7 +202,7 @@
 	float gt, f;
 	gt = MapInfo_CurrentGametype();
 	f = MapInfo_CurrentFeatures();
-	MapInfo_FilterGametype(gt, f, 0, MAPINFO_FLAG_HIDDEN | MAPINFO_FLAG_FORBIDDEN, 0);
+	MapInfo_FilterGametype(gt, f, MapInfo_RequiredFlags(), MapInfo_ForbiddenFlags(), 0);
 	me.nItems = MapInfo_count;
 	for(i = 0; i < MapInfo_count; ++i)
 		draw_PreloadPicture(strcat("/maps/", MapInfo_BSPName_ByID(i)));
@@ -230,11 +231,16 @@
 	}
 }
 
+void refilterCallbackNexuizMapList(entity me, entity cb)
+{
+	me.refilter(me);
+}
+
 void MapList_All(entity btn, entity me)
 {
 	float i;
 	string s;
-	MapInfo_FilterGametype(MAPINFO_TYPE_ALL, 0, 0, MAPINFO_FLAG_HIDDEN | MAPINFO_FLAG_FORBIDDEN, 0); // all
+	MapInfo_FilterGametype(MAPINFO_TYPE_ALL, 0, 0, MAPINFO_FLAG_FORBIDDEN, 0); // all
 	s = "";
 	for(i = 0; i < MapInfo_count; ++i)
 		s = strcat(s, " ", MapInfo_BSPName_ByID(i));


Property changes on: branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/modbutton.c
___________________________________________________________________
Name: svn:eol-style
   + native


Property changes on: branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/playerlist.c
___________________________________________________________________
Name: svn:eol-style
   + native


Property changes on: branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/skinlist.c
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/util.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/util.qc	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/util.qc	2009-07-11 14:59:28 UTC (rev 7191)
@@ -67,7 +67,6 @@
 	for(i = 0; i < n; ++i)
 		cvar_set(argv(i), s);
 }
-
 void makeMulti(entity e, string otherCvars)
 {
 	e.cvarNames_Multi = otherCvars;
@@ -75,6 +74,22 @@
 	e.saveCvars = saveCvarsMulti;
 }
 
+.void(entity me) saveCvars_Callback;
+.entity saveCvars_Callback_ent;
+.void(entity me, entity cb) saveCvars_Callback_func;
+void saveCvarsCallback(entity me)
+{
+	me.saveCvars_Callback(me);
+	me.saveCvars_Callback_func(me.saveCvars_Callback_ent, me);
+}
+void makeCallback(entity e, entity cbent, void(entity, entity) cbfunc)
+{
+	e.saveCvars_Callback = e.saveCvars;
+	e.saveCvars = saveCvarsCallback;
+	e.saveCvars_Callback_ent = cbent;
+	e.saveCvars_Callback_func = cbfunc;
+}
+
 .void(entity) draw_setDependent;
 .string cvar_setDependent;
 .float cvarMin_setDependent;

Modified: branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/util.qh
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/util.qh	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/util.qh	2009-07-11 14:59:28 UTC (rev 7191)
@@ -3,6 +3,7 @@
 void loadAllCvars(entity root);
 
 void makeMulti(entity me, string otherCvars);
+void makeCallback(entity me, entity cbent, void(entity, entity) cbfunc);
 
 void setDependent(entity e, string theCvarName, float theCvarMin, float theCvarMax);
 void setDependentAND(entity e, string theCvarName, float theCvarMin, float theCvarMax, string theCvar2Name, float theCvar2Min, float theCvar2Max);


Property changes on: branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/weaponslist.c
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: branches/nexuiz-2.0/data/qcsrc/server/bots_scripting.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/bots_scripting.qc	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/qcsrc/server/bots_scripting.qc	2009-07-11 14:59:28 UTC (rev 7191)
@@ -65,8 +65,8 @@
 
 #define MAX_BOT_PLACES 4
 .float bot_places_count;
-.entity bot_places[MAX_BOT_PLACES];
-.string bot_placenames[MAX_BOT_PLACES];
+.entity bot_places[MAX_BOT_PLACES]; FTEQCC_YOU_SUCK_THIS_IS_NOT_UNREFERENCED(bot_places);
+.string bot_placenames[MAX_BOT_PLACES]; FTEQCC_YOU_SUCK_THIS_IS_NOT_UNREFERENCED(bot_placenames);
 entity bot_getplace(string placename)
 {
 	entity e;
@@ -1119,164 +1119,173 @@
 	bot_barriertime = time;
 }
 
-// This function should be (the only) called directly from the bot ai loop
-// It maps commands to functions and deal with complex interactions between commands and execution states
-// NOTE: Of course you need to include your commands here too :)
-float bot_execute_commands()
+float bot_execute_commands_once()
 {
 	local float status, ispressingkey;
 
-	do
-	{
+	if(self.deadflag!=DEAD_NO)
+		return 0;
 
-		if(self.deadflag!=DEAD_NO)
-			return FALSE;
+	// Find command
+	bot_setcurrentcommand();
 
-		// Find command
-		bot_setcurrentcommand();
+	// Keep pressing keys raised by the "presskey" command
+	ispressingkey = !!bot_presskeys();
 
-		// Keep pressing keys raised by the "presskey" command
-		ispressingkey = bot_presskeys();
+	if(bot_cmd==world)
+		return ispressingkey;
 
-		if(bot_cmd==world)
-			return ispressingkey;
-
-		// Ignore all commands except continue when the bot is paused
-		if(self.bot_exec_status & BOT_EXEC_STATUS_PAUSED)
-		if(bot_cmd.bot_cmd_type!=BOT_CMD_CONTINUE)
+	// Ignore all commands except continue when the bot is paused
+	if(self.bot_exec_status & BOT_EXEC_STATUS_PAUSED)
+	if(bot_cmd.bot_cmd_type!=BOT_CMD_CONTINUE)
+	{
+		if(bot_cmd.bot_cmd_type!=BOT_CMD_NULL)
 		{
-			if(bot_cmd.bot_cmd_type!=BOT_CMD_NULL)
-			{
-				bot_command_executed(TRUE);
-				print( "WARNING: Commands are ignored while the bot is paused. Use the command 'continue' instead.\n");
-			}
-			return TRUE;
-		}
-
-		// Handle conditions
-		if not(bot_cmd.bot_cmd_type==BOT_CMD_FI||bot_cmd.bot_cmd_type==BOT_CMD_ELSE)
-		if(self.bot_cmd_condition_status & CMD_CONDITION_TRUE && self.bot_cmd_condition_status & CMD_CONDITION_FALSE_BLOCK)
-		{
 			bot_command_executed(TRUE);
-			continue;
+			print( "WARNING: Commands are ignored while the bot is paused. Use the command 'continue' instead.\n");
 		}
-		else if(self.bot_cmd_condition_status & CMD_CONDITION_FALSE && self.bot_cmd_condition_status & CMD_CONDITION_TRUE_BLOCK)
-		{
-			bot_command_executed(TRUE);
-			continue;
-		}
+		return 1;
+	}
 
-		// Map commands to functions
-		switch(bot_cmd.bot_cmd_type)
-		{
-			case BOT_CMD_NULL:
-				return ispressingkey;
-				break;
-			case BOT_CMD_PAUSE:
-				status = bot_cmd_pause();
-				break;
-			case BOT_CMD_CONTINUE:
-				status = bot_cmd_continue();
-				break;
-			case BOT_CMD_WAIT:
-				status = bot_cmd_wait();
-				break;
-			case BOT_CMD_WAIT_UNTIL:
-				status = bot_cmd_wait_until();
-				break;
-			case BOT_CMD_TURN:
-				status = bot_cmd_turn();
-				break;
-			case BOT_CMD_MOVETO:
-				status = bot_cmd_moveto();
-				break;
-			case BOT_CMD_MOVETOTARGET:
-				status = bot_cmd_movetotarget();
-				break;
-			case BOT_CMD_RESETGOAL:
-				status = bot_cmd_resetgoal();
-				break;
-			case BOT_CMD_CC:
-				status = bot_cmd_cc();
-				break;
-			case BOT_CMD_IF:
-				status = bot_cmd_if();
-				break;
-			case BOT_CMD_ELSE:
-				status = bot_cmd_else();
-				break;
-			case BOT_CMD_FI:
-				status = bot_cmd_fi();
-				break;
-			case BOT_CMD_RESETAIM:
-				status = bot_cmd_resetaim();
-				break;
-			case BOT_CMD_AIM:
-				status = bot_cmd_aim();
-				break;
-			case BOT_CMD_AIMTARGET:
-				status = bot_cmd_aimtarget();
-				break;
-			case BOT_CMD_PRESSKEY:
-				status = bot_cmd_presskey();
-				break;
-			case BOT_CMD_RELEASEKEY:
-				status = bot_cmd_releasekey();
-				break;
-			case BOT_CMD_SELECTWEAPON:
-				status = bot_cmd_select_weapon();
-				break;
-			case BOT_CMD_IMPULSE:
-				status = bot_cmd_impulse();
-				break;
-			case BOT_CMD_BARRIER:
-				status = bot_cmd_barrier();
-				break;
-			case BOT_CMD_CONSOLE:
-				localcmd(strcat(bot_cmd.bot_cmd_parm_string, "\n"));
-				status = CMD_STATUS_FINISHED;
-				break;
-			default:
-				print(strcat("ERROR: Invalid command on queue with id '",ftos(bot_cmd.bot_cmd_type),"'\n"));
-				return FALSE;
-		}
+	// Handle conditions
+	if not(bot_cmd.bot_cmd_type==BOT_CMD_FI||bot_cmd.bot_cmd_type==BOT_CMD_ELSE)
+	if(self.bot_cmd_condition_status & CMD_CONDITION_TRUE && self.bot_cmd_condition_status & CMD_CONDITION_FALSE_BLOCK)
+	{
+		bot_command_executed(TRUE);
+		return -1;
+	}
+	else if(self.bot_cmd_condition_status & CMD_CONDITION_FALSE && self.bot_cmd_condition_status & CMD_CONDITION_TRUE_BLOCK)
+	{
+		bot_command_executed(TRUE);
+		return -1;
+	}
 
-		if (status==CMD_STATUS_ERROR)
-			print(strcat("ERROR: The command '",bot_cmd_string[bot_cmd.bot_cmd_type],"' returned an error status\n"));
+	// Map commands to functions
+	switch(bot_cmd.bot_cmd_type)
+	{
+		case BOT_CMD_NULL:
+			return ispressingkey;
+			break;
+		case BOT_CMD_PAUSE:
+			status = bot_cmd_pause();
+			break;
+		case BOT_CMD_CONTINUE:
+			status = bot_cmd_continue();
+			break;
+		case BOT_CMD_WAIT:
+			status = bot_cmd_wait();
+			break;
+		case BOT_CMD_WAIT_UNTIL:
+			status = bot_cmd_wait_until();
+			break;
+		case BOT_CMD_TURN:
+			status = bot_cmd_turn();
+			break;
+		case BOT_CMD_MOVETO:
+			status = bot_cmd_moveto();
+			break;
+		case BOT_CMD_MOVETOTARGET:
+			status = bot_cmd_movetotarget();
+			break;
+		case BOT_CMD_RESETGOAL:
+			status = bot_cmd_resetgoal();
+			break;
+		case BOT_CMD_CC:
+			status = bot_cmd_cc();
+			break;
+		case BOT_CMD_IF:
+			status = bot_cmd_if();
+			break;
+		case BOT_CMD_ELSE:
+			status = bot_cmd_else();
+			break;
+		case BOT_CMD_FI:
+			status = bot_cmd_fi();
+			break;
+		case BOT_CMD_RESETAIM:
+			status = bot_cmd_resetaim();
+			break;
+		case BOT_CMD_AIM:
+			status = bot_cmd_aim();
+			break;
+		case BOT_CMD_AIMTARGET:
+			status = bot_cmd_aimtarget();
+			break;
+		case BOT_CMD_PRESSKEY:
+			status = bot_cmd_presskey();
+			break;
+		case BOT_CMD_RELEASEKEY:
+			status = bot_cmd_releasekey();
+			break;
+		case BOT_CMD_SELECTWEAPON:
+			status = bot_cmd_select_weapon();
+			break;
+		case BOT_CMD_IMPULSE:
+			status = bot_cmd_impulse();
+			break;
+		case BOT_CMD_BARRIER:
+			status = bot_cmd_barrier();
+			break;
+		case BOT_CMD_CONSOLE:
+			localcmd(strcat(bot_cmd.bot_cmd_parm_string, "\n"));
+			status = CMD_STATUS_FINISHED;
+			break;
+		default:
+			print(strcat("ERROR: Invalid command on queue with id '",ftos(bot_cmd.bot_cmd_type),"'\n"));
+			return 0;
+	}
 
-		// Move execution pointer
-		if(status==CMD_STATUS_EXECUTING)
+	if (status==CMD_STATUS_ERROR)
+		print(strcat("ERROR: The command '",bot_cmd_string[bot_cmd.bot_cmd_type],"' returned an error status\n"));
+
+	// Move execution pointer
+	if(status==CMD_STATUS_EXECUTING)
+	{
+		return 1;
+	}
+	else
+	{
+		if(cvar("g_debug_bot_commands"))
 		{
-			return TRUE;
-		}
-		else
-		{
-			if(cvar("g_debug_bot_commands"))
+			local string parms;
+
+			switch(bot_cmd_parm_type[bot_cmd.bot_cmd_type])
 			{
-				local string parms;
-
-				switch(bot_cmd_parm_type[bot_cmd.bot_cmd_type])
-				{
-					case BOT_CMD_PARAMETER_FLOAT:
-						parms = ftos(bot_cmd.bot_cmd_parm_float);
-						break;
-					case BOT_CMD_PARAMETER_STRING:
-						parms = bot_cmd.bot_cmd_parm_string;
-						break;
-					case BOT_CMD_PARAMETER_VECTOR:
-						parms = vtos(bot_cmd.bot_cmd_parm_vector);
-						break;
-					default:
-						parms = "";
-						break;
-				}
-				clientcommand(self,strcat("say ^7", bot_cmd_string[bot_cmd.bot_cmd_type]," ",parms,"\n"));
+				case BOT_CMD_PARAMETER_FLOAT:
+					parms = ftos(bot_cmd.bot_cmd_parm_float);
+					break;
+				case BOT_CMD_PARAMETER_STRING:
+					parms = bot_cmd.bot_cmd_parm_string;
+					break;
+				case BOT_CMD_PARAMETER_VECTOR:
+					parms = vtos(bot_cmd.bot_cmd_parm_vector);
+					break;
+				default:
+					parms = "";
+					break;
 			}
-
-			bot_command_executed(TRUE);
+			clientcommand(self,strcat("say ^7", bot_cmd_string[bot_cmd.bot_cmd_type]," ",parms,"\n"));
 		}
 
-	} while(status==CMD_STATUS_FINISHED);
+		bot_command_executed(TRUE);
+	}
 
-	return status;
+	if(status == CMD_STATUS_FINISHED)
+		return -1;
+
+	return CMD_STATUS_ERROR;
 }
+
+// This function should be (the only) called directly from the bot ai loop
+// It maps commands to functions and deal with complex interactions between commands and execution states
+// NOTE: Of course you need to include your commands here too :)
+float bot_execute_commands()
+{
+	float f;
+	do
+	{
+		f = bot_execute_commands_once();
+	}
+	while(f < 0);
+	return f;
+}


Property changes on: branches/nexuiz-2.0/data/qcsrc/server/bots_scripting.qc
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: branches/nexuiz-2.0/data/qcsrc/server/cl_client.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/cl_client.qc	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/qcsrc/server/cl_client.qc	2009-07-11 14:59:28 UTC (rev 7191)
@@ -369,18 +369,16 @@
 		return FallbackPlayerModel;
 	else if(cvar("sv_servermodelsonly"))
 	{
-		if(substring(plyermodel,strlen(plyermodel)-4,4) != ".zym")
-		if(substring(plyermodel,strlen(plyermodel)-4,4) != ".dpm")
-		if(substring(plyermodel,strlen(plyermodel)-4,4) != ".md3")
-		if(substring(plyermodel,strlen(plyermodel)-4,4) != ".psk")
+		if(substring(plyermodel,-4,4) != ".zym")
+		if(substring(plyermodel,-4,4) != ".dpm")
+		if(substring(plyermodel,-4,4) != ".md3")
+		if(substring(plyermodel,-4,4) != ".psk")
 			return FallbackPlayerModel;
-#ifdef ALLOW_VARIABLE_LOD
 		// forbid the LOD models
-		if(substring(plyermodel, strlen(plyermodel)-6,2) == "_1")
+		if(substring(plyermodel, -9,5) == "_lod1")
 			return FallbackPlayerModel;
-		if(substring(plyermodel, strlen(plyermodel)-6,2) == "_2")
+		if(substring(plyermodel, -9,5) == "_lod2")
 			return FallbackPlayerModel;
-#endif
 		if(plyermodel != strtolower(plyermodel))
 			return FallbackPlayerModel;
 		if(!fexists(plyermodel))
@@ -396,21 +394,36 @@
 LOD reduction
 =============
 */
+void Client_uncustomizeentityforclient()
+{
+	if(self.modelindex == 0) // no need to uncustomize then
+		return;
+	self.modelindex = self.modelindex_lod0;
+	self.skin = self.skinindex;
+}
+
 float Client_customizeentityforclient()
 {
 	entity modelsource;
-
+	
 	if(self.modelindex == 0)
 		return TRUE;
 
+	// forcemodel stuff
+
+#ifdef PROFILING
+	float t0;
+	t0 = gettime(GETTIME_HIRES); // reference
+#endif
+
 	modelsource = self;
 	if(other.cvar_cl_forceplayermodelsfromnexuiz)
 		if not(self.modelindex_lod0_from_nexuiz)
 			modelsource = other;
 	if(other.cvar_cl_forceplayermodels && sv_clforceplayermodels)
 		modelsource = other;
-
 	self.skin = modelsource.skinindex;
+
 #if 0
 	if(modelsource == self)
 		self.skin = modelsource.skinindex;
@@ -418,15 +431,11 @@
 		self.skin = mod(modelsource.skinindex, 3); // forbid the fbskins as forced skins
 #endif
 
-#ifdef ALLOW_VARIABLE_LOD
 	// self: me
 	// other: the player viewing me
 	float distance;
 	float f;
 
-	if(self.classname != "player")
-		return TRUE;
-
 	if(other.cvar_cl_playerdetailreduction <= 0)
 	{
 		if(other.cvar_cl_playerdetailreduction <= -2)
@@ -440,15 +449,18 @@
 	{
 		distance = vlen(self.origin - other.origin);
 		f = (distance + 100.0) * other.cvar_cl_playerdetailreduction;
-		if(f > 10000)
+		if(f > sv_loddistance2)
 			self.modelindex = modelsource.modelindex_lod2;
-		else if(f > 5000)
+		else if(f > sv_loddistance1)
 			self.modelindex = modelsource.modelindex_lod1;
 		else
 			self.modelindex = modelsource.modelindex_lod0;
 	}
-#else
-	self.modelindex = modelsource.modelindex_lod0;
+
+#ifdef PROFILING
+	float t1;
+	t1 = gettime(GETTIME_HIRES); // reference
+	client_cefc_accumulator += (t1 - t0);
 #endif
 
 	return TRUE;
@@ -457,47 +469,47 @@
 void UpdatePlayerSounds();
 void setmodel_lod(entity e, string modelname)
 {
-#ifdef ALLOW_VARIABLE_LOD
 	string s;
 
-	// FIXME: this only supports 3-letter extensions
-	s = strcat(substring(modelname, 0, strlen(modelname) - 4), "_1", substring(modelname, 0, strlen(modelname) - 4));
-	if(fexists(s))
+	if(sv_loddistance1)
 	{
-		precache_model(s);
-		setmodel(e, s); // players have high precision
-		self.modelindex_lod1 = self.modelindex;
+		// FIXME: this only supports 3-letter extensions
+		s = strcat(substring(modelname, 0, strlen(modelname)-4), "_lod1", substring(modelname, -4, 4));
+		if(fexists(s))
+		{
+			setmodel(e, s); // players have high precision
+			self.modelindex_lod1 = self.modelindex;
+		}
+		else
+			self.modelindex_lod1 = -1;
+
+		s = strcat(substring(modelname, 0, strlen(modelname)-4), "_lod2", substring(modelname, -4, 4));
+		if(fexists(s))
+		{
+			setmodel(e, s); // players have high precision
+			self.modelindex_lod2 = self.modelindex;
+		}
+		else
+			self.modelindex_lod2 = -1;
+
+		precache_model(modelname);
+		setmodel(e, modelname); // players have high precision
+		self.modelindex_lod0 = self.modelindex;
+
+		if(self.modelindex_lod1 < 0)
+			self.modelindex_lod1 = self.modelindex;
+
+		if(self.modelindex_lod2 < 0)
+			self.modelindex_lod2 = self.modelindex;
 	}
 	else
-		self.modelindex_lod1 = -1;
-
-	s = strcat(substring(modelname, 0, strlen(modelname) - 4), "_2", substring(modelname, 0, strlen(modelname) - 4));
-	if(fexists(s))
 	{
-		precache_model(s);
-		setmodel(e, s); // players have high precision
-		self.modelindex_lod2 = self.modelindex;
+		precache_model(modelname);
+		setmodel(e, modelname); // players have high precision
+		self.modelindex_lod0 = self.modelindex;
+			// save it for possible player model forcing
 	}
-	else
-		self.modelindex_lod2 = -1;
 
-	precache_model(modelname);
-	setmodel(e, modelname); // players have high precision
-	self.modelindex_lod0 = self.modelindex;
-
-	if(self.modelindex_lod1 < 0)
-		self.modelindex_lod1 = self.modelindex;
-
-	if(self.modelindex_lod2 < 0)
-		self.modelindex_lod2 = self.modelindex;
-#else
-	precache_model(modelname);
-	setmodel(e, modelname); // players have high precision
-	self.modelindex_lod0 = self.modelindex;
-		// save it for possible player model forcing
-#endif
-
-	string s;
 	s = whichpack(self.model);
 	self.modelindex_lod0_from_nexuiz = ((s == "") || (substring(s, 0, 4) == "data"));
 
@@ -512,6 +524,7 @@
 putting a client as observer in the server
 =============
 */
+void FixPlayermodel();
 void PutObserverInServer (void)
 {
 	entity	spot;
@@ -602,6 +615,8 @@
 	self.items = 0;
 	self.weapons = 0;
 	self.model = "";
+	FixPlayermodel();
+	self.model = "";
 	self.modelindex = 0;
 	self.weapon = 0;
 	self.weaponmodel = "";
@@ -613,8 +628,10 @@
 	self.punchangle = '0 0 0';
 	self.punchvector = '0 0 0';
 	self.oldvelocity = self.velocity;
-	self.customizeentityforclient = Client_customizeentityforclient;
 
+	if(sv_loddistance1)
+		SetCustomizer(self, Client_customizeentityforclient, Client_uncustomizeentityforclient);
+
 	self.team = -1;
 
 	if(g_arena)
@@ -782,7 +799,7 @@
 		}
 
 		RemoveGrapplingHook(self); // Wazat's Grappling Hook
-		self.campingrifle_bulletcounter = 0;
+		self.campingrifle_bulletcounter = cvar("g_balance_campingrifle_magazinecapacity");
 
 		self.classname = "player";
 		self.wasplayer = TRUE;
@@ -885,7 +902,8 @@
 			WriteByte(MSG_ONE, TE_CSQC_SPAWN);
 		});
 
-		self.customizeentityforclient = Client_customizeentityforclient;
+		if(sv_loddistance1)
+			SetCustomizer(self, Client_customizeentityforclient, Client_uncustomizeentityforclient);
 
 		self.model = "";
 		FixPlayermodel();
@@ -1787,22 +1805,60 @@
 		self.effects = self.effects | (EF_ADDITIVE | EF_FULLBRIGHT);
 }
 
-float CalcRegen(float current, float stable, float regenfactor)
+float CalcRegen(float current, float stable, float regenfactor, float regenframetime)
 {
 	if(current > stable)
 		return current;
 	else if(current > stable - 0.25) // when close enough, "snap"
 		return stable;
 	else
-		return min(stable, current + (stable - current) * regenfactor * frametime);
+		return min(stable, current + (stable - current) * regenfactor * regenframetime);
 }
 
+float CalcRot(float current, float stable, float rotfactor, float rotframetime)
+{
+	if(current < stable)
+		return current;
+	else if(current < stable + 0.25) // when close enough, "snap"
+		return stable;
+	else
+		return max(stable, current + (stable - current) * rotfactor * rotframetime);
+}
+
+float CalcRotRegen(float current, float regenstable, float regenfactor, float regenlinear, float regenframetime, float rotstable, float rotfactor, float rotlinear, float rotframetime, float limit)
+{
+	if(current > rotstable)
+	{
+		if(rotframetime > 0)
+		{
+			current = CalcRot(current, rotstable, rotfactor, rotframetime);
+			current = max(rotstable, current - rotlinear * rotframetime);
+		}
+	}
+	else if(current < regenstable)
+	{
+		if(regenframetime > 0)
+		{
+			current = CalcRegen(current, regenstable, regenfactor, regenframetime);
+			current = min(regenstable, current + regenlinear * regenframetime);
+		}
+	}
+
+	if(current > limit)
+		current = limit;
+
+	return current;
+}
+
 void player_regen (void)
 {
-	float maxh, maxa, maxf, limith, limita, limitf, max_mod, regen_mod, rot_mod, limit_mod;
-	maxh = cvar("g_balance_health_stable");
-	maxa = cvar("g_balance_armor_stable");
-	maxf = cvar("g_balance_fuel_stable");
+	float minh, mina, minf, maxh, maxa, maxf, limith, limita, limitf, max_mod, regen_mod, rot_mod, limit_mod;
+	maxh = cvar("g_balance_health_rotstable");
+	maxa = cvar("g_balance_armor_rotstable");
+	maxf = cvar("g_balance_fuel_rotstable");
+	minh = cvar("g_balance_health_regenstable");
+	mina = cvar("g_balance_armor_regenstable");
+	minf = cvar("g_balance_fuel_regenstable");
 	limith = cvar("g_balance_health_limit");
 	limita = cvar("g_balance_armor_limit");
 	limitf = cvar("g_balance_fuel_limit");
@@ -1838,76 +1894,27 @@
 	maxh = maxh * max_mod;
 	//maxa = maxa * max_mod;
 	//maxf = maxf * max_mod;
+	minh = minh * max_mod;
+	//mina = mina * max_mod;
+	//minf = minf * max_mod;
 	limith = limith * limit_mod;
 	limita = limita * limit_mod;
 	//limitf = limitf * limit_mod;
 
+	if(g_lms)
+		rot_mod = 0;
+
 	if (!g_minstagib && (!g_lms || cvar("g_lms_regenerate")))
 	{
-		if (self.armorvalue > maxa)
-		{
-			if (time > self.pauserotarmor_finished)
-			{
-				self.armorvalue = max(maxa, self.armorvalue + (maxa - self.armorvalue) * cvar("g_balance_armor_rot") * frametime);
-				self.armorvalue = max(maxa, self.armorvalue - cvar("g_balance_armor_rotlinear") * frametime);
-			}
-		}
-		else if (self.armorvalue < maxa)
-		{
-			if (time > self.pauseregen_finished)
-			{
-				self.armorvalue = CalcRegen(self.armorvalue, maxa, cvar("g_balance_armor_regen"));
-				self.armorvalue = min(maxa, self.armorvalue + cvar("g_balance_armor_regenlinear") * frametime);
-			}
-		}
-		if (self.armorvalue > limita)
-			self.armorvalue = limita;
+		self.armorvalue = CalcRotRegen(self.armorvalue, mina, cvar("g_balance_armor_regen"), cvar("g_balance_armor_regenlinear"), regen_mod * frametime * (time > self.pauseregen_finished), maxa, cvar("g_balance_armor_rot"), cvar("g_balance_armor_rotlinear"), rot_mod * frametime * (time > self.pauserotarmor_finished), limita);
+		self.health = CalcRotRegen(self.health, minh, cvar("g_balance_health_regen"), cvar("g_balance_health_regenlinear"), regen_mod * frametime * (time > self.pauseregen_finished), maxh, cvar("g_balance_health_rot"), cvar("g_balance_health_rotlinear"), rot_mod * frametime * (time > self.pauserothealth_finished), limith);
 
-		if (self.health > maxh)
-		{
-			if (time > self.pauserothealth_finished)
-			{
-				self.health = max(maxh, self.health + (maxh - self.health) * rot_mod*cvar("g_balance_health_rot") * frametime);
-				self.health = max(maxh, self.health - rot_mod*cvar("g_balance_health_rotlinear") * frametime);
-			}
-		}
-		else if (self.health < maxh)
-		{
-			if (time > self.pauseregen_finished)
-			{
-				self.health = CalcRegen(self.health, maxh, regen_mod * cvar("g_balance_health_regen"));
-				self.health = min(maxh, self.health + regen_mod*cvar("g_balance_health_regenlinear") * frametime);
-			}
-		}
-		if (self.health > limith)
-			self.health = limith;
-
 		// if player rotted to death...  die!
 		if(self.health < 1)
 			self.event_damage(self, self, 1, DEATH_ROT, self.origin, '0 0 0');
 	}
 
-	if (self.ammo_fuel > maxf)
-	{
-		if (time > self.pauserotfuel_finished)
-		{
-			self.ammo_fuel = max(maxf, self.ammo_fuel + (maxf - self.ammo_fuel) * rot_mod*cvar("g_balance_fuel_rot") * frametime);
-			self.ammo_fuel = max(maxf, self.ammo_fuel - rot_mod*cvar("g_balance_fuel_rotlinear") * frametime);
-		}
-	}
-	else if (self.ammo_fuel < maxf)
-	{
-		if(self.items & IT_FUEL_REGEN)
-		{
-			if (time > self.pauseregen_finished)
-			{
-				self.ammo_fuel = CalcRegen(self.ammo_fuel, maxf, regen_mod * cvar("g_balance_fuel_regen"));
-				self.ammo_fuel = min(maxf, self.ammo_fuel + regen_mod*cvar("g_balance_fuel_regenlinear") * frametime);
-			}
-		}
-	}
-	if (self.ammo_fuel > limitf)
-		self.ammo_fuel = limitf;
+	self.ammo_fuel = CalcRotRegen(self.ammo_fuel, minf, cvar("g_balance_fuel_regen"), cvar("g_balance_fuel_regenlinear"), regen_mod * frametime * (time > self.pauseregen_finished) * (self.items & IT_FUEL_REGEN != 0), maxf, cvar("g_balance_fuel_rot"), cvar("g_balance_fuel_rotlinear"), rot_mod * frametime * (time > self.pauserotfuel_finished), limitf);
 }
 
 float zoomstate_set;
@@ -2738,9 +2745,6 @@
 =============
 */
 .float idlekick_lasttimeleft;
-.float race_penalty;
-.float race_penalty_nagged;
-.float race_penalty_nagtime;
 void PlayerPostThink (void)
 {
 	// Savage: Check for nameless players
@@ -2834,45 +2838,9 @@
 		//if (TetrisPostFrame()) return;
 
 		// restart countdown
-			if(time < game_starttime) {
-				if (!cvar("sv_ready_restart_after_countdown"))
-				{
-					if(self.movement != '0 0 0' && g_race && !g_race_qualifying)
-					{
-						if(time < game_starttime - 2)
-						{
-							if(!self.race_penalty_nagged)
-							{
-								// TODO better notification for this!
-								self.race_penalty_nagtime = 0;
-								self.race_penalty_nagged = 1;
-							}
-						}
-						else if(!self.race_penalty)
-						{
-							self.race_penalty_nagtime = 0;
-							self.race_penalty = time + 5;
-						}
-					}
-					if(time > self.race_penalty_nagtime)
-					{
-						if(self.race_penalty > time)
-						{
-							centerprint_atprio(self, CENTERPRIO_IDLEKICK, "^1FIVE SECONDS PENALTY.");
-						}
-						else if(self.race_penalty_nagged && time < game_starttime - 2)
-						{
-							centerprint_atprio(self, CENTERPRIO_IDLEKICK, "^1DO NOT MOVE DURING THE COUNTDOWN.");
-						}
-						self.race_penalty_nagtime = time + self.cvar_scr_centertime * 0.6;
-					}
-					self.movetype = MOVETYPE_NONE;		
-					self.velocity = '0 0 0';
-					self.avelocity = '0 0 0';
-					self.movement = '0 0 0';
-				}
-			}
-			else if (time < self.race_penalty)
+		if (!cvar("sv_ready_restart_after_countdown"))
+		{
+			if(time < game_starttime)
 			{
 				self.movetype = MOVETYPE_NONE;		
 				self.velocity = '0 0 0';
@@ -2882,16 +2850,10 @@
 			else
 			{
 				//allow the player to move again if sv_ready_restart_after_countdown is not used and countdown is over
-				if (!cvar("sv_ready_restart_after_countdown"))
-				{
-					if(self.movetype == MOVETYPE_NONE)
-					{
-						self.movetype = MOVETYPE_WALK;
-					}
-					self.race_penalty = 0;
-					self.race_penalty_nagged = 0;
-				}
+				if(self.movetype == MOVETYPE_NONE)
+					self.movetype = MOVETYPE_WALK;
 			}
+		}
 		GetPressedKeys();
 	} else if (self.classname == "observer") {
 		//do nothing
@@ -2918,4 +2880,7 @@
 	Arena_Warmup();
 
 	//pointparticles(particleeffectnum("machinegun_impact"), self.origin + self.view_ofs + '0 0 7', '0 0 0', 1);
+
+	if(self.waypointsprite_attachedforcarrier)
+		WaypointSprite_UpdateHealth(self.waypointsprite_attachedforcarrier, '1 0 0' * healtharmor_maxdamage(self.health, self.armorvalue, cvar("g_balance_armor_blockpercent")));
 }

Modified: branches/nexuiz-2.0/data/qcsrc/server/cl_physics.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/cl_physics.qc	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/qcsrc/server/cl_physics.qc	2009-07-11 14:59:28 UTC (rev 7191)
@@ -1,3 +1,5 @@
+.float race_penalty;
+
 float sv_accelerate;
 float sv_friction;
 float sv_maxspeed;
@@ -524,7 +526,27 @@
 
 	self.items &~= IT_USING_JETPACK;
 
-	if (self.movetype == MOVETYPE_NONE && self.disableclientprediction != 2)
+	if(self.race_penalty)
+	{
+		if(time > self.race_penalty)
+		{
+			if(self.disableclientprediction == 2)
+			{
+				self.movetype = MOVETYPE_WALK;
+				self.disableclientprediction = 0;
+			}
+			self.race_penalty = 0;
+		}
+	}
+
+	if(self.race_penalty)
+	{
+		self.velocity = '0 0 0';
+		self.movetype = MOVETYPE_NONE;
+		self.disableclientprediction = 2;
+	}
+
+	if (self.movetype == MOVETYPE_NONE)
 		return;
 
 	if (self.punchangle != '0 0 0')
@@ -942,27 +964,37 @@
 		{
 			float accelerating;
 			float wishspeed2;
+			float airaccelqw;
 
+			airaccelqw = sv_airaccel_qw;
 			accelerating = (self.velocity * wishdir > 0);
 			wishspeed2 = wishspeed;
 
 			// CPM
 			if(sv_airstopaccelerate)
 				if(self.velocity * wishdir < 0)
-					airaccel = sv_airstopaccelerate;
+					airaccel = sv_airstopaccelerate*maxspd_mod;
 			if(self.movement_x == 0 && self.movement_y != 0)
 			{
 				if(sv_maxairstrafespeed)
-					wishspeed = min(wishspeed, sv_maxairstrafespeed);
+				{
+					wishspeed = min(wishspeed, sv_maxairstrafespeed*maxspd_mod);
+					if(sv_maxairstrafespeed < sv_maxairspeed)
+						airaccelqw = 1;
+				}
 				if(sv_airstrafeaccelerate)
-					airaccel = sv_airstrafeaccelerate;
+				{
+					airaccel = sv_airstrafeaccelerate*maxspd_mod;
+					if(sv_airstrafeaccelerate > sv_airaccelerate)
+						airaccelqw = 1;
+				}
 			}
 			// !CPM
 
 			if(sv_warsowbunny_turnaccel && accelerating && self.movement_y == 0 && self.movement_x != 0)
 				PM_AirAccelerate(wishdir, wishspeed);
 			else
-				PM_Accelerate(wishdir, wishspeed, airaccel, sv_airaccel_qw, sv_airaccel_sideways_friction / maxairspd);
+				PM_Accelerate(wishdir, wishspeed, airaccel, airaccelqw, sv_airaccel_sideways_friction / maxairspd);
 
 			if(sv_aircontrol)
 				CPM_PM_Aircontrol(wishdir, wishspeed2);

Modified: branches/nexuiz-2.0/data/qcsrc/server/cl_player.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/cl_player.qc	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/qcsrc/server/cl_player.qc	2009-07-11 14:59:28 UTC (rev 7191)
@@ -47,10 +47,8 @@
 	self.modelindex = oldself.modelindex;
 	self.modelindex_lod0 = oldself.modelindex_lod0;
 	self.modelindex_lod0_from_nexuiz = oldself.modelindex_lod0_from_nexuiz;
-#ifdef ALLOW_VARIABLE_LOD
 	self.modelindex_lod1 = oldself.modelindex_lod1;
 	self.modelindex_lod2 = oldself.modelindex_lod2;
-#endif
 	self.skinindex = oldself.skinindex;
 	self.species = oldself.species;
 	self.movetype = oldself.movetype;
@@ -59,6 +57,8 @@
 	self.takedamage = oldself.takedamage;
 	self.think = oldself.think;
 	self.customizeentityforclient = oldself.customizeentityforclient;
+	self.uncustomizeentityforclient = oldself.uncustomizeentityforclient;
+	self.uncustomizeentityforclient_set = oldself.uncustomizeentityforclient_set;
 	if (keepvelocity == 1)
 		self.velocity = oldself.velocity;
 	self.oldvelocity = self.velocity;
@@ -282,13 +282,15 @@
 void PlayerCorpseDamage (entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force)
 {
 	local float take, save;
+	vector v;
 	Violence_GibSplash_At(hitloc, force, 2, bound(0, damage, 200) / 16, self, attacker);
 
 	// damage resistance (ignore most of the damage from a bullet or similar)
 	damage = max(damage - 5, 1);
 
-	save = bound(0, damage * cvar("g_balance_armor_blockpercent"), self.armorvalue);
-	take = bound(0, damage - save, damage);
+	v = healtharmor_applydamage(self.armorvalue, cvar("g_balance_armor_blockpercent"), damage);
+	take = v_x;
+	save = v_y;
 
 	if(sound_allowed(MSG_BROADCAST, attacker))
 	{
@@ -335,6 +337,7 @@
 void PlayerDamage (entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force)
 {
 	local float take, save, waves, sdelay;
+	vector v;
 
 	if(!DEATH_ISSPECIAL(deathtype))
 	{
@@ -380,8 +383,9 @@
 
 	if (!g_minstagib)
 	{
-		save = bound(0, damage * cvar("g_balance_armor_blockpercent"), self.armorvalue);
-		take = bound(0, damage - save, damage);
+		v = healtharmor_applydamage(self.armorvalue, cvar("g_balance_armor_blockpercent"), damage);
+		take = v_x;
+		save = v_y;
 	}
 	else
 	{

Modified: branches/nexuiz-2.0/data/qcsrc/server/cl_weaponsystem.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/cl_weaponsystem.qc	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/qcsrc/server/cl_weaponsystem.qc	2009-07-11 14:59:28 UTC (rev 7191)
@@ -993,10 +993,9 @@
 {
 	//if sv_ready_restart_after_countdown is set, don't allow the player to shoot
 	//if all players readied up and the countdown is running
-	if (cvar("sv_ready_restart_after_countdown"))
-		if(time < game_starttime || time < self.race_penalty) {
-			return FALSE;
-		}
+	if(time < game_starttime || time < self.race_penalty) {
+		return FALSE;
+	}
 	
 	if not(self.items & IT_UNLIMITED_WEAPON_AMMO)
 	if (!weapon_action(self.weapon, WR_CHECKAMMO1 + secondary))

Modified: branches/nexuiz-2.0/data/qcsrc/server/clientcommands.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/clientcommands.qc	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/qcsrc/server/clientcommands.qc	2009-07-11 14:59:28 UTC (rev 7191)
@@ -383,6 +383,11 @@
 		}
 		else
 			sprint(self, "Usage: sv_cheats 1; restart; cmd make models/... 0/1/2\n");
+	} else if(argv(0) == "penalty") {
+		if((sv_cheats || self.maycheat) && tokens == 3)
+			race_ImposePenaltyTime(self, stof(argv(1)), argv(2));
+		else
+			sprint(self, "Usage: sv_cheats 1; restart; cmd penalty 5.0 AHAHAHAHAHAHAH))\n");
 	} else {
 		//if(ctf_clientcommand())
 		//	return;

Modified: branches/nexuiz-2.0/data/qcsrc/server/constants.qh
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/constants.qh	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/qcsrc/server/constants.qh	2009-07-11 14:59:28 UTC (rev 7191)
@@ -1,4 +1,4 @@
-string CVAR_CHECK_DEFAULT = "40e11dd2f984335c9e27adf5beccb2d1";
+string CVAR_CHECK_DEFAULT = "9b8ca48c50d9e2af73245655fdb29b04";
 string CVAR_CHECK_WEAPONS = "4f7b4c1e2feeef4988b02a93ff35a2ca";
 
 float	FALSE					= 0;

Modified: branches/nexuiz-2.0/data/qcsrc/server/csqceffects.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/csqceffects.qc	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/qcsrc/server/csqceffects.qc	2009-07-11 14:59:28 UTC (rev 7191)
@@ -1,13 +1,13 @@
-void te_csqc_lightningarc(vector from,vector to)
-{
-	WriteByte(MSG_BROADCAST, SVC_TEMPENTITY);
-	WriteByte(MSG_BROADCAST, TE_CSQC_LIGHTNINGARC);
-
-	WriteCoord(MSG_BROADCAST, from_x);
-	WriteCoord(MSG_BROADCAST, from_y);
-	WriteCoord(MSG_BROADCAST, from_z);
-	WriteCoord(MSG_BROADCAST, to_x);
-	WriteCoord(MSG_BROADCAST, to_y);
-	WriteCoord(MSG_BROADCAST, to_z);
-}
-
+void te_csqc_lightningarc(vector from,vector to)
+{
+	WriteByte(MSG_BROADCAST, SVC_TEMPENTITY);
+	WriteByte(MSG_BROADCAST, TE_CSQC_LIGHTNINGARC);
+
+	WriteCoord(MSG_BROADCAST, from_x);
+	WriteCoord(MSG_BROADCAST, from_y);
+	WriteCoord(MSG_BROADCAST, from_z);
+	WriteCoord(MSG_BROADCAST, to_x);
+	WriteCoord(MSG_BROADCAST, to_y);
+	WriteCoord(MSG_BROADCAST, to_z);
+}
+


Property changes on: branches/nexuiz-2.0/data/qcsrc/server/csqceffects.qc
___________________________________________________________________
Name: svn:eol-style
   + native


Property changes on: branches/nexuiz-2.0/data/qcsrc/server/csqcprojectile.qc
___________________________________________________________________
Name: svn:eol-style
   + native


Property changes on: branches/nexuiz-2.0/data/qcsrc/server/csqcprojectile.qh
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: branches/nexuiz-2.0/data/qcsrc/server/ctf.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/ctf.qc	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/qcsrc/server/ctf.qc	2009-07-11 14:59:28 UTC (rev 7191)
@@ -849,7 +849,7 @@
 	waypoint_spawnforitem(self);
 
 	WaypointSprite_SpawnFixed("redbase", self.origin + '0 0 37', self, sprite);
-	WaypointSprite_UpdateTeamRadar(self.sprite, RADARICON_FLAG, '1 0 0');
+	WaypointSprite_UpdateTeamRadar(self.sprite, RADARICON_FLAG, colormapPaletteColor(COLOR_TEAM1 - 1, FALSE));
 
 	precache_model("models/ctf/shield.md3");
 	precache_model("models/ctf/shockwavetransring.md3");
@@ -954,7 +954,7 @@
 	waypoint_spawnforitem(self);
 
 	WaypointSprite_SpawnFixed("bluebase", self.origin + '0 0 37', self, sprite);
-	WaypointSprite_UpdateTeamRadar(self.sprite, RADARICON_FLAG, '0 0 1');
+	WaypointSprite_UpdateTeamRadar(self.sprite, RADARICON_FLAG, colormapPaletteColor(COLOR_TEAM2 - 1, FALSE));
 
 	precache_model("models/ctf/shield.md3");
 

Modified: branches/nexuiz-2.0/data/qcsrc/server/defs.qh
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/defs.qh	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/qcsrc/server/defs.qh	2009-07-11 14:59:28 UTC (rev 7191)
@@ -39,7 +39,6 @@
 float g_pickup_respawntimejitter_medium;
 float g_pickup_respawntimejitter_long;
 float g_pickup_respawntimejitter_powerup;
-float g_maplist_allow_hidden;
 float g_jetpack;
 
 float sv_clones;
@@ -333,16 +332,17 @@
 .float cvar_cl_forceplayermodels;
 .float cvar_cl_forceplayermodelsfromnexuiz;
 float sv_clforceplayermodels;
+float sv_loddistance1;
+float sv_loddistance2;
+.float cvar_cl_gunalign;
 
 .float version_nagtime;
 
 .float modelindex_lod0;
 .float modelindex_lod0_from_nexuiz;
 .float skinindex;
-#ifdef ALLOW_VARIABLE_LOD
 .float modelindex_lod1;
 .float modelindex_lod2;
-#endif
 
 #define NUM_JUMPPADSUSED 3
 .float jumppadcount;
@@ -515,7 +515,6 @@
 // we're using + here instead of , because fteqcc sucks
 
 string clientstuff;
-.float stat_sys_ticrate;
 .float phase;
 .float weapons;
 .float pressedkeys;
@@ -601,3 +600,10 @@
 .float stat_leadlimit;
 
 float radar_showennemies;
+
+#ifdef PROFILING
+float client_cefc_accumulator;
+float client_cefc_accumulatortime;
+#endif
+
+.float campingrifle_bulletcounter;


Property changes on: branches/nexuiz-2.0/data/qcsrc/server/ent_cs.qc
___________________________________________________________________
Name: svn:eol-style
   + native


Property changes on: branches/nexuiz-2.0/data/qcsrc/server/func_breakable.qc
___________________________________________________________________
Name: svn:eol-style
   + native


Property changes on: branches/nexuiz-2.0/data/qcsrc/server/g_hook.qh
___________________________________________________________________
Name: svn:eol-style
   + native


Property changes on: branches/nexuiz-2.0/data/qcsrc/server/g_models.qc
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: branches/nexuiz-2.0/data/qcsrc/server/g_triggers.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/g_triggers.qc	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/qcsrc/server/g_triggers.qc	2009-07-11 14:59:28 UTC (rev 7191)
@@ -1624,7 +1624,7 @@
 		}
 	}
 
-	if(!a == !b)
+	if((!a) == (!b))
 		print("Invalid use of trigger_disablerelay: ", ftos(a), " relays were on, ", ftos(b), " relays were off!\n");
 }
 

Modified: branches/nexuiz-2.0/data/qcsrc/server/g_world.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/g_world.qc	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/qcsrc/server/g_world.qc	2009-07-11 14:59:28 UTC (rev 7191)
@@ -150,7 +150,7 @@
 		cvar_set("g_maplist_index", ftos(n - 1)); // jump to map 0 in GotoNextMap
 
 		MapInfo_Enumerate();
-		MapInfo_FilterGametype(MapInfo_CurrentGametype(), MapInfo_CurrentFeatures(), 0, (g_maplist_allow_hidden ? 0 : MAPINFO_FLAG_HIDDEN) | MAPINFO_FLAG_FORBIDDEN, 0);
+		MapInfo_FilterGametype(MapInfo_CurrentGametype(), MapInfo_CurrentFeatures(), MapInfo_RequiredFlags(), MapInfo_ForbiddenFlags(), 0);
 
 		if(!DoNextMapOverride())
 			GotoNextMap();
@@ -364,9 +364,8 @@
 
 	self.classname = "worldspawn"; // safeguard against various stuff ;)
 
-	g_maplist_allow_hidden = cvar("g_maplist_allow_hidden");
 	MapInfo_Enumerate();
-	MapInfo_FilterGametype(MapInfo_CurrentGametype(), MapInfo_CurrentFeatures(), 0, (g_maplist_allow_hidden ? 0 : MAPINFO_FLAG_HIDDEN) | MAPINFO_FLAG_FORBIDDEN, 0);
+	MapInfo_FilterGametype(MapInfo_CurrentGametype(), MapInfo_CurrentFeatures(), MapInfo_RequiredFlags(), MapInfo_ForbiddenFlags(), 0);
 }
 
 void Map_MarkAsRecent(string m);
@@ -547,11 +546,8 @@
 
 	Ban_LoadBans();
 
-	//initialise globals related to sv_timeout
-	orig_slowmo = cvar("slowmo");
-
 	MapInfo_Enumerate();
-	MapInfo_FilterGametype(MapInfo_CurrentGametype(), MapInfo_CurrentFeatures(), 0, (g_maplist_allow_hidden ? 0 : MAPINFO_FLAG_HIDDEN) | MAPINFO_FLAG_FORBIDDEN, 1);
+	MapInfo_FilterGametype(MapInfo_CurrentGametype(), MapInfo_CurrentFeatures(), MapInfo_RequiredFlags(), MapInfo_ForbiddenFlags(), 1);
 
 	if(whichpack(strcat("maps/", mapname, ".cfg")) != "")
 	{
@@ -602,6 +598,7 @@
  	addstat(STAT_DAMAGE_FIRED, AS_INT, maxdamage_fired);
 	addstat(STAT_SHOTORG, AS_INT, stat_shotorg);
 	addstat(STAT_LEADLIMIT, AS_FLOAT, stat_leadlimit);
+	addstat(STAT_BULLETS_LOADED, AS_INT, campingrifle_bulletcounter);
 
 	next_pingtime = time + 5;
 	InitializeEntity(self, cvar_changes_init, INITPRIO_CVARS);
@@ -918,7 +915,7 @@
 	if(Map_Count == 0)
 	{
 		bprint( "Maplist is empty!  Resetting it to default map list.\n" );
-		cvar_set("g_maplist", MapInfo_ListAllowedMaps(0, MAPINFO_FLAG_HIDDEN | MAPINFO_FLAG_FORBIDDEN));
+		cvar_set("g_maplist", MapInfo_ListAllowedMaps(MapInfo_RequiredFlags(), MapInfo_ForbiddenFlags()));
 		if(cvar("g_maplist_shuffle"))
 			ShuffleMaplist();
 		localcmd("\nmenu_cmd sync\n");
@@ -1038,7 +1035,7 @@
 			if(allowReset)
 			{
 				bprint( "Maplist contains no single playable map!  Resetting it to default map list.\n" );
-				cvar_set("g_maplist", MapInfo_ListAllowedMaps(0, MAPINFO_FLAG_HIDDEN | MAPINFO_FLAG_FORBIDDEN));
+				cvar_set("g_maplist", MapInfo_ListAllowedMaps(MapInfo_RequiredFlags(), MapInfo_ForbiddenFlags()));
 				if(cvar("g_maplist_shuffle"))
 					ShuffleMaplist();
 				localcmd("\nmenu_cmd sync\n");
@@ -2079,7 +2076,7 @@
 	if(mapvote_count == 0)
 	{
 		bprint( "Maplist contains no single playable map!  Resetting it to default map list.\n" );
-		cvar_set("g_maplist", MapInfo_ListAllowedMaps(0, MAPINFO_FLAG_HIDDEN | MAPINFO_FLAG_FORBIDDEN));
+		cvar_set("g_maplist", MapInfo_ListAllowedMaps(MapInfo_RequiredFlags(), MapInfo_ForbiddenFlags()));
 		if(cvar("g_maplist_shuffle"))
 			ShuffleMaplist();
 		localcmd("\nmenu_cmd sync\n");
@@ -2407,7 +2404,7 @@
 		return;
 
 	MapInfo_Enumerate();
-	if(MapInfo_FilterGametype(MapInfo_CurrentGametype(), MapInfo_CurrentFeatures(), 0, (g_maplist_allow_hidden ? 0 : MAPINFO_FLAG_HIDDEN) | MAPINFO_FLAG_FORBIDDEN, 1))
+	if(MapInfo_FilterGametype(MapInfo_CurrentGametype(), MapInfo_CurrentFeatures(), MapInfo_RequiredFlags(), MapInfo_ForbiddenFlags(), 1))
 		mapvote_run = TRUE;
 }
 void MapVote_Think()
@@ -2546,7 +2543,7 @@
 	// Mapinfo
 	MapInfo_Shutdown();
 	MapInfo_Enumerate();
-	MapInfo_FilterGametype(MapInfo_CurrentGametype(), MapInfo_CurrentFeatures(), 0, (g_maplist_allow_hidden ? 0 : MAPINFO_FLAG_HIDDEN) | MAPINFO_FLAG_FORBIDDEN, 1);
+	MapInfo_FilterGametype(MapInfo_CurrentGametype(), MapInfo_CurrentFeatures(), MapInfo_RequiredFlags(), MapInfo_ForbiddenFlags(), 1);
 }
 
 void SV_Shutdown()

Modified: branches/nexuiz-2.0/data/qcsrc/server/gamecommand.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/gamecommand.qc	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/qcsrc/server/gamecommand.qc	2009-07-11 14:59:28 UTC (rev 7191)
@@ -564,7 +564,7 @@
 	if(MapInfo_FilterGametype(MAPINFO_TYPE_ALL, 0, 0, 0, 1))
 	{
 		print("Done rebuiling mapinfos.\n");
-		MapInfo_FilterGametype(MapInfo_CurrentGametype(), MapInfo_CurrentFeatures(), 0, (g_maplist_allow_hidden ? MAPINFO_FLAG_HIDDEN : 0) | MAPINFO_FLAG_FORBIDDEN, 0);
+		MapInfo_FilterGametype(MapInfo_CurrentGametype(), MapInfo_CurrentFeatures(), MapInfo_RequiredFlags(), MapInfo_ForbiddenFlags(), 0);
 		remove(self);
 	}
 	else
@@ -652,17 +652,16 @@
 		if(t)
 		{
 			MapInfo_SwitchGameType(t);
-			MapInfo_FilterGametype(MapInfo_CurrentGametype(), MapInfo_CurrentFeatures(), 0, MAPINFO_FLAG_HIDDEN | MAPINFO_FLAG_FORBIDDEN, 0);
+			MapInfo_FilterGametype(MapInfo_CurrentGametype(), MapInfo_CurrentFeatures(), MapInfo_RequiredFlags(), MapInfo_ForbiddenFlags(), 0);
 			if(MapInfo_count > 0)
 			{
 				bprint("Game type successfully switched to ", s, "\n");
-				MapInfo_FilterGametype(MapInfo_CurrentGametype(), MapInfo_CurrentFeatures(), 0, (g_maplist_allow_hidden ? MAPINFO_FLAG_HIDDEN : 0) | MAPINFO_FLAG_FORBIDDEN, 0);
 			}
 			else
 			{
 				bprint("Cannot use this game type: no map for it found\n");
 				MapInfo_SwitchGameType(tsave);
-				MapInfo_FilterGametype(MapInfo_CurrentGametype(), MapInfo_CurrentFeatures(), 0, (g_maplist_allow_hidden ? MAPINFO_FLAG_HIDDEN : 0) | MAPINFO_FLAG_FORBIDDEN, 0);
+				MapInfo_FilterGametype(MapInfo_CurrentGametype(), MapInfo_CurrentFeatures(), MapInfo_RequiredFlags(), MapInfo_ForbiddenFlags(), 0);
 			}
 		}
 		else
@@ -920,8 +919,16 @@
 			print("can walk\n");
 		else
 			print("cannot walk\n");
+		return;
 	}
 
+	if(argv(0) == "onslaught_updatelinks")
+	{
+		onslaught_updatelinks();
+		print("ONS links updated\n");
+		return;
+	}
+
 	if(argv(0) == "bot_cmd")
 	{
 		local entity bot;

Modified: branches/nexuiz-2.0/data/qcsrc/server/havocbot_ctf.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/havocbot_ctf.qc	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/qcsrc/server/havocbot_ctf.qc	2009-07-11 14:59:28 UTC (rev 7191)
@@ -1,10 +1,10 @@
-#define HAVOCBOT_CTF_ROLE_NONE 		0
-#define HAVOCBOT_CTF_ROLE_DEFENSE	2
-#define HAVOCBOT_CTF_ROLE_MIDDLE	4
-#define HAVOCBOT_CTF_ROLE_OFFENSE	8
-#define HAVOCBOT_CTF_ROLE_CARRIER	16
-#define HAVOCBOT_CTF_ROLE_RETRIEVER	32
-#define HAVOCBOT_CTF_ROLE_ESCORT	64
+#define HAVOCBOT_CTF_ROLE_NONE 		0
+#define HAVOCBOT_CTF_ROLE_DEFENSE	2
+#define HAVOCBOT_CTF_ROLE_MIDDLE	4
+#define HAVOCBOT_CTF_ROLE_OFFENSE	8
+#define HAVOCBOT_CTF_ROLE_CARRIER	16
+#define HAVOCBOT_CTF_ROLE_RETRIEVER	32
+#define HAVOCBOT_CTF_ROLE_ESCORT	64
 
 .void() havocbot_role;
 .void() havocbot_previous_role;
@@ -53,27 +53,27 @@
 	}
 	return world;
 };
-
-float havocbot_ctf_teamcount(entity bot, vector org, float radius)
-{
-	if not(teams_matter)
-		return 0;
-
-	float c;
-	entity head;
-
-	FOR_EACH_PLAYER(head)
-	{
-		if(head.team!=bot.team || head.deadflag != DEAD_NO || head == bot)
-			continue;
-
-		if(vlen(head.origin - org) < radius)
-			++c;
-	}
-
-	return c;
-};
 
+float havocbot_ctf_teamcount(entity bot, vector org, float radius)
+{
+	if not(teams_matter)
+		return 0;
+
+	float c;
+	entity head;
+
+	FOR_EACH_PLAYER(head)
+	{
+		if(head.team!=bot.team || head.deadflag != DEAD_NO || head == bot)
+			continue;
+
+		if(vlen(head.origin - org) < radius)
+			++c;
+	}
+
+	return c;
+};
+
 void havocbot_goalrating_ctf_ourflag(float ratingscale)
 {
 	local entity head;
@@ -216,183 +216,183 @@
 		head = head.chain;
 	}
 };
-
-void havocbot_role_ctf_setrole(entity bot, float role)
-{
-	dprint(strcat(bot.netname," switched to "));
-	switch(role)
-	{
-		case HAVOCBOT_CTF_ROLE_CARRIER:
-			dprint("carrier");
-			bot.havocbot_role = havocbot_role_ctf_carrier;
-			bot.havocbot_role_timeout = 0;
-			bot.havocbot_cantfindflag = time + 10;
-			break;
-		case HAVOCBOT_CTF_ROLE_DEFENSE:
-			dprint("defense");
-			bot.havocbot_role = havocbot_role_ctf_defense;
-			bot.havocbot_role_timeout = 0;
-			break;
-		case HAVOCBOT_CTF_ROLE_MIDDLE:
-			dprint("middle");
-			bot.havocbot_role = havocbot_role_ctf_middle;
-			bot.havocbot_role_timeout = 0;
-			break;
-		case HAVOCBOT_CTF_ROLE_OFFENSE:
-			dprint("offense");
-			bot.havocbot_role = havocbot_role_ctf_offense;
-			bot.havocbot_role_timeout = 0;
-			break;
-		case HAVOCBOT_CTF_ROLE_RETRIEVER:
+
+void havocbot_role_ctf_setrole(entity bot, float role)
+{
+	dprint(strcat(bot.netname," switched to "));
+	switch(role)
+	{
+		case HAVOCBOT_CTF_ROLE_CARRIER:
+			dprint("carrier");
+			bot.havocbot_role = havocbot_role_ctf_carrier;
+			bot.havocbot_role_timeout = 0;
+			bot.havocbot_cantfindflag = time + 10;
+			break;
+		case HAVOCBOT_CTF_ROLE_DEFENSE:
+			dprint("defense");
+			bot.havocbot_role = havocbot_role_ctf_defense;
+			bot.havocbot_role_timeout = 0;
+			break;
+		case HAVOCBOT_CTF_ROLE_MIDDLE:
+			dprint("middle");
+			bot.havocbot_role = havocbot_role_ctf_middle;
+			bot.havocbot_role_timeout = 0;
+			break;
+		case HAVOCBOT_CTF_ROLE_OFFENSE:
+			dprint("offense");
+			bot.havocbot_role = havocbot_role_ctf_offense;
+			bot.havocbot_role_timeout = 0;
+			break;
+		case HAVOCBOT_CTF_ROLE_RETRIEVER:
 			dprint("retriever");
-			bot.havocbot_previous_role = bot.havocbot_role;
-			bot.havocbot_role = havocbot_role_ctf_retriever;
-			bot.havocbot_role_timeout = time + 10;
-			break;
-		case HAVOCBOT_CTF_ROLE_ESCORT:
+			bot.havocbot_previous_role = bot.havocbot_role;
+			bot.havocbot_role = havocbot_role_ctf_retriever;
+			bot.havocbot_role_timeout = time + 10;
+			break;
+		case HAVOCBOT_CTF_ROLE_ESCORT:
 			dprint("escort");
-			bot.havocbot_previous_role = bot.havocbot_role;
-			bot.havocbot_role = havocbot_role_ctf_escort;
-			bot.havocbot_role_timeout = time + 30;
-			break;
-	}
-	dprint("\n");
-};
-
-void havocbot_role_ctf_carrier()
-{
+			bot.havocbot_previous_role = bot.havocbot_role;
+			bot.havocbot_role = havocbot_role_ctf_escort;
+			bot.havocbot_role_timeout = time + 30;
+			break;
+	}
+	dprint("\n");
+};
+
+void havocbot_role_ctf_carrier()
+{
 	if(self.deadflag != DEAD_NO)
-	{
-		havocbot_ctf_reset_role(self);
-		return;
-	}
-
-	if (self.flagcarried == world)
-	{
-		havocbot_ctf_reset_role(self);
-		return;
-	}
-
-	if (self.bot_strategytime < time)
-	{
-		self.bot_strategytime = time + cvar("bot_ai_strategyinterval");
-
-		navigation_goalrating_start();
-		havocbot_goalrating_ctf_ourbase(50000);
-
-		if(self.health<100)
-			havocbot_goalrating_ctf_carrieritems(1000, self.origin, 1000);
-
-		navigation_goalrating_end();
-
-		if (self.navigation_hasgoals)
-			self.havocbot_cantfindflag = time + 10;
-		else if (time > self.havocbot_cantfindflag)
-		{
-			// Can't navigate to my own base, suicide!
-			// TODO: drop it and wander around
-			Damage(self, self, self, 100000, DEATH_KILL, self.origin, '0 0 0');
-			return;
-		}
-	}
-};
-
-void havocbot_role_ctf_escort()
-{
-	local entity mf, ef;
-
+	{
+		havocbot_ctf_reset_role(self);
+		return;
+	}
+
+	if (self.flagcarried == world)
+	{
+		havocbot_ctf_reset_role(self);
+		return;
+	}
+
+	if (self.bot_strategytime < time)
+	{
+		self.bot_strategytime = time + cvar("bot_ai_strategyinterval");
+
+		navigation_goalrating_start();
+		havocbot_goalrating_ctf_ourbase(50000);
+
+		if(self.health<100)
+			havocbot_goalrating_ctf_carrieritems(1000, self.origin, 1000);
+
+		navigation_goalrating_end();
+
+		if (self.navigation_hasgoals)
+			self.havocbot_cantfindflag = time + 10;
+		else if (time > self.havocbot_cantfindflag)
+		{
+			// Can't navigate to my own base, suicide!
+			// TODO: drop it and wander around
+			Damage(self, self, self, 100000, DEATH_KILL, self.origin, '0 0 0');
+			return;
+		}
+	}
+};
+
+void havocbot_role_ctf_escort()
+{
+	local entity mf, ef;
+
 	if(self.deadflag != DEAD_NO)
-	{
-		havocbot_ctf_reset_role(self);
-		return;
-	}
-
-	if (self.flagcarried)
-	{
-		havocbot_role_ctf_setrole(self, HAVOCBOT_CTF_ROLE_CARRIER);
-		return;
-	}
-
-	// If enemy flag is back on the base switch to previous role
-	ef = havocbot_ctf_find_enemy_flag(self);
-	if(ef.cnt==FLAG_BASE)
-	{
-		self.havocbot_role = self.havocbot_previous_role;
-		self.havocbot_role_timeout = 0;
-		return;
-	}
-
-	// If the flag carrier reached the base switch to defense
-	mf = havocbot_ctf_find_flag(self);
-	if(mf.cnt!=FLAG_BASE)
-	if(vlen(ef.origin - mf.dropped_origin) < 300)
-	{
-		havocbot_role_ctf_setrole(self, HAVOCBOT_CTF_ROLE_DEFENSE);
-		return;
-	}
-
-	// Set the role timeout if necessary
+	{
+		havocbot_ctf_reset_role(self);
+		return;
+	}
+
+	if (self.flagcarried)
+	{
+		havocbot_role_ctf_setrole(self, HAVOCBOT_CTF_ROLE_CARRIER);
+		return;
+	}
+
+	// If enemy flag is back on the base switch to previous role
+	ef = havocbot_ctf_find_enemy_flag(self);
+	if(ef.cnt==FLAG_BASE)
+	{
+		self.havocbot_role = self.havocbot_previous_role;
+		self.havocbot_role_timeout = 0;
+		return;
+	}
+
+	// If the flag carrier reached the base switch to defense
+	mf = havocbot_ctf_find_flag(self);
+	if(mf.cnt!=FLAG_BASE)
+	if(vlen(ef.origin - mf.dropped_origin) < 300)
+	{
+		havocbot_role_ctf_setrole(self, HAVOCBOT_CTF_ROLE_DEFENSE);
+		return;
+	}
+
+	// Set the role timeout if necessary
 	if (!self.havocbot_role_timeout)
-	{
+	{
 		self.havocbot_role_timeout = time + random() * 30 + 60;
-	}
-
-	// If nothing happened just switch to previous role
-	if (time > self.havocbot_role_timeout)
-	{
-		self.havocbot_role = self.havocbot_previous_role;
-		self.havocbot_role_timeout = 0;
-		return;
-	}
-
-	// Chase the flag carrier
-	if (self.bot_strategytime < time)
-	{
-		self.bot_strategytime = time + cvar("bot_ai_strategyinterval");
-		navigation_goalrating_start();
-		havocbot_goalrating_ctf_enemyflag(30000);
-		havocbot_goalrating_ctf_ourstolenflag(40000);
-		havocbot_goalrating_items(10000, self.origin, 10000);
-		navigation_goalrating_end();
-	}
-};
-
-void havocbot_role_ctf_offense()
-{
+	}
+
+	// If nothing happened just switch to previous role
+	if (time > self.havocbot_role_timeout)
+	{
+		self.havocbot_role = self.havocbot_previous_role;
+		self.havocbot_role_timeout = 0;
+		return;
+	}
+
+	// Chase the flag carrier
+	if (self.bot_strategytime < time)
+	{
+		self.bot_strategytime = time + cvar("bot_ai_strategyinterval");
+		navigation_goalrating_start();
+		havocbot_goalrating_ctf_enemyflag(30000);
+		havocbot_goalrating_ctf_ourstolenflag(40000);
+		havocbot_goalrating_items(10000, self.origin, 10000);
+		navigation_goalrating_end();
+	}
+};
+
+void havocbot_role_ctf_offense()
+{
 	local entity mf, ef;
-	local vector pos;
-
+	local vector pos;
+
 	if(self.deadflag != DEAD_NO)
-	{
-		havocbot_ctf_reset_role(self);
-		return;
-	}
-
-	if (self.flagcarried)
-	{
-		havocbot_role_ctf_setrole(self, HAVOCBOT_CTF_ROLE_CARRIER);
-		return;
-	}
-
-	// Check flags
-	mf = havocbot_ctf_find_flag(self);
-	ef = havocbot_ctf_find_enemy_flag(self);
+	{
+		havocbot_ctf_reset_role(self);
+		return;
+	}
 
+	if (self.flagcarried)
+	{
+		havocbot_role_ctf_setrole(self, HAVOCBOT_CTF_ROLE_CARRIER);
+		return;
+	}
+
+	// Check flags
+	mf = havocbot_ctf_find_flag(self);
+	ef = havocbot_ctf_find_enemy_flag(self);
+
 	// Own flag stolen
-	if(mf.cnt!=FLAG_BASE)
-	{
+	if(mf.cnt!=FLAG_BASE)
+	{
 		if(mf.tag_entity)
 			pos = mf.tag_entity.origin;
 		else
 			pos = mf.origin;
-
+
 		// Try to get it if closer than the enemy base
-		if(vlen(self.origin-ef.dropped_origin)>vlen(self.origin-pos))
-		{
-			havocbot_role_ctf_setrole(self, HAVOCBOT_CTF_ROLE_RETRIEVER);
-			return;
-		}
-	}
+		if(vlen(self.origin-ef.dropped_origin)>vlen(self.origin-pos))
+		{
+			havocbot_role_ctf_setrole(self, HAVOCBOT_CTF_ROLE_RETRIEVER);
+			return;
+		}
+	}
 
 	// Escort flag carrier
 	if(ef.cnt!=FLAG_BASE)
@@ -402,66 +402,66 @@
 		else
 			pos = ef.origin;
 
-		if(vlen(pos-mf.dropped_origin)>700)
-		{
-			havocbot_role_ctf_setrole(self, HAVOCBOT_CTF_ROLE_ESCORT);
-			return;
-		}
+		if(vlen(pos-mf.dropped_origin)>700)
+		{
+			havocbot_role_ctf_setrole(self, HAVOCBOT_CTF_ROLE_ESCORT);
+			return;
+		}
 	}
-
-	// About to fail, switch to middlefield
-	if(self.health<50)
-	{
-		havocbot_role_ctf_setrole(self, HAVOCBOT_CTF_ROLE_MIDDLE);
-		return;
-	}
-
-	// Set the role timeout if necessary
-	if (!self.havocbot_role_timeout)
-		self.havocbot_role_timeout = time + 120;
-
-	if (time > self.havocbot_role_timeout)
-	{
-		havocbot_ctf_reset_role(self);
-		return;
-	}
-
-	if (self.bot_strategytime < time)
-	{
-		self.bot_strategytime = time + cvar("bot_ai_strategyinterval");
-		navigation_goalrating_start();
-		havocbot_goalrating_ctf_ourstolenflag(50000);
-		havocbot_goalrating_ctf_enemybase(20000);
+
+	// About to fail, switch to middlefield
+	if(self.health<50)
+	{
+		havocbot_role_ctf_setrole(self, HAVOCBOT_CTF_ROLE_MIDDLE);
+		return;
+	}
+
+	// Set the role timeout if necessary
+	if (!self.havocbot_role_timeout)
+		self.havocbot_role_timeout = time + 120;
+
+	if (time > self.havocbot_role_timeout)
+	{
+		havocbot_ctf_reset_role(self);
+		return;
+	}
+
+	if (self.bot_strategytime < time)
+	{
+		self.bot_strategytime = time + cvar("bot_ai_strategyinterval");
+		navigation_goalrating_start();
+		havocbot_goalrating_ctf_ourstolenflag(50000);
+		havocbot_goalrating_ctf_enemybase(20000);
 		havocbot_goalrating_items(5000, self.origin, 1000);
-		havocbot_goalrating_items(1000, self.origin, 10000);
-		navigation_goalrating_end();
-	}
-};
-
-// Retriever (temporary role):
-void havocbot_role_ctf_retriever()
-{
-	local entity mf;
-
+		havocbot_goalrating_items(1000, self.origin, 10000);
+		navigation_goalrating_end();
+	}
+};
+
+// Retriever (temporary role):
+void havocbot_role_ctf_retriever()
+{
+	local entity mf;
+
 	if(self.deadflag != DEAD_NO)
-	{
-		havocbot_ctf_reset_role(self);
-		return;
-	}
-
-	if (self.flagcarried)
-	{
-		havocbot_role_ctf_setrole(self, HAVOCBOT_CTF_ROLE_CARRIER);
-		return;
-	}
-
-	// If flag is back on the base switch to previous role
+	{
+		havocbot_ctf_reset_role(self);
+		return;
+	}
+
+	if (self.flagcarried)
+	{
+		havocbot_role_ctf_setrole(self, HAVOCBOT_CTF_ROLE_CARRIER);
+		return;
+	}
+
+	// If flag is back on the base switch to previous role
 	mf = havocbot_ctf_find_flag(self);
-	if(mf.cnt==FLAG_BASE)
-	{
-		havocbot_ctf_reset_role(self);
-		return;
-	}
+	if(mf.cnt==FLAG_BASE)
+	{
+		havocbot_ctf_reset_role(self);
+		return;
+	}
 
 	if (!self.havocbot_role_timeout)
 		self.havocbot_role_timeout = time + 20;
@@ -471,114 +471,114 @@
 		havocbot_ctf_reset_role(self);
 		return;
 	}
-
-	if (self.bot_strategytime < time)
-	{
-		local float radius;
-		radius = 10000;
-
+
+	if (self.bot_strategytime < time)
+	{
+		local float radius;
+		radius = 10000;
+
 		self.bot_strategytime = time + cvar("bot_ai_strategyinterval");
 		navigation_goalrating_start();
 		havocbot_goalrating_ctf_ourstolenflag(50000);
 		havocbot_goalrating_ctf_droppedflags(40000, self.origin, radius);
 		havocbot_goalrating_ctf_enemybase(30000);
-		havocbot_goalrating_items(500, self.origin, radius);
+		havocbot_goalrating_items(500, self.origin, radius);
 		navigation_goalrating_end();
-	}
-};
-
-void havocbot_role_ctf_middle()
-{
-	local entity mf;
-
+	}
+};
+
+void havocbot_role_ctf_middle()
+{
+	local entity mf;
+
 	if(self.deadflag != DEAD_NO)
-	{
-		havocbot_ctf_reset_role(self);
-		return;
-	}
-
-	if (self.flagcarried)
-	{
-		havocbot_role_ctf_setrole(self, HAVOCBOT_CTF_ROLE_CARRIER);
-		return;
-	}
-
-	mf = havocbot_ctf_find_flag(self);
-	if(mf.cnt!=FLAG_BASE)
-	{
-		havocbot_role_ctf_setrole(self, HAVOCBOT_CTF_ROLE_RETRIEVER);
-		return;
-	}
-
-	if (!self.havocbot_role_timeout)
-		self.havocbot_role_timeout = time + 10;
-
-	if (time > self.havocbot_role_timeout)
-	{
-		havocbot_ctf_reset_role(self);
-		return;
-	}
-
-	if (self.bot_strategytime < time)
 	{
+		havocbot_ctf_reset_role(self);
+		return;
+	}
+
+	if (self.flagcarried)
+	{
+		havocbot_role_ctf_setrole(self, HAVOCBOT_CTF_ROLE_CARRIER);
+		return;
+	}
+
+	mf = havocbot_ctf_find_flag(self);
+	if(mf.cnt!=FLAG_BASE)
+	{
+		havocbot_role_ctf_setrole(self, HAVOCBOT_CTF_ROLE_RETRIEVER);
+		return;
+	}
+
+	if (!self.havocbot_role_timeout)
+		self.havocbot_role_timeout = time + 10;
+
+	if (time > self.havocbot_role_timeout)
+	{
+		havocbot_ctf_reset_role(self);
+		return;
+	}
+
+	if (self.bot_strategytime < time)
+	{
 		local vector org;
 
 		org = havocbot_ctf_middlepoint;
 		org_z = self.origin_z;
-
-		self.bot_strategytime = time + cvar("bot_ai_strategyinterval");
-		navigation_goalrating_start();
-		havocbot_goalrating_ctf_ourstolenflag(50000);
-		havocbot_goalrating_ctf_droppedflags(30000, self.origin, 10000);
-		havocbot_goalrating_enemyplayers(10000, org, havocbot_ctf_middlepoint_radius * 0.5);
+
+		self.bot_strategytime = time + cvar("bot_ai_strategyinterval");
+		navigation_goalrating_start();
+		havocbot_goalrating_ctf_ourstolenflag(50000);
+		havocbot_goalrating_ctf_droppedflags(30000, self.origin, 10000);
+		havocbot_goalrating_enemyplayers(10000, org, havocbot_ctf_middlepoint_radius * 0.5);
 		havocbot_goalrating_items(5000, org, havocbot_ctf_middlepoint_radius * 0.5);
 		havocbot_goalrating_items(2500, self.origin, 10000);
 		havocbot_goalrating_ctf_enemybase(2500);
-		navigation_goalrating_end();
-	}
-};
-
-void havocbot_role_ctf_defense()
-{
-	local entity mf;
-
+		navigation_goalrating_end();
+	}
+};
+
+void havocbot_role_ctf_defense()
+{
+	local entity mf;
+
 	if(self.deadflag != DEAD_NO)
-	{
-		havocbot_ctf_reset_role(self);
-		return;
-	}
-
-	if (self.flagcarried)
-	{
-		havocbot_role_ctf_setrole(self, HAVOCBOT_CTF_ROLE_CARRIER);
-		return;
-	}
-
-	// If own flag was captured
-	mf = havocbot_ctf_find_flag(self);
-	if(mf.cnt!=FLAG_BASE)
-	{
-		havocbot_role_ctf_setrole(self, HAVOCBOT_CTF_ROLE_RETRIEVER);
-		return;
-	}
-
-	if (!self.havocbot_role_timeout)
-		self.havocbot_role_timeout = time + 30;
-
-	if (time > self.havocbot_role_timeout)
-	{
-		havocbot_ctf_reset_role(self);
-		return;
-	}
-	if (self.bot_strategytime < time)
-	{
+	{
+		havocbot_ctf_reset_role(self);
+		return;
+	}
+
+	if (self.flagcarried)
+	{
+		havocbot_role_ctf_setrole(self, HAVOCBOT_CTF_ROLE_CARRIER);
+		return;
+	}
+
+	// If own flag was captured
+	mf = havocbot_ctf_find_flag(self);
+	if(mf.cnt!=FLAG_BASE)
+	{
+		havocbot_role_ctf_setrole(self, HAVOCBOT_CTF_ROLE_RETRIEVER);
+		return;
+	}
+
+	if (!self.havocbot_role_timeout)
+		self.havocbot_role_timeout = time + 30;
+
+	if (time > self.havocbot_role_timeout)
+	{
+		havocbot_ctf_reset_role(self);
+		return;
+	}
+	if (self.bot_strategytime < time)
+	{
 		local float radius;
-		local vector org;
-
+		local vector org;
+
 		org = mf.dropped_origin;
-		radius = havocbot_ctf_middlepoint_radius;
-
-		self.bot_strategytime = time + cvar("bot_ai_strategyinterval");
+		radius = havocbot_ctf_middlepoint_radius;
+
+		self.bot_strategytime = time + cvar("bot_ai_strategyinterval");
 		navigation_goalrating_start();
 
 		// if enemies are closer to our base, go there
@@ -603,40 +603,40 @@
 		if(vlen(org - self.origin)>1000)
 		if(checkpvs(self.origin,closestplayer)||random()<0.5)
 			havocbot_goalrating_ctf_ourbase(30000);
-
-		havocbot_goalrating_ctf_ourstolenflag(20000);
-		havocbot_goalrating_ctf_droppedflags(20000, org, radius);
+
+		havocbot_goalrating_ctf_ourstolenflag(20000);
+		havocbot_goalrating_ctf_droppedflags(20000, org, radius);
 		havocbot_goalrating_enemyplayers(15000, org, radius);
 		havocbot_goalrating_items(10000, org, radius);
-		havocbot_goalrating_items(5000, self.origin, 10000);
-		navigation_goalrating_end();
-	}
-};
-
-void havocbot_calculate_middlepoint()
-{
-	entity f;
-	vector p1, p2;
-
-	f = ctf_worldflaglist;
-	while (f)
-	{
-		if(p1)
-			p2 = f.origin;
-		else
-			p1 = f.origin;
+		havocbot_goalrating_items(5000, self.origin, 10000);
+		navigation_goalrating_end();
+	}
+};
 
-		f = f.ctf_worldflagnext;
-	}
+void havocbot_calculate_middlepoint()
+{
+	entity f;
+	vector p1, p2;
+
+	f = ctf_worldflaglist;
+	while (f)
+	{
+		if(p1)
+			p2 = f.origin;
+		else
+			p1 = f.origin;
+
+		f = f.ctf_worldflagnext;
+	}
 	havocbot_ctf_middlepoint = p1 + ((p2-p1) * 0.5);
-	havocbot_ctf_middlepoint_radius	 = vlen(p2-p1) * 0.5;
-};
-
-void havocbot_ctf_reset_role(entity bot)
-{
-	local float cdefense, cmiddle, coffense;
+	havocbot_ctf_middlepoint_radius	 = vlen(p2-p1) * 0.5;
+};
+
+void havocbot_ctf_reset_role(entity bot)
+{
+	local float cdefense, cmiddle, coffense;
 	local entity mf, ef, head;
-	local float c;
+	local float c;
 
 	if(bot.deadflag != DEAD_NO)
 		return;
@@ -644,30 +644,30 @@
 	if(vlen(havocbot_ctf_middlepoint)==0)
 		havocbot_calculate_middlepoint();
 
-	// Check ctf flags
+	// Check ctf flags
 	if (bot.flagcarried)
 	{
 		havocbot_role_ctf_setrole(bot, HAVOCBOT_CTF_ROLE_CARRIER);
 		return;
 	}
 
-	mf = havocbot_ctf_find_flag(bot);
-	ef = havocbot_ctf_find_enemy_flag(bot);
-
-	// Retrieve stolen flag
-	if(mf.cnt!=FLAG_BASE)
-	{
-		havocbot_role_ctf_setrole(bot, HAVOCBOT_CTF_ROLE_RETRIEVER);
-		return;
-	}
-
-	// If enemy flag is taken go to the middle to intercept pursuers
-	if(ef.cnt!=FLAG_BASE)
-	{
-		havocbot_role_ctf_setrole(bot, HAVOCBOT_CTF_ROLE_MIDDLE);
-		return;
+	mf = havocbot_ctf_find_flag(bot);
+	ef = havocbot_ctf_find_enemy_flag(bot);
+
+	// Retrieve stolen flag
+	if(mf.cnt!=FLAG_BASE)
+	{
+		havocbot_role_ctf_setrole(bot, HAVOCBOT_CTF_ROLE_RETRIEVER);
+		return;
 	}
 
+	// If enemy flag is taken go to the middle to intercept pursuers
+	if(ef.cnt!=FLAG_BASE)
+	{
+		havocbot_role_ctf_setrole(bot, HAVOCBOT_CTF_ROLE_MIDDLE);
+		return;
+	}
+
 	// if there is only me on the team switch to offense
 	c = 0;
 	FOR_EACH_PLAYER(head)
@@ -679,26 +679,26 @@
 		havocbot_role_ctf_setrole(bot, HAVOCBOT_CTF_ROLE_OFFENSE);
 		return;
 	}
-
-	// Evaluate best position to take
-	// Count mates on middle position
-	cmiddle = havocbot_ctf_teamcount(bot, havocbot_ctf_middlepoint, havocbot_ctf_middlepoint_radius * 0.5);
-
-	// Count mates on defense position
-	cdefense = havocbot_ctf_teamcount(bot, mf.dropped_origin, havocbot_ctf_middlepoint_radius * 0.5);
-
-	// Count mates on offense position
-	coffense = havocbot_ctf_teamcount(bot, ef.dropped_origin, havocbot_ctf_middlepoint_radius);
-
-	if(cdefense<=coffense)
-		havocbot_role_ctf_setrole(bot, HAVOCBOT_CTF_ROLE_DEFENSE);
-	else if(coffense<=cmiddle)
-		havocbot_role_ctf_setrole(bot, HAVOCBOT_CTF_ROLE_OFFENSE);
-	else
-		havocbot_role_ctf_setrole(bot, HAVOCBOT_CTF_ROLE_MIDDLE);
-};
-
-void havocbot_chooserole_ctf()
-{
-	havocbot_ctf_reset_role(self);
+
+	// Evaluate best position to take
+	// Count mates on middle position
+	cmiddle = havocbot_ctf_teamcount(bot, havocbot_ctf_middlepoint, havocbot_ctf_middlepoint_radius * 0.5);
+
+	// Count mates on defense position
+	cdefense = havocbot_ctf_teamcount(bot, mf.dropped_origin, havocbot_ctf_middlepoint_radius * 0.5);
+
+	// Count mates on offense position
+	coffense = havocbot_ctf_teamcount(bot, ef.dropped_origin, havocbot_ctf_middlepoint_radius);
+
+	if(cdefense<=coffense)
+		havocbot_role_ctf_setrole(bot, HAVOCBOT_CTF_ROLE_DEFENSE);
+	else if(coffense<=cmiddle)
+		havocbot_role_ctf_setrole(bot, HAVOCBOT_CTF_ROLE_OFFENSE);
+	else
+		havocbot_role_ctf_setrole(bot, HAVOCBOT_CTF_ROLE_MIDDLE);
 };
+
+void havocbot_chooserole_ctf()
+{
+	havocbot_ctf_reset_role(self);
+};


Property changes on: branches/nexuiz-2.0/data/qcsrc/server/havocbot_ctf.qc
___________________________________________________________________
Name: svn:eol-style
   + native


Property changes on: branches/nexuiz-2.0/data/qcsrc/server/havocbot_ons.qc
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: branches/nexuiz-2.0/data/qcsrc/server/miscfunctions.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/miscfunctions.qc	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/qcsrc/server/miscfunctions.qc	2009-07-11 14:59:28 UTC (rev 7191)
@@ -11,75 +11,81 @@
 float DistributeEvenly_totalweight;
 void DistributeEvenly_Init(float amount, float totalweight)
 {
-	if(DistributeEvenly_amount)
-	{
-		dprint("DistributeEvenly_Init: UNFINISHED DISTRIBUTION (", ftos(DistributeEvenly_amount), " for ");
-		dprint(ftos(DistributeEvenly_totalweight), " left!)\n");
-	}
-	if(totalweight == 0)
-		DistributeEvenly_amount = 0;
-	else
-		DistributeEvenly_amount = amount;
-	DistributeEvenly_totalweight = totalweight;
+    if (DistributeEvenly_amount)
+    {
+        dprint("DistributeEvenly_Init: UNFINISHED DISTRIBUTION (", ftos(DistributeEvenly_amount), " for ");
+        dprint(ftos(DistributeEvenly_totalweight), " left!)\n");
+    }
+    if (totalweight == 0)
+        DistributeEvenly_amount = 0;
+    else
+        DistributeEvenly_amount = amount;
+    DistributeEvenly_totalweight = totalweight;
 }
 float DistributeEvenly_Get(float weight)
 {
-	float f;
-	if(weight <= 0)
-		return 0;
-	f = floor(0.5 + DistributeEvenly_amount * weight / DistributeEvenly_totalweight);
-	DistributeEvenly_totalweight -= weight;
-	DistributeEvenly_amount -= f;
-	return f;
+    float f;
+    if (weight <= 0)
+        return 0;
+    f = floor(0.5 + DistributeEvenly_amount * weight / DistributeEvenly_totalweight);
+    DistributeEvenly_totalweight -= weight;
+    DistributeEvenly_amount -= f;
+    return f;
 }
 
 void move_out_of_solid_expand(entity e, vector by)
 {
-	float eps = 0.0625;
-	tracebox(e.origin, e.mins - '1 1 1' * eps, e.maxs + '1 1 1' * eps, e.origin + by, MOVE_WORLDONLY, e);
-	if(trace_startsolid)
-		return;
-	if(trace_fraction < 1)
-	{
-		// hit something
-		// adjust origin in the other direction...
-		e.origin = e.origin - by * (1 - trace_fraction);
-	}
+    float eps = 0.0625;
+    tracebox(e.origin, e.mins - '1 1 1' * eps, e.maxs + '1 1 1' * eps, e.origin + by, MOVE_WORLDONLY, e);
+    if (trace_startsolid)
+        return;
+    if (trace_fraction < 1)
+    {
+        // hit something
+        // adjust origin in the other direction...
+        e.origin = e.origin - by * (1 - trace_fraction);
+    }
 }
 
 float move_out_of_solid(entity e)
 {
-	vector o, m0, m1;
+    vector o, m0, m1;
 
-	o = e.origin;
-	traceline(o, o, MOVE_WORLDONLY, e);
-	if(trace_startsolid)
-		return 0;
+    o = e.origin;
+    traceline(o, o, MOVE_WORLDONLY, e);
+    if (trace_startsolid)
+        return 0;
 
-	tracebox(o, e.mins, e.maxs, o, MOVE_WORLDONLY, e);
-	if(!trace_startsolid)
-		return 1;
+    tracebox(o, e.mins, e.maxs, o, MOVE_WORLDONLY, e);
+    if (!trace_startsolid)
+        return 1;
 
-	m0 = e.mins;
-	m1 = e.maxs;
-	e.mins = '0 0 0';
-	e.maxs = '0 0 0';
-	move_out_of_solid_expand(e, '1 0 0' * m0_x); e.mins_x = m0_x;
-	move_out_of_solid_expand(e, '1 0 0' * m1_x); e.maxs_x = m1_x;
-	move_out_of_solid_expand(e, '0 1 0' * m0_y); e.mins_y = m0_y;
-	move_out_of_solid_expand(e, '0 1 0' * m1_y); e.maxs_y = m1_y;
-	move_out_of_solid_expand(e, '0 0 1' * m0_z); e.mins_z = m0_z;
-	move_out_of_solid_expand(e, '0 0 1' * m1_z); e.maxs_z = m1_z;
-	setorigin(e, e.origin);
+    m0 = e.mins;
+    m1 = e.maxs;
+    e.mins = '0 0 0';
+    e.maxs = '0 0 0';
+    move_out_of_solid_expand(e, '1 0 0' * m0_x);
+    e.mins_x = m0_x;
+    move_out_of_solid_expand(e, '1 0 0' * m1_x);
+    e.maxs_x = m1_x;
+    move_out_of_solid_expand(e, '0 1 0' * m0_y);
+    e.mins_y = m0_y;
+    move_out_of_solid_expand(e, '0 1 0' * m1_y);
+    e.maxs_y = m1_y;
+    move_out_of_solid_expand(e, '0 0 1' * m0_z);
+    e.mins_z = m0_z;
+    move_out_of_solid_expand(e, '0 0 1' * m1_z);
+    e.maxs_z = m1_z;
+    setorigin(e, e.origin);
 
-	tracebox(e.origin, e.mins, e.maxs, e.origin, MOVE_WORLDONLY, e);
-	if(trace_startsolid)
-	{
-		setorigin(e, o);
-		return 0;
-	}
+    tracebox(e.origin, e.mins, e.maxs, e.origin, MOVE_WORLDONLY, e);
+    if (trace_startsolid)
+    {
+        setorigin(e, o);
+        return 0;
+    }
 
-	return 1;
+    return 1;
 }
 
 string STR_PLAYER = "player";
@@ -107,121 +113,121 @@
 
 void bcenterprint(string s)
 {
-	// TODO replace by MSG_ALL (would show it to spectators too, though)?
-	entity head;
-	FOR_EACH_PLAYER(head)
-		if(clienttype(head) == CLIENTTYPE_REAL)
-			centerprint(head, s);
+    // TODO replace by MSG_ALL (would show it to spectators too, though)?
+    entity head;
+    FOR_EACH_PLAYER(head)
+    if (clienttype(head) == CLIENTTYPE_REAL)
+        centerprint(head, s);
 }
 
 void GameLogEcho(string s)
 {
-	string fn;
-	float matches;
+    string fn;
+    float matches;
 
-	if(cvar("sv_eventlog_files"))
-	{
-		if(!logfile_open)
-		{
-			logfile_open = TRUE;
-			matches = cvar("sv_eventlog_files_counter") + 1;
-			cvar_set("sv_eventlog_files_counter", ftos(matches));
-			fn = ftos(matches);
-			if(strlen(fn) < 8)
-				fn = strcat(substring("00000000", 0, 8 - strlen(fn)), fn);
-			fn = strcat(cvar_string("sv_eventlog_files_nameprefix"), fn, cvar_string("sv_eventlog_files_namesuffix"));
-			logfile = fopen(fn, FILE_APPEND);
-			fputs(logfile, ":logversion:3\n");
-		}
-		if(logfile >= 0)
-		{
-			if(cvar("sv_eventlog_files_timestamps"))
-				fputs(logfile, strcat(":time:", strftime(TRUE, "%Y-%m-%d %H:%M:%S", "\n", s, "\n")));
-			else
-				fputs(logfile, strcat(s, "\n"));
-		}
-	}
-	if(cvar("sv_eventlog_console"))
-	{
-		print(s, "\n");
-	}
+    if (cvar("sv_eventlog_files"))
+    {
+        if (!logfile_open)
+        {
+            logfile_open = TRUE;
+            matches = cvar("sv_eventlog_files_counter") + 1;
+            cvar_set("sv_eventlog_files_counter", ftos(matches));
+            fn = ftos(matches);
+            if (strlen(fn) < 8)
+                fn = strcat(substring("00000000", 0, 8 - strlen(fn)), fn);
+            fn = strcat(cvar_string("sv_eventlog_files_nameprefix"), fn, cvar_string("sv_eventlog_files_namesuffix"));
+            logfile = fopen(fn, FILE_APPEND);
+            fputs(logfile, ":logversion:3\n");
+        }
+        if (logfile >= 0)
+        {
+            if (cvar("sv_eventlog_files_timestamps"))
+                fputs(logfile, strcat(":time:", strftime(TRUE, "%Y-%m-%d %H:%M:%S", "\n", s, "\n")));
+            else
+                fputs(logfile, strcat(s, "\n"));
+        }
+    }
+    if (cvar("sv_eventlog_console"))
+    {
+        print(s, "\n");
+    }
 }
 
 void GameLogInit()
 {
-	logfile_open = 0;
-	// will be opened later
+    logfile_open = 0;
+    // will be opened later
 }
 
 void GameLogClose()
 {
-	if(logfile_open && logfile >= 0)
-	{
-		fclose(logfile);
-		logfile = -1;
-	}
+    if (logfile_open && logfile >= 0)
+    {
+        fclose(logfile);
+        logfile = -1;
+    }
 }
 
 float spawnpoint_nag;
 void relocate_spawnpoint()
 {
-	// nudge off the floor
-	setorigin(self, self.origin + '0 0 1');
+    // nudge off the floor
+    setorigin(self, self.origin + '0 0 1');
 
-	tracebox(self.origin, PL_MIN, PL_MAX, self.origin, TRUE, self);
-	if (trace_startsolid)
-	{
-		vector o;
-		o = self.origin;
-		self.mins = PL_MIN;
-		self.maxs = PL_MAX;
-		if(!move_out_of_solid(self))
-			objerror("could not get out of solid at all!");
-		print("^1NOTE: this map needs FIXING. Spawnpoint at ", vtos(o - '0 0 1'));
-		print(" needs to be moved out of solid, e.g. by '", ftos(self.origin_x - o_x));
-		print(" ", ftos(self.origin_y - o_y));
-		print(" ", ftos(self.origin_z - o_z), "'\n");
-		if(cvar("g_spawnpoints_auto_move_out_of_solid"))
-		{
-			if(!spawnpoint_nag)
-				print("\{1}^1NOTE: this map needs FIXING (it contains spawnpoints in solid, see server log)\n");
-			spawnpoint_nag = 1;
-		}
-		else
-		{
-			self.origin = o;
-			self.mins = self.maxs = '0 0 0';
-			objerror("player spawn point in solid, mapper sucks!\n");
-			return;
-		}
-	}
+    tracebox(self.origin, PL_MIN, PL_MAX, self.origin, TRUE, self);
+    if (trace_startsolid)
+    {
+        vector o;
+        o = self.origin;
+        self.mins = PL_MIN;
+        self.maxs = PL_MAX;
+        if (!move_out_of_solid(self))
+            objerror("could not get out of solid at all!");
+        print("^1NOTE: this map needs FIXING. Spawnpoint at ", vtos(o - '0 0 1'));
+        print(" needs to be moved out of solid, e.g. by '", ftos(self.origin_x - o_x));
+        print(" ", ftos(self.origin_y - o_y));
+        print(" ", ftos(self.origin_z - o_z), "'\n");
+        if (cvar("g_spawnpoints_auto_move_out_of_solid"))
+        {
+            if (!spawnpoint_nag)
+                print("\{1}^1NOTE: this map needs FIXING (it contains spawnpoints in solid, see server log)\n");
+            spawnpoint_nag = 1;
+        }
+        else
+        {
+            self.origin = o;
+            self.mins = self.maxs = '0 0 0';
+            objerror("player spawn point in solid, mapper sucks!\n");
+            return;
+        }
+    }
 
-	if(cvar("g_spawnpoints_autodrop"))
-	{
-		setsize(self, PL_MIN, PL_MAX);
-		droptofloor();
-	}
+    if (cvar("g_spawnpoints_autodrop"))
+    {
+        setsize(self, PL_MIN, PL_MAX);
+        droptofloor();
+    }
 
-	self.use = spawnpoint_use;
-	self.team_saved = self.team;
-	if(!self.cnt)
-		self.cnt = 1;
+    self.use = spawnpoint_use;
+    self.team_saved = self.team;
+    if (!self.cnt)
+        self.cnt = 1;
 
-	if(g_ctf || g_assault || g_onslaught || g_domination || g_nexball)
-	if(self.team)
-		have_team_spawns = 1;
+    if (g_ctf || g_assault || g_onslaught || g_domination || g_nexball)
+        if (self.team)
+            have_team_spawns = 1;
 
-	if(cvar("r_showbboxes"))
-	{
-		// show where spawnpoints point at too
-		makevectors(self.angles);
-		entity e;
-		e = spawn();
-		e.classname = "info_player_foo";
-		setorigin(e, self.origin + v_forward * 24);
-		setsize(e, '-8 -8 -8', '8 8 8');
-		e.solid = SOLID_TRIGGER;
-	}
+    if (cvar("r_showbboxes"))
+    {
+        // show where spawnpoints point at too
+        makevectors(self.angles);
+        entity e;
+        e = spawn();
+        e.classname = "info_player_foo";
+        setorigin(e, self.origin + v_forward * 24);
+        setsize(e, '-8 -8 -8', '8 8 8');
+        e.solid = SOLID_TRIGGER;
+    }
 }
 
 #define strstr strstrofs
@@ -252,193 +258,193 @@
 float nearest_length[NUM_NEAREST_ENTITIES];
 entity findnearest(vector point, .string field, string value, vector axismod)
 {
-	entity localhead;
-	float i;
-	float j;
-	float len;
-	vector dist;
+    entity localhead;
+    float i;
+    float j;
+    float len;
+    vector dist;
 
-	float num_nearest;
-	num_nearest = 0;
+    float num_nearest;
+    num_nearest = 0;
 
-	localhead = find(world, field, value);
-	while(localhead)
-	{
-		if((localhead.items == IT_KEY1 || localhead.items == IT_KEY2) && localhead.target == "###item###")
-			dist = localhead.oldorigin;
-		else
-			dist = localhead.origin;
-		dist = dist - point;
-		dist = dist_x * axismod_x * '1 0 0' + dist_y * axismod_y * '0 1 0' + dist_z * axismod_z * '0 0 1';
-		len = vlen(dist);
+    localhead = find(world, field, value);
+    while (localhead)
+    {
+        if ((localhead.items == IT_KEY1 || localhead.items == IT_KEY2) && localhead.target == "###item###")
+            dist = localhead.oldorigin;
+        else
+            dist = localhead.origin;
+        dist = dist - point;
+        dist = dist_x * axismod_x * '1 0 0' + dist_y * axismod_y * '0 1 0' + dist_z * axismod_z * '0 0 1';
+        len = vlen(dist);
 
-		for(i = 0; i < num_nearest; ++i)
-		{
-			if(len < nearest_length[i])
-				break;
-		}
+        for (i = 0; i < num_nearest; ++i)
+        {
+            if (len < nearest_length[i])
+                break;
+        }
 
-		// now i tells us where to insert at
-		//   INSERTION SORT! YOU'VE SEEN IT! RUN!
-		if(i < NUM_NEAREST_ENTITIES)
-		{
-			for(j = NUM_NEAREST_ENTITIES - 1; j >= i; --j)
-			{
-				nearest_length[j + 1] = nearest_length[j];
-				nearest_entity[j + 1] = nearest_entity[j];
-			}
-			nearest_length[i] = len;
-			nearest_entity[i] = localhead;
-			if(num_nearest < NUM_NEAREST_ENTITIES)
-				num_nearest = num_nearest + 1;
-		}
+        // now i tells us where to insert at
+        //   INSERTION SORT! YOU'VE SEEN IT! RUN!
+        if (i < NUM_NEAREST_ENTITIES)
+        {
+            for (j = NUM_NEAREST_ENTITIES - 1; j >= i; --j)
+            {
+                nearest_length[j + 1] = nearest_length[j];
+                nearest_entity[j + 1] = nearest_entity[j];
+            }
+            nearest_length[i] = len;
+            nearest_entity[i] = localhead;
+            if (num_nearest < NUM_NEAREST_ENTITIES)
+                num_nearest = num_nearest + 1;
+        }
 
-		localhead = find(localhead, field, value);
-	}
+        localhead = find(localhead, field, value);
+    }
 
-	// now use the first one from our list that we can see
-	for(i = 0; i < num_nearest; ++i)
-	{
-		traceline(point, nearest_entity[i].origin, TRUE, world);
-		if(trace_fraction == 1)
-		{
-			if(i != 0)
-			{
-				dprint("Nearest point (");
-				dprint(nearest_entity[0].netname);
-				dprint(") is not visible, using a visible one.\n");
-			}
-			return nearest_entity[i];
-		}
-	}
+    // now use the first one from our list that we can see
+    for (i = 0; i < num_nearest; ++i)
+    {
+        traceline(point, nearest_entity[i].origin, TRUE, world);
+        if (trace_fraction == 1)
+        {
+            if (i != 0)
+            {
+                dprint("Nearest point (");
+                dprint(nearest_entity[0].netname);
+                dprint(") is not visible, using a visible one.\n");
+            }
+            return nearest_entity[i];
+        }
+    }
 
-	if(num_nearest == 0)
-		return world;
+    if (num_nearest == 0)
+        return world;
 
-	dprint("Not seeing any location point, using nearest as fallback.\n");
-	/* DEBUGGING CODE:
-	dprint("Candidates were: ");
-	for(j = 0; j < num_nearest; ++j)
-	{
-		if(j != 0)
-			dprint(", ");
-		dprint(nearest_entity[j].netname);
-	}
-	dprint("\n");
-	*/
+    dprint("Not seeing any location point, using nearest as fallback.\n");
+    /* DEBUGGING CODE:
+    dprint("Candidates were: ");
+    for(j = 0; j < num_nearest; ++j)
+    {
+    	if(j != 0)
+    		dprint(", ");
+    	dprint(nearest_entity[j].netname);
+    }
+    dprint("\n");
+    */
 
-	return nearest_entity[0];
+    return nearest_entity[0];
 }
 
 void spawnfunc_target_location()
 {
-	self.classname = "target_location";
-	// location name in netname
-	// eventually support: count, teamgame selectors, line of sight?
+    self.classname = "target_location";
+    // location name in netname
+    // eventually support: count, teamgame selectors, line of sight?
 };
 
 void spawnfunc_info_location()
 {
-	self.classname = "target_location";
-	self.message = self.netname;
+    self.classname = "target_location";
+    self.message = self.netname;
 };
 
 string NearestLocation(vector p)
 {
-	entity loc;
-	string ret;
-	ret = "somewhere";
-	loc = findnearest(p, classname, "target_location", '1 1 1');
-	if(loc)
-	{
-		ret = loc.message;
-	}
-	else
-	{
-		loc = findnearest(p, target, "###item###", '1 1 4');
-		if(loc)
-			ret = loc.netname;
-	}
-	return ret;
+    entity loc;
+    string ret;
+    ret = "somewhere";
+    loc = findnearest(p, classname, "target_location", '1 1 1');
+    if (loc)
+    {
+        ret = loc.message;
+    }
+    else
+    {
+        loc = findnearest(p, target, "###item###", '1 1 4');
+        if (loc)
+            ret = loc.netname;
+    }
+    return ret;
 }
 
 string formatmessage(string msg)
 {
-	float p, p1, p2;
-	float n;
-	string escape;
-	string replacement;
-	p = 0;
-	n = 7;
-	while(1)
-	{
-		if(n < 1)
-			break; // too many replacements
-		n = n - 1;
-		p1 = strstr(msg, "%", p); // NOTE: this destroys msg as it's a tempstring!
-		p2 = strstr(msg, "\\", p); // NOTE: this destroys msg as it's a tempstring!
+    float p, p1, p2;
+    float n;
+    string escape;
+    string replacement;
+    p = 0;
+    n = 7;
+    while (1)
+    {
+        if (n < 1)
+            break; // too many replacements
+        n = n - 1;
+        p1 = strstr(msg, "%", p); // NOTE: this destroys msg as it's a tempstring!
+        p2 = strstr(msg, "\\", p); // NOTE: this destroys msg as it's a tempstring!
 
-		if(p1 < 0)
-			p1 = p2;
-		if(p2 < 0)
-			p2 = p1;
-		p = min(p1, p2);
-		
-		if(p < 0)
-			break;
-		replacement = substring(msg, p, 2);
-		escape = substring(msg, p + 1, 1);
-		if(escape == "%")
-			replacement = "%";
-		else if(escape == "\\")
-			replacement = "\\";
-		else if(escape == "n")
-			replacement = "\n";
-		else if(escape == "a")
-			replacement = ftos(floor(self.armorvalue));
-		else if(escape == "h")
-			replacement = ftos(floor(self.health));
-		else if(escape == "l")
-			replacement = NearestLocation(self.origin);
-		else if(escape == "y")
-			replacement = NearestLocation(self.cursor_trace_endpos);
-		else if(escape == "d")
-			replacement = NearestLocation(self.death_origin);
-		else if(escape == "w")
-		{
-			float wep;
-			wep = self.weapon;
-			if(!wep)
-				wep = self.switchweapon;
-			if(!wep)
-				wep = self.cnt;
-			replacement = W_Name(wep);
-		}
-		else if(escape == "W")
-		{
-			if(self.items & IT_SHELLS) replacement = "shells";
-			else if(self.items & IT_NAILS) replacement = "bullets";
-			else if(self.items & IT_ROCKETS) replacement = "rockets";
-			else if(self.items & IT_CELLS) replacement = "cells";
-			else replacement = "batteries"; // ;)
-		}
-		else if(escape == "x")
-		{
-			replacement = self.cursor_trace_ent.netname;
-			if(!replacement || !self.cursor_trace_ent)
-				replacement = "nothing";
-		}
-		else if(escape == "p")
-		{
-			if(self.last_selected_player)
-				replacement = self.last_selected_player.netname;
-			else
-				replacement = "(nobody)";
-		}
-		msg = strcat(substring(msg, 0, p), replacement, substring(msg, p+2, strlen(msg) - (p+2)));
-		p = p + strlen(replacement);
-	}
-	return msg;
+        if (p1 < 0)
+            p1 = p2;
+        if (p2 < 0)
+            p2 = p1;
+        p = min(p1, p2);
+
+        if (p < 0)
+            break;
+        replacement = substring(msg, p, 2);
+        escape = substring(msg, p + 1, 1);
+        if (escape == "%")
+            replacement = "%";
+        else if (escape == "\\")
+            replacement = "\\";
+        else if (escape == "n")
+            replacement = "\n";
+        else if (escape == "a")
+            replacement = ftos(floor(self.armorvalue));
+        else if (escape == "h")
+            replacement = ftos(floor(self.health));
+        else if (escape == "l")
+            replacement = NearestLocation(self.origin);
+        else if (escape == "y")
+            replacement = NearestLocation(self.cursor_trace_endpos);
+        else if (escape == "d")
+            replacement = NearestLocation(self.death_origin);
+        else if (escape == "w")
+        {
+            float wep;
+            wep = self.weapon;
+            if (!wep)
+                wep = self.switchweapon;
+            if (!wep)
+                wep = self.cnt;
+            replacement = W_Name(wep);
+        }
+        else if (escape == "W")
+        {
+            if (self.items & IT_SHELLS) replacement = "shells";
+            else if (self.items & IT_NAILS) replacement = "bullets";
+            else if (self.items & IT_ROCKETS) replacement = "rockets";
+            else if (self.items & IT_CELLS) replacement = "cells";
+            else replacement = "batteries"; // ;)
+        }
+        else if (escape == "x")
+        {
+            replacement = self.cursor_trace_ent.netname;
+            if (!replacement || !self.cursor_trace_ent)
+                replacement = "nothing";
+        }
+        else if (escape == "p")
+        {
+            if (self.last_selected_player)
+                replacement = self.last_selected_player.netname;
+            else
+                replacement = "(nobody)";
+        }
+        msg = strcat(substring(msg, 0, p), replacement, substring(msg, p+2, strlen(msg) - (p+2)));
+        p = p + strlen(replacement);
+    }
+    return msg;
 }
 
 /*
@@ -451,154 +457,156 @@
 */
 void GetCvars_handleString(string thisname, float f, .string field, string name)
 {
-	if(f < 0)
-	{
-		if(self.field)
-			strunzone(self.field);
-		self.field = string_null;
-	}
-	else if(f > 0)
-	{
-		if(thisname == name)
-		{
-			if(self.field)
-				strunzone(self.field);
-			self.field = strzone(argv(f + 1));
-		}
-	}
-	else
-		stuffcmd(self, strcat("sendcvar ", name, "\n"));
+    if (f < 0)
+    {
+        if (self.field)
+            strunzone(self.field);
+        self.field = string_null;
+    }
+    else if (f > 0)
+    {
+        if (thisname == name)
+        {
+            if (self.field)
+                strunzone(self.field);
+            self.field = strzone(argv(f + 1));
+        }
+    }
+    else
+        stuffcmd(self, strcat("sendcvar ", name, "\n"));
 }
 void GetCvars_handleString_Fixup(string thisname, float f, .string field, string name, string(string) func)
 {
-	GetCvars_handleString(thisname, f, field, name);
-	if(f >= 0) // also initialize to the fitting value for "" when sending cvars out
-	if(thisname == name)
-	{
-		string s;
-		s = func(strcat1(self.field));
-		if(s != self.field)
-		{
-			strunzone(self.field);
-			self.field = strzone(s);
-		}
-	}
+    GetCvars_handleString(thisname, f, field, name);
+    if (f >= 0) // also initialize to the fitting value for "" when sending cvars out
+        if (thisname == name)
+        {
+            string s;
+            s = func(strcat1(self.field));
+            if (s != self.field)
+            {
+                strunzone(self.field);
+                self.field = strzone(s);
+            }
+        }
 }
 void GetCvars_handleFloat(string thisname, float f, .float field, string name)
 {
-	if(f < 0)
-	{
-	}
-	else if(f > 0)
-	{
-		if(thisname == name)
-			self.field = stof(argv(f + 1));
-	}
-	else
-		stuffcmd(self, strcat("sendcvar ", name, "\n"));
+    if (f < 0)
+    {
+    }
+    else if (f > 0)
+    {
+        if (thisname == name)
+            self.field = stof(argv(f + 1));
+    }
+    else
+        stuffcmd(self, strcat("sendcvar ", name, "\n"));
 }
 string W_FixWeaponOrder_ForceComplete(string s);
 string W_FixWeaponOrder_AllowIncomplete(string s);
 float w_getbestweapon(entity e);
 void GetCvars(float f)
 {
-	string s;
-	if(f > 0)
-		s = strcat1(argv(f));
-	GetCvars_handleFloat(s, f, autoswitch, "cl_autoswitch");
-	GetCvars_handleFloat(s, f, cvar_cl_playerdetailreduction, "cl_playerdetailreduction");
-	GetCvars_handleFloat(s, f, cvar_scr_centertime, "scr_centertime");
-	GetCvars_handleFloat(s, f, cvar_cl_shownames, "cl_shownames");
-	GetCvars_handleString(s, f, cvar_g_nexuizversion, "g_nexuizversion");
-	GetCvars_handleFloat(s, f, cvar_cl_handicap, "cl_handicap");
-	GetCvars_handleString_Fixup(s, f, cvar_cl_weaponpriority, "cl_weaponpriority", W_FixWeaponOrder_ForceComplete);
-	GetCvars_handleString_Fixup(s, f, cvar_cl_weaponpriorities[0], "cl_weaponpriority0", W_FixWeaponOrder_AllowIncomplete);
-	GetCvars_handleString_Fixup(s, f, cvar_cl_weaponpriorities[1], "cl_weaponpriority1", W_FixWeaponOrder_AllowIncomplete);
-	GetCvars_handleString_Fixup(s, f, cvar_cl_weaponpriorities[2], "cl_weaponpriority2", W_FixWeaponOrder_AllowIncomplete);
-	GetCvars_handleString_Fixup(s, f, cvar_cl_weaponpriorities[3], "cl_weaponpriority3", W_FixWeaponOrder_AllowIncomplete);
-	GetCvars_handleString_Fixup(s, f, cvar_cl_weaponpriorities[4], "cl_weaponpriority4", W_FixWeaponOrder_AllowIncomplete);
-	GetCvars_handleString_Fixup(s, f, cvar_cl_weaponpriorities[5], "cl_weaponpriority5", W_FixWeaponOrder_AllowIncomplete);
-	GetCvars_handleString_Fixup(s, f, cvar_cl_weaponpriorities[6], "cl_weaponpriority6", W_FixWeaponOrder_AllowIncomplete);
-	GetCvars_handleString_Fixup(s, f, cvar_cl_weaponpriorities[7], "cl_weaponpriority7", W_FixWeaponOrder_AllowIncomplete);
-	GetCvars_handleString_Fixup(s, f, cvar_cl_weaponpriorities[8], "cl_weaponpriority8", W_FixWeaponOrder_AllowIncomplete);
-	GetCvars_handleString_Fixup(s, f, cvar_cl_weaponpriorities[9], "cl_weaponpriority9", W_FixWeaponOrder_AllowIncomplete);
-	GetCvars_handleFloat(s, f, cvar_cl_autotaunt, "cl_autotaunt");
-	GetCvars_handleFloat(s, f, cvar_cl_voice_directional, "cl_voice_directional");
-	GetCvars_handleFloat(s, f, cvar_cl_voice_directional_taunt_attenuation, "cl_voice_directional_taunt_attenuation");
-	GetCvars_handleFloat(s, f, cvar_cl_hitsound, "cl_hitsound");
-	GetCvars_handleFloat(s, f, cvar_cl_forceplayermodels, "cl_forceplayermodels");
-	GetCvars_handleFloat(s, f, cvar_cl_forceplayermodelsfromnexuiz, "cl_forceplayermodelsfromnexuiz");
+    string s;
+    if (f > 0)
+        s = strcat1(argv(f));
+    GetCvars_handleFloat(s, f, autoswitch, "cl_autoswitch");
+    GetCvars_handleFloat(s, f, cvar_cl_playerdetailreduction, "cl_playerdetailreduction");
+    GetCvars_handleFloat(s, f, cvar_scr_centertime, "scr_centertime");
+    GetCvars_handleFloat(s, f, cvar_cl_shownames, "cl_shownames");
+    GetCvars_handleString(s, f, cvar_g_nexuizversion, "g_nexuizversion");
+    GetCvars_handleFloat(s, f, cvar_cl_handicap, "cl_handicap");
+    GetCvars_handleString_Fixup(s, f, cvar_cl_weaponpriority, "cl_weaponpriority", W_FixWeaponOrder_ForceComplete);
+    GetCvars_handleString_Fixup(s, f, cvar_cl_weaponpriorities[0], "cl_weaponpriority0", W_FixWeaponOrder_AllowIncomplete);
+    GetCvars_handleString_Fixup(s, f, cvar_cl_weaponpriorities[1], "cl_weaponpriority1", W_FixWeaponOrder_AllowIncomplete);
+    GetCvars_handleString_Fixup(s, f, cvar_cl_weaponpriorities[2], "cl_weaponpriority2", W_FixWeaponOrder_AllowIncomplete);
+    GetCvars_handleString_Fixup(s, f, cvar_cl_weaponpriorities[3], "cl_weaponpriority3", W_FixWeaponOrder_AllowIncomplete);
+    GetCvars_handleString_Fixup(s, f, cvar_cl_weaponpriorities[4], "cl_weaponpriority4", W_FixWeaponOrder_AllowIncomplete);
+    GetCvars_handleString_Fixup(s, f, cvar_cl_weaponpriorities[5], "cl_weaponpriority5", W_FixWeaponOrder_AllowIncomplete);
+    GetCvars_handleString_Fixup(s, f, cvar_cl_weaponpriorities[6], "cl_weaponpriority6", W_FixWeaponOrder_AllowIncomplete);
+    GetCvars_handleString_Fixup(s, f, cvar_cl_weaponpriorities[7], "cl_weaponpriority7", W_FixWeaponOrder_AllowIncomplete);
+    GetCvars_handleString_Fixup(s, f, cvar_cl_weaponpriorities[8], "cl_weaponpriority8", W_FixWeaponOrder_AllowIncomplete);
+    GetCvars_handleString_Fixup(s, f, cvar_cl_weaponpriorities[9], "cl_weaponpriority9", W_FixWeaponOrder_AllowIncomplete);
+    GetCvars_handleFloat(s, f, cvar_cl_autotaunt, "cl_autotaunt");
+    GetCvars_handleFloat(s, f, cvar_cl_voice_directional, "cl_voice_directional");
+    GetCvars_handleFloat(s, f, cvar_cl_voice_directional_taunt_attenuation, "cl_voice_directional_taunt_attenuation");
+    GetCvars_handleFloat(s, f, cvar_cl_hitsound, "cl_hitsound");
+    GetCvars_handleFloat(s, f, cvar_cl_forceplayermodels, "cl_forceplayermodels");
+    GetCvars_handleFloat(s, f, cvar_cl_forceplayermodelsfromnexuiz, "cl_forceplayermodelsfromnexuiz");
+    GetCvars_handleFloat(s, f, cvar_cl_gunalign, "cl_gunalign");
 
-	// fixup of switchweapon (needed for LMS or when spectating is disabled, as PutClientInServer comes too early)
-	if(f > 0)
-	{
-		if(s == "cl_weaponpriority")
-			self.switchweapon = w_getbestweapon(self);
-	}
+
+    // fixup of switchweapon (needed for LMS or when spectating is disabled, as PutClientInServer comes too early)
+    if (f > 0)
+    {
+        if (s == "cl_weaponpriority")
+            self.switchweapon = w_getbestweapon(self);
+    }
 }
 
 float fexists(string f)
 {
-	float fh;
-	fh = fopen(f, FILE_READ);
-	if(fh < 0)
-		return FALSE;
-	fclose(fh);
-	return TRUE;
+    float fh;
+    fh = fopen(f, FILE_READ);
+    if (fh < 0)
+        return FALSE;
+    fclose(fh);
+    return TRUE;
 }
 
 void backtrace(string msg)
 {
-	float dev;
-	dev = cvar("developer");
-	cvar_set("developer", "1");
-	dprint("\n");
-	dprint("--- CUT HERE ---\nWARNING: ");
-	dprint(msg);
-	dprint("\n");
-	remove(world); // isn't there any better way to cause a backtrace?
-	dprint("\n--- CUT UNTIL HERE ---\n");
-	cvar_set("developer", ftos(dev));
+    float dev;
+    dev = cvar("developer");
+    cvar_set("developer", "1");
+    dprint("\n");
+    dprint("--- CUT HERE ---\nWARNING: ");
+    dprint(msg);
+    dprint("\n");
+    remove(world); // isn't there any better way to cause a backtrace?
+    dprint("\n--- CUT UNTIL HERE ---\n");
+    cvar_set("developer", ftos(dev));
 }
 
 string Team_ColorCode(float teamid)
 {
-	if(teamid == COLOR_TEAM1)
-		return "^1";
-	else if(teamid == COLOR_TEAM2)
-		return "^4";
-	else if(teamid == COLOR_TEAM3)
-		return "^3";
-	else if(teamid == COLOR_TEAM4)
-		return "^6";
-	else
-		return "^7";
+    if (teamid == COLOR_TEAM1)
+        return "^1";
+    else if (teamid == COLOR_TEAM2)
+        return "^4";
+    else if (teamid == COLOR_TEAM3)
+        return "^3";
+    else if (teamid == COLOR_TEAM4)
+        return "^6";
+    else
+        return "^7";
 }
 string Team_ColorName(float t)
 {
-	// fixme: Search for team entities and get their .netname's!
-	if(t == COLOR_TEAM1)
-		return "Red";
-	if(t == COLOR_TEAM2)
-		return "Blue";
-	if(t == COLOR_TEAM3)
-		return "Yellow";
-	if(t == COLOR_TEAM4)
-		return "Pink";
-	return "Neutral";
+    // fixme: Search for team entities and get their .netname's!
+    if (t == COLOR_TEAM1)
+        return "Red";
+    if (t == COLOR_TEAM2)
+        return "Blue";
+    if (t == COLOR_TEAM3)
+        return "Yellow";
+    if (t == COLOR_TEAM4)
+        return "Pink";
+    return "Neutral";
 }
 string Team_ColorNameLowerCase(float t)
 {
-	// fixme: Search for team entities and get their .netname's!
-	if(t == COLOR_TEAM1)
-		return "red";
-	if(t == COLOR_TEAM2)
-		return "blue";
-	if(t == COLOR_TEAM3)
-		return "yellow";
-	if(t == COLOR_TEAM4)
-		return "pink";
-	return "neutral";
+    // fixme: Search for team entities and get their .netname's!
+    if (t == COLOR_TEAM1)
+        return "red";
+    if (t == COLOR_TEAM2)
+        return "blue";
+    if (t == COLOR_TEAM3)
+        return "yellow";
+    if (t == COLOR_TEAM4)
+        return "pink";
+    return "neutral";
 }
 
 #define CENTERPRIO_POINT 1
@@ -613,55 +621,55 @@
 .float centerprint_expires;
 void centerprint_atprio(entity e, float prio, string s)
 {
-	if(intermission_running)
-		if(prio < CENTERPRIO_MAPVOTE)
-			return;
-	if(time > e.centerprint_expires)
-		e.centerprint_priority = 0;
-	if(prio >= e.centerprint_priority)
-	{
-		e.centerprint_priority = prio;
-		if(timeoutStatus == 2)
-			e.centerprint_expires = time + (e.cvar_scr_centertime * TIMEOUT_SLOWMO_VALUE);
-		else
-			e.centerprint_expires = time + e.cvar_scr_centertime;
-		centerprint_builtin(e, s);
-	}
+    if (intermission_running)
+        if (prio < CENTERPRIO_MAPVOTE)
+            return;
+    if (time > e.centerprint_expires)
+        e.centerprint_priority = 0;
+    if (prio >= e.centerprint_priority)
+    {
+        e.centerprint_priority = prio;
+        if (timeoutStatus == 2)
+            e.centerprint_expires = time + (e.cvar_scr_centertime * TIMEOUT_SLOWMO_VALUE);
+        else
+            e.centerprint_expires = time + e.cvar_scr_centertime;
+        centerprint_builtin(e, s);
+    }
 }
 void centerprint_expire(entity e, float prio)
 {
-	if(prio == e.centerprint_priority)
-	{
-		e.centerprint_priority = 0;
-		centerprint_builtin(e, "");
-	}
+    if (prio == e.centerprint_priority)
+    {
+        e.centerprint_priority = 0;
+        centerprint_builtin(e, "");
+    }
 }
 void centerprint(entity e, string s)
 {
-	centerprint_atprio(e, CENTERPRIO_NORMAL, s);
+    centerprint_atprio(e, CENTERPRIO_NORMAL, s);
 }
 
 // decolorizes and team colors the player name when needed
 string playername(entity p)
 {
-	string t;
-	if(teams_matter && !intermission_running && p.classname == "player")
-	{
-		t = Team_ColorCode(p.team);
-		return strcat(t, strdecolorize(p.netname));
-	}
-	else
-		return p.netname;
+    string t;
+    if (teams_matter && !intermission_running && p.classname == "player")
+    {
+        t = Team_ColorCode(p.team);
+        return strcat(t, strdecolorize(p.netname));
+    }
+    else
+        return p.netname;
 }
 
 vector randompos(vector m1, vector m2)
 {
-	local vector v;
-	m2 = m2 - m1;
-	v_x = m2_x * random() + m1_x;
-	v_y = m2_y * random() + m1_y;
-	v_z = m2_z * random() + m1_z;
-	return  v;
+    local vector v;
+    m2 = m2 - m1;
+    v_x = m2_x * random() + m1_x;
+    v_y = m2_y * random() + m1_y;
+    v_z = m2_z * random() + m1_z;
+    return  v;
 };
 
 float g_pickup_shells;
@@ -720,242 +728,248 @@
 float NixNex_CanChooseWeapon(float wpn);
 void readplayerstartcvars()
 {
-	entity e;
-	float i, j, t;
-	string s;
+    entity e;
+    float i, j, t;
+    string s;
 
-  	// initialize starting values for players
-	start_weapons = 0;
-	start_items = 0;
-	start_ammo_shells = 0;
-	start_ammo_nails = 0;
-	start_ammo_rockets = 0;
-	start_ammo_cells = 0;
-	start_health = cvar("g_balance_health_start");
-	start_armorvalue = cvar("g_balance_armor_start");
+    // initialize starting values for players
+    start_weapons = 0;
+    start_items = 0;
+    start_ammo_shells = 0;
+    start_ammo_nails = 0;
+    start_ammo_rockets = 0;
+    start_ammo_cells = 0;
+    start_health = cvar("g_balance_health_start");
+    start_armorvalue = cvar("g_balance_armor_start");
 
-	g_weaponarena = 0;
-	s = cvar_string("g_weaponarena");
-	if(s == "0")
-	{
-	}
-	else if(s == "all")
-	{
-		g_weaponarena_list = "All Weapons";
-		for(j = WEP_FIRST; j <= WEP_LAST; ++j)
-		{
-			e = get_weaponinfo(j);
-			g_weaponarena |= e.weapons;
-			weapon_action(e.weapon, WR_PRECACHE);
-		}
-	}
-	else if(s == "most")
-	{
-		g_weaponarena_list = "Most Weapons";
-		for(j = WEP_FIRST; j <= WEP_LAST; ++j)
-		{
-			e = get_weaponinfo(j);
-			if(e.spawnflags & WEPSPAWNFLAG_NORMAL)
-			{
-				g_weaponarena |= e.weapons;
-				weapon_action(e.weapon, WR_PRECACHE);
-			}
-		}
-	}
-	else if(s == "none")
-	{
-		g_weaponarena_list = "No Weapons";
-		g_weaponarena = WEPBIT_ALL + 1; // this supports no single weapon bit!
-	}
-	else
-	{
-		t = tokenize_console(s);
-		g_weaponarena_list = "";
-		for(i = 0; i < t; ++i)
-		{
-			s = argv(i);
-			for(j = WEP_FIRST; j <= WEP_LAST; ++j)
-			{
-				e = get_weaponinfo(j);
-				if(e.netname == s)
-				{
-					g_weaponarena |= e.weapons;
-					weapon_action(e.weapon, WR_PRECACHE);
-					g_weaponarena_list = strcat(g_weaponarena_list, e.message, " & ");
-					break;
-				}
-			}
-			if(j > WEP_LAST)
-			{
-				print("The weapon mutator list contains an unknown weapon ", s, ". Skipped.\n");
-			}
-		}
-		g_weaponarena_list = strzone(substring(g_weaponarena_list, 0, strlen(g_weaponarena_list) - 3));
-	}
+    g_weaponarena = 0;
+    s = cvar_string("g_weaponarena");
+    if (s == "0")
+    {
+    }
+    else if (s == "all")
+    {
+        g_weaponarena_list = "All Weapons";
+        for (j = WEP_FIRST; j <= WEP_LAST; ++j)
+        {
+            e = get_weaponinfo(j);
+            g_weaponarena |= e.weapons;
+            weapon_action(e.weapon, WR_PRECACHE);
+        }
+    }
+    else if (s == "most")
+    {
+        g_weaponarena_list = "Most Weapons";
+        for (j = WEP_FIRST; j <= WEP_LAST; ++j)
+        {
+            e = get_weaponinfo(j);
+            if (e.spawnflags & WEPSPAWNFLAG_NORMAL)
+            {
+                g_weaponarena |= e.weapons;
+                weapon_action(e.weapon, WR_PRECACHE);
+            }
+        }
+    }
+    else if (s == "none")
+    {
+        g_weaponarena_list = "No Weapons";
+        g_weaponarena = WEPBIT_ALL + 1; // this supports no single weapon bit!
+    }
+    else
+    {
+        t = tokenize_console(s);
+        g_weaponarena_list = "";
+        for (i = 0; i < t; ++i)
+        {
+            s = argv(i);
+            for (j = WEP_FIRST; j <= WEP_LAST; ++j)
+            {
+                e = get_weaponinfo(j);
+                if (e.netname == s)
+                {
+                    g_weaponarena |= e.weapons;
+                    weapon_action(e.weapon, WR_PRECACHE);
+                    g_weaponarena_list = strcat(g_weaponarena_list, e.message, " & ");
+                    break;
+                }
+            }
+            if (j > WEP_LAST)
+            {
+                print("The weapon mutator list contains an unknown weapon ", s, ". Skipped.\n");
+            }
+        }
+        g_weaponarena_list = strzone(substring(g_weaponarena_list, 0, strlen(g_weaponarena_list) - 3));
+    }
 
-	if(g_nixnex)
-	{
-		start_weapons = 0;
-		// will be done later
-		for(i = WEP_FIRST; i <= WEP_LAST; ++i)
-			if(NixNex_CanChooseWeapon(i))
-				weapon_action(i, WR_PRECACHE);
-	}
-	else if(g_weaponarena)
-	{
-		start_weapons = g_weaponarena;
-		start_ammo_rockets = 999;
-		start_ammo_shells = 999;
-		start_ammo_cells = 999;
-		start_ammo_nails = 999;
-		start_ammo_fuel = 999;
-		start_items |= IT_UNLIMITED_AMMO;
-	}
-	else if(g_minstagib)
-	{
-		start_health = 100;
-		start_armorvalue = 0;
-		start_weapons = WEPBIT_MINSTANEX;
-		weapon_action(WEP_MINSTANEX, WR_PRECACHE);
-		start_ammo_cells = cvar("g_minstagib_ammo_start");
-		g_minstagib_invis_alpha = cvar("g_minstagib_invis_alpha");
-		start_ammo_fuel = cvar("g_start_ammo_fuel");
+    if (g_nixnex)
+    {
+        start_weapons = 0;
+        // will be done later
+        for (i = WEP_FIRST; i <= WEP_LAST; ++i)
+            if (NixNex_CanChooseWeapon(i))
+                weapon_action(i, WR_PRECACHE);
+        if(!cvar("g_use_ammunition"))
+        	start_items |= IT_UNLIMITED_AMMO;
+    }
+    else if (g_weaponarena)
+    {
+        start_weapons = g_weaponarena;
+        start_ammo_rockets = 999;
+        start_ammo_shells = 999;
+        start_ammo_cells = 999;
+        start_ammo_nails = 999;
+        start_ammo_fuel = 999;
+        start_items |= IT_UNLIMITED_AMMO;
+    }
+    else if (g_minstagib)
+    {
+        start_health = 100;
+        start_armorvalue = 0;
+        start_weapons = WEPBIT_MINSTANEX;
+        weapon_action(WEP_MINSTANEX, WR_PRECACHE);
+        start_ammo_cells = cvar("g_minstagib_ammo_start");
+        g_minstagib_invis_alpha = cvar("g_minstagib_invis_alpha");
+        start_ammo_fuel = cvar("g_start_ammo_fuel");
 
-		if(g_minstagib_invis_alpha <= 0)
-			g_minstagib_invis_alpha = -1;
-	}
-	else
-	{
-		if(g_lms)
-		{
-			start_ammo_shells = cvar("g_lms_start_ammo_shells");
-			start_ammo_nails = cvar("g_lms_start_ammo_nails");
-			start_ammo_rockets = cvar("g_lms_start_ammo_rockets");
-			start_ammo_cells = cvar("g_lms_start_ammo_cells");
-			start_ammo_fuel = cvar("g_lms_start_ammo_fuel");
-			start_health = cvar("g_lms_start_health");
-			start_armorvalue = cvar("g_lms_start_armor");
-		} else if (cvar("g_use_ammunition")) {
-			start_ammo_shells = cvar("g_start_ammo_shells");
-			start_ammo_nails = cvar("g_start_ammo_nails");
-			start_ammo_rockets = cvar("g_start_ammo_rockets");
-			start_ammo_cells = cvar("g_start_ammo_cells");
-			start_ammo_fuel = cvar("g_start_ammo_fuel");
-		} else {
-			start_ammo_shells = cvar("g_pickup_shells_max");
-			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_ammo_fuel = cvar("g_pickup_fuel_max");
-			start_items |= IT_UNLIMITED_AMMO;
-		}
+        if (g_minstagib_invis_alpha <= 0)
+            g_minstagib_invis_alpha = -1;
+    }
+    else
+    {
+        if (g_lms)
+        {
+            start_ammo_shells = cvar("g_lms_start_ammo_shells");
+            start_ammo_nails = cvar("g_lms_start_ammo_nails");
+            start_ammo_rockets = cvar("g_lms_start_ammo_rockets");
+            start_ammo_cells = cvar("g_lms_start_ammo_cells");
+            start_ammo_fuel = cvar("g_lms_start_ammo_fuel");
+            start_health = cvar("g_lms_start_health");
+            start_armorvalue = cvar("g_lms_start_armor");
+        }
+        else if (cvar("g_use_ammunition"))
+        {
+            start_ammo_shells = cvar("g_start_ammo_shells");
+            start_ammo_nails = cvar("g_start_ammo_nails");
+            start_ammo_rockets = cvar("g_start_ammo_rockets");
+            start_ammo_cells = cvar("g_start_ammo_cells");
+            start_ammo_fuel = cvar("g_start_ammo_fuel");
+        }
+        else
+        {
+            start_ammo_shells = cvar("g_pickup_shells_max");
+            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_ammo_fuel = cvar("g_pickup_fuel_max");
+            start_items |= IT_UNLIMITED_AMMO;
+        }
 
-		for(i = WEP_FIRST; i <= WEP_LAST; ++i)
-		{
-			e = get_weaponinfo(i);
-			if(!(e.weapon))
-				continue;
+        for (i = WEP_FIRST; i <= WEP_LAST; ++i)
+        {
+            e = get_weaponinfo(i);
+            if (!(e.weapon))
+                continue;
 
-			t = cvar(strcat("g_start_weapon_", e.netname));
+            t = cvar(strcat("g_start_weapon_", e.netname));
 
-			if(t < 0) // "default" weapon selection
-			{
-				if(g_lms)
-					t = (e.spawnflags & WEPSPAWNFLAG_NORMAL);
-				else if(g_race)
-					t = (i == WEP_LASER);
-				else if(g_nexball)
-					t = 0; // weapon is set a few lines later
-				else
-					t = (i == WEP_LASER || i == WEP_SHOTGUN);
-				if(g_grappling_hook) // if possible, redirect off-hand hook to on-hand hook
-					t += (i == WEP_HOOK);
-			}
+            if (t < 0) // "default" weapon selection
+            {
+                if (g_lms)
+                    t = (e.spawnflags & WEPSPAWNFLAG_NORMAL);
+                else if (g_race)
+                    t = (i == WEP_LASER);
+                else if (g_nexball)
+                    t = 0; // weapon is set a few lines later
+                else
+                    t = (i == WEP_LASER || i == WEP_SHOTGUN);
+                if (g_grappling_hook) // if possible, redirect off-hand hook to on-hand hook
+                    t += (i == WEP_HOOK);
+            }
 
-			if(g_nexball && i == WEP_PORTO)
-					t=1;
+            if (g_nexball && i == WEP_PORTO)
+                t=1;
 
-			if(t)
-			{
-				start_weapons |= e.weapons;
-				weapon_action(e.weapon, WR_PRECACHE);
-			}
-		}
-	}
+            if (t)
+            {
+                start_weapons |= e.weapons;
+                weapon_action(e.weapon, WR_PRECACHE);
+            }
+        }
+    }
 
-	if(inWarmupStage)
-	{
-		warmup_start_ammo_shells = start_ammo_shells;
-		warmup_start_ammo_nails = start_ammo_nails;
-		warmup_start_ammo_rockets = start_ammo_rockets;
-		warmup_start_ammo_cells = start_ammo_cells;
-		warmup_start_health = start_health;
-		warmup_start_armorvalue = start_armorvalue;
-		warmup_start_weapons = start_weapons;
+    if (inWarmupStage)
+    {
+        warmup_start_ammo_shells = start_ammo_shells;
+        warmup_start_ammo_nails = start_ammo_nails;
+        warmup_start_ammo_rockets = start_ammo_rockets;
+        warmup_start_ammo_cells = start_ammo_cells;
+        warmup_start_health = start_health;
+        warmup_start_armorvalue = start_armorvalue;
+        warmup_start_weapons = start_weapons;
 
-		if(!g_weaponarena && !g_nixnex && !g_minstagib)
-		{
-			if(cvar("g_use_ammunition"))
-			{
-				warmup_start_ammo_shells = cvar("g_warmup_start_ammo_shells");
-				warmup_start_ammo_cells = cvar("g_warmup_start_ammo_cells");
-				warmup_start_ammo_nails = cvar("g_warmup_start_ammo_nails");
-				warmup_start_ammo_rockets = cvar("g_warmup_start_ammo_rockets");
-			}
-			warmup_start_health = cvar("g_warmup_start_health");
-			warmup_start_armorvalue = cvar("g_warmup_start_armor");
-			if(cvar("g_warmup_allguns"))
-			{
-				for(i = WEP_FIRST; i <= WEP_LAST; ++i)
-				{
-					e = get_weaponinfo(i);
-					if(!(e.weapon))
-						continue;
-					if(e.spawnflags & WEPSPAWNFLAG_NORMAL)
-					{
-						warmup_start_weapons |= e.weapons;
-						weapon_action(e.weapon, WR_PRECACHE);
-					}
-				}
-			}
-		}
-	}
+        if (!g_weaponarena && !g_nixnex && !g_minstagib)
+        {
+            if (cvar("g_use_ammunition"))
+            {
+                warmup_start_ammo_shells = cvar("g_warmup_start_ammo_shells");
+                warmup_start_ammo_cells = cvar("g_warmup_start_ammo_cells");
+                warmup_start_ammo_nails = cvar("g_warmup_start_ammo_nails");
+                warmup_start_ammo_rockets = cvar("g_warmup_start_ammo_rockets");
+            }
+            warmup_start_health = cvar("g_warmup_start_health");
+            warmup_start_armorvalue = cvar("g_warmup_start_armor");
+            if (cvar("g_warmup_allguns"))
+            {
+                for (i = WEP_FIRST; i <= WEP_LAST; ++i)
+                {
+                    e = get_weaponinfo(i);
+                    if (!(e.weapon))
+                        continue;
+                    if (e.spawnflags & WEPSPAWNFLAG_NORMAL)
+                    {
+                        warmup_start_weapons |= e.weapons;
+                        weapon_action(e.weapon, WR_PRECACHE);
+                    }
+                }
+            }
+        }
+    }
 
-	if(g_jetpack || (g_grappling_hook && (start_weapons & WEPBIT_HOOK)))
-	{
-		g_grappling_hook = 0; // these two can't coexist, as they use the same button
-		start_items |= IT_FUEL_REGEN;
-		start_ammo_fuel = max(start_ammo_fuel, cvar("g_balance_fuel_stable"));
-	}
+    if (g_jetpack || (g_grappling_hook && (start_weapons & WEPBIT_HOOK)))
+    {
+        g_grappling_hook = 0; // these two can't coexist, as they use the same button
+        start_items |= IT_FUEL_REGEN;
+        start_ammo_fuel = max(start_ammo_fuel, cvar("g_balance_fuel_rotstable"));
+    }
 
-	if(g_jetpack)
-		start_items |= IT_JETPACK;
+    if (g_jetpack)
+        start_items |= IT_JETPACK;
 
-	if(g_weapon_stay == 2)
-	{
-		if(!start_ammo_shells) start_ammo_shells = g_pickup_shells;
-		if(!start_ammo_nails) start_ammo_nails = g_pickup_nails;
-		if(!start_ammo_cells) start_ammo_cells = g_pickup_cells;
-		if(!start_ammo_rockets) start_ammo_rockets = g_pickup_rockets;
-		if(!start_ammo_fuel) start_ammo_fuel = g_pickup_fuel;
-		if(!warmup_start_ammo_shells) warmup_start_ammo_shells = g_pickup_shells;
-		if(!warmup_start_ammo_nails) warmup_start_ammo_nails = g_pickup_nails;
-		if(!warmup_start_ammo_cells) warmup_start_ammo_cells = g_pickup_cells;
-		if(!warmup_start_ammo_rockets) warmup_start_ammo_rockets = g_pickup_rockets;
-		if(!warmup_start_ammo_fuel) warmup_start_ammo_fuel = g_pickup_fuel;
-	}
+    if (g_weapon_stay == 2)
+    {
+        if (!start_ammo_shells) start_ammo_shells = g_pickup_shells;
+        if (!start_ammo_nails) start_ammo_nails = g_pickup_nails;
+        if (!start_ammo_cells) start_ammo_cells = g_pickup_cells;
+        if (!start_ammo_rockets) start_ammo_rockets = g_pickup_rockets;
+        if (!start_ammo_fuel) start_ammo_fuel = g_pickup_fuel;
+        if (!warmup_start_ammo_shells) warmup_start_ammo_shells = g_pickup_shells;
+        if (!warmup_start_ammo_nails) warmup_start_ammo_nails = g_pickup_nails;
+        if (!warmup_start_ammo_cells) warmup_start_ammo_cells = g_pickup_cells;
+        if (!warmup_start_ammo_rockets) warmup_start_ammo_rockets = g_pickup_rockets;
+        if (!warmup_start_ammo_fuel) warmup_start_ammo_fuel = g_pickup_fuel;
+    }
 
-	start_ammo_shells = max(0, start_ammo_shells);
-	start_ammo_nails = max(0, start_ammo_nails);
-	start_ammo_cells = max(0, start_ammo_cells);
-	start_ammo_rockets = max(0, start_ammo_rockets);
-	start_ammo_fuel = max(0, start_ammo_fuel);
+    start_ammo_shells = max(0, start_ammo_shells);
+    start_ammo_nails = max(0, start_ammo_nails);
+    start_ammo_cells = max(0, start_ammo_cells);
+    start_ammo_rockets = max(0, start_ammo_rockets);
+    start_ammo_fuel = max(0, start_ammo_fuel);
 
-	warmup_start_ammo_shells = max(0, warmup_start_ammo_shells);
-	warmup_start_ammo_nails = max(0, warmup_start_ammo_nails);
-	warmup_start_ammo_cells = max(0, warmup_start_ammo_cells);
-	warmup_start_ammo_rockets = max(0, warmup_start_ammo_rockets);
-	warmup_start_ammo_fuel = max(0, warmup_start_ammo_fuel);
+    warmup_start_ammo_shells = max(0, warmup_start_ammo_shells);
+    warmup_start_ammo_nails = max(0, warmup_start_ammo_nails);
+    warmup_start_ammo_cells = max(0, warmup_start_ammo_cells);
+    warmup_start_ammo_rockets = max(0, warmup_start_ammo_rockets);
+    warmup_start_ammo_fuel = max(0, warmup_start_ammo_fuel);
 }
 
 float g_bugrigs;
@@ -982,119 +996,122 @@
 
 void readlevelcvars(void)
 {
- 	g_bugrigs = cvar("g_bugrigs");
- 	g_bugrigs_planar_movement = cvar("g_bugrigs_planar_movement");
- 	g_bugrigs_planar_movement_car_jumping = cvar("g_bugrigs_planar_movement_car_jumping");
- 	g_bugrigs_reverse_spinning = cvar("g_bugrigs_reverse_spinning");
- 	g_bugrigs_reverse_speeding = cvar("g_bugrigs_reverse_speeding");
- 	g_bugrigs_reverse_stopping = cvar("g_bugrigs_reverse_stopping");
- 	g_bugrigs_air_steering = cvar("g_bugrigs_air_steering");
- 	g_bugrigs_angle_smoothing = cvar("g_bugrigs_angle_smoothing");
- 	g_bugrigs_friction_floor = cvar("g_bugrigs_friction_floor");
- 	g_bugrigs_friction_brake = cvar("g_bugrigs_friction_brake");
- 	g_bugrigs_friction_air = cvar("g_bugrigs_friction_air");
- 	g_bugrigs_accel = cvar("g_bugrigs_accel");
- 	g_bugrigs_speed_ref = cvar("g_bugrigs_speed_ref");
- 	g_bugrigs_speed_pow = cvar("g_bugrigs_speed_pow");
- 	g_bugrigs_steer = cvar("g_bugrigs_steer");
+    g_bugrigs = cvar("g_bugrigs");
+    g_bugrigs_planar_movement = cvar("g_bugrigs_planar_movement");
+    g_bugrigs_planar_movement_car_jumping = cvar("g_bugrigs_planar_movement_car_jumping");
+    g_bugrigs_reverse_spinning = cvar("g_bugrigs_reverse_spinning");
+    g_bugrigs_reverse_speeding = cvar("g_bugrigs_reverse_speeding");
+    g_bugrigs_reverse_stopping = cvar("g_bugrigs_reverse_stopping");
+    g_bugrigs_air_steering = cvar("g_bugrigs_air_steering");
+    g_bugrigs_angle_smoothing = cvar("g_bugrigs_angle_smoothing");
+    g_bugrigs_friction_floor = cvar("g_bugrigs_friction_floor");
+    g_bugrigs_friction_brake = cvar("g_bugrigs_friction_brake");
+    g_bugrigs_friction_air = cvar("g_bugrigs_friction_air");
+    g_bugrigs_accel = cvar("g_bugrigs_accel");
+    g_bugrigs_speed_ref = cvar("g_bugrigs_speed_ref");
+    g_bugrigs_speed_pow = cvar("g_bugrigs_speed_pow");
+    g_bugrigs_steer = cvar("g_bugrigs_steer");
 
-	g_touchexplode = cvar("g_touchexplode");
-	g_touchexplode_radius = cvar("g_touchexplode_radius");
-	g_touchexplode_damage = cvar("g_touchexplode_damage");
-	g_touchexplode_edgedamage = cvar("g_touchexplode_edgedamage");
-	g_touchexplode_force = cvar("g_touchexplode_force");
+    g_touchexplode = cvar("g_touchexplode");
+    g_touchexplode_radius = cvar("g_touchexplode_radius");
+    g_touchexplode_damage = cvar("g_touchexplode_damage");
+    g_touchexplode_edgedamage = cvar("g_touchexplode_edgedamage");
+    g_touchexplode_force = cvar("g_touchexplode_force");
 
- 	sv_clforceplayermodels = cvar("sv_clforceplayermodels");
- 	sv_clones = cvar("sv_clones");
-	sv_cheats = cvar("sv_cheats");
-	sv_gentle = cvar("sv_gentle");
-	sv_foginterval = cvar("sv_foginterval");
-	g_cloaked = cvar("g_cloaked");
-	g_jump_grunt = cvar("g_jump_grunt");
-	g_footsteps = cvar("g_footsteps");
-	g_grappling_hook = cvar("g_grappling_hook");
-	g_jetpack = cvar("g_jetpack");
-	g_laserguided_missile = cvar("g_laserguided_missile");
-	g_midair = cvar("g_midair");
-	g_minstagib = cvar("g_minstagib");
-	g_nixnex = cvar("g_nixnex");
-	g_nixnex_with_laser = cvar("g_nixnex_with_laser");
-	g_norecoil = cvar("g_norecoil");
-	g_vampire = cvar("g_vampire");
-	g_bloodloss = cvar("g_bloodloss");
-	sv_maxidle = cvar("sv_maxidle");
-	sv_maxidle_spectatorsareidle = cvar("sv_maxidle_spectatorsareidle");
-	sv_pogostick = cvar("sv_pogostick");
-	sv_doublejump = cvar("sv_doublejump");
-	g_maplist_allow_hidden = cvar("g_maplist_allow_hidden");
-	g_ctf_reverse = cvar("g_ctf_reverse");
+    sv_clforceplayermodels = cvar("sv_clforceplayermodels");
+    sv_loddistance1 = cvar("sv_loddistance1");
+    sv_loddistance2 = cvar("sv_loddistance2");
+	if(sv_loddistance2 <= sv_loddistance1)
+		sv_loddistance2 = 1073741824; // enough to turn off LOD 2 reliably
+    sv_clones = cvar("sv_clones");
+    sv_cheats = cvar("sv_cheats");
+    sv_gentle = cvar("sv_gentle");
+    sv_foginterval = cvar("sv_foginterval");
+    g_cloaked = cvar("g_cloaked");
+    g_jump_grunt = cvar("g_jump_grunt");
+    g_footsteps = cvar("g_footsteps");
+    g_grappling_hook = cvar("g_grappling_hook");
+    g_jetpack = cvar("g_jetpack");
+    g_laserguided_missile = cvar("g_laserguided_missile");
+    g_midair = cvar("g_midair");
+    g_minstagib = cvar("g_minstagib");
+    g_nixnex = cvar("g_nixnex");
+    g_nixnex_with_laser = cvar("g_nixnex_with_laser");
+    g_norecoil = cvar("g_norecoil");
+    g_vampire = cvar("g_vampire");
+    g_bloodloss = cvar("g_bloodloss");
+    sv_maxidle = cvar("sv_maxidle");
+    sv_maxidle_spectatorsareidle = cvar("sv_maxidle_spectatorsareidle");
+    sv_pogostick = cvar("sv_pogostick");
+    sv_doublejump = cvar("sv_doublejump");
+    g_ctf_reverse = cvar("g_ctf_reverse");
 
-	inWarmupStage = cvar("g_warmup");
-	g_warmup_limit = cvar("g_warmup_limit");
-	g_warmup_allguns = cvar("g_warmup_allguns");
-	g_warmup_allow_timeout = cvar("g_warmup_allow_timeout");
+    inWarmupStage = cvar("g_warmup");
+    g_warmup_limit = cvar("g_warmup_limit");
+    g_warmup_allguns = cvar("g_warmup_allguns");
+    g_warmup_allow_timeout = cvar("g_warmup_allow_timeout");
 
-	if(g_race && g_race_qualifying == 2 || g_arena || g_assault || cvar("g_campaign"))
-		inWarmupStage = 0; // these modes cannot work together, sorry
+    if (g_race && g_race_qualifying == 2 || g_arena || g_assault || cvar("g_campaign"))
+        inWarmupStage = 0; // these modes cannot work together, sorry
 
-	g_pickup_respawntime_weapon = cvar("g_pickup_respawntime_weapon");
-	g_pickup_respawntime_ammo = cvar("g_pickup_respawntime_ammo");
-	g_pickup_respawntime_short = cvar("g_pickup_respawntime_short");
-	g_pickup_respawntime_medium = cvar("g_pickup_respawntime_medium");
-	g_pickup_respawntime_long = cvar("g_pickup_respawntime_long");
-	g_pickup_respawntime_powerup = cvar("g_pickup_respawntime_powerup");
-	g_pickup_respawntimejitter_weapon = cvar("g_pickup_respawntimejitter_weapon");
-	g_pickup_respawntimejitter_ammo = cvar("g_pickup_respawntimejitter_ammo");
-	g_pickup_respawntimejitter_short = cvar("g_pickup_respawntimejitter_short");
-	g_pickup_respawntimejitter_medium = cvar("g_pickup_respawntimejitter_medium");
-	g_pickup_respawntimejitter_long = cvar("g_pickup_respawntimejitter_long");
-	g_pickup_respawntimejitter_powerup = cvar("g_pickup_respawntimejitter_powerup");
+    g_pickup_respawntime_weapon = cvar("g_pickup_respawntime_weapon");
+    g_pickup_respawntime_ammo = cvar("g_pickup_respawntime_ammo");
+    g_pickup_respawntime_short = cvar("g_pickup_respawntime_short");
+    g_pickup_respawntime_medium = cvar("g_pickup_respawntime_medium");
+    g_pickup_respawntime_long = cvar("g_pickup_respawntime_long");
+    g_pickup_respawntime_powerup = cvar("g_pickup_respawntime_powerup");
+    g_pickup_respawntimejitter_weapon = cvar("g_pickup_respawntimejitter_weapon");
+    g_pickup_respawntimejitter_ammo = cvar("g_pickup_respawntimejitter_ammo");
+    g_pickup_respawntimejitter_short = cvar("g_pickup_respawntimejitter_short");
+    g_pickup_respawntimejitter_medium = cvar("g_pickup_respawntimejitter_medium");
+    g_pickup_respawntimejitter_long = cvar("g_pickup_respawntimejitter_long");
+    g_pickup_respawntimejitter_powerup = cvar("g_pickup_respawntimejitter_powerup");
 
-	if(g_minstagib) g_nixnex = g_weaponarena = 0;
-	if(g_nixnex) g_weaponarena = 0;
-	g_weaponarena = 0;
+    if (g_minstagib) g_nixnex = g_weaponarena = 0;
+    if (g_nixnex) g_weaponarena = 0;
+    g_weaponarena = 0;
 
-	g_weaponspeedfactor = cvar("g_weaponspeedfactor");
-	g_weapondamagefactor = cvar("g_weapondamagefactor");
+    g_weaponspeedfactor = cvar("g_weaponspeedfactor");
+    g_weapondamagefactor = cvar("g_weapondamagefactor");
 
-	g_pickup_shells                    = cvar("g_pickup_shells");
-	g_pickup_shells_max                = cvar("g_pickup_shells_max");
-	g_pickup_nails                     = cvar("g_pickup_nails");
-	g_pickup_nails_max                 = cvar("g_pickup_nails_max");
-	g_pickup_rockets                   = cvar("g_pickup_rockets");
-	g_pickup_rockets_max               = cvar("g_pickup_rockets_max");
-	g_pickup_cells                     = cvar("g_pickup_cells");
-	g_pickup_cells_max                 = cvar("g_pickup_cells_max");
-	g_pickup_fuel                     = cvar("g_pickup_fuel");
-	g_pickup_fuel_jetpack             = cvar("g_pickup_fuel_jetpack");
-	g_pickup_fuel_max                 = cvar("g_pickup_fuel_max");
-	g_pickup_armorsmall                = cvar("g_pickup_armorsmall");
-	g_pickup_armorsmall_max            = cvar("g_pickup_armorsmall_max");
-	g_pickup_armormedium               = cvar("g_pickup_armormedium");
-	g_pickup_armormedium_max           = cvar("g_pickup_armormedium_max");
-	g_pickup_armorbig                  = cvar("g_pickup_armorbig");
-	g_pickup_armorbig_max              = cvar("g_pickup_armorbig_max");
-	g_pickup_armorlarge                = cvar("g_pickup_armorlarge");
-	g_pickup_armorlarge_max            = cvar("g_pickup_armorlarge_max");
-	g_pickup_healthsmall               = cvar("g_pickup_healthsmall");
-	g_pickup_healthsmall_max           = cvar("g_pickup_healthsmall_max");
-	g_pickup_healthmedium              = cvar("g_pickup_healthmedium");
-	g_pickup_healthmedium_max          = cvar("g_pickup_healthmedium_max");
-	g_pickup_healthlarge               = cvar("g_pickup_healthlarge");
-	g_pickup_healthlarge_max           = cvar("g_pickup_healthlarge_max");
-	g_pickup_healthmega                = cvar("g_pickup_healthmega");
-	g_pickup_healthmega_max            = cvar("g_pickup_healthmega_max");
+    g_pickup_shells                    = cvar("g_pickup_shells");
+    g_pickup_shells_max                = cvar("g_pickup_shells_max");
+    g_pickup_nails                     = cvar("g_pickup_nails");
+    g_pickup_nails_max                 = cvar("g_pickup_nails_max");
+    g_pickup_rockets                   = cvar("g_pickup_rockets");
+    g_pickup_rockets_max               = cvar("g_pickup_rockets_max");
+    g_pickup_cells                     = cvar("g_pickup_cells");
+    g_pickup_cells_max                 = cvar("g_pickup_cells_max");
+    g_pickup_fuel                     = cvar("g_pickup_fuel");
+    g_pickup_fuel_jetpack             = cvar("g_pickup_fuel_jetpack");
+    g_pickup_fuel_max                 = cvar("g_pickup_fuel_max");
+    g_pickup_armorsmall                = cvar("g_pickup_armorsmall");
+    g_pickup_armorsmall_max            = cvar("g_pickup_armorsmall_max");
+    g_pickup_armormedium               = cvar("g_pickup_armormedium");
+    g_pickup_armormedium_max           = cvar("g_pickup_armormedium_max");
+    g_pickup_armorbig                  = cvar("g_pickup_armorbig");
+    g_pickup_armorbig_max              = cvar("g_pickup_armorbig_max");
+    g_pickup_armorlarge                = cvar("g_pickup_armorlarge");
+    g_pickup_armorlarge_max            = cvar("g_pickup_armorlarge_max");
+    g_pickup_healthsmall               = cvar("g_pickup_healthsmall");
+    g_pickup_healthsmall_max           = cvar("g_pickup_healthsmall_max");
+    g_pickup_healthmedium              = cvar("g_pickup_healthmedium");
+    g_pickup_healthmedium_max          = cvar("g_pickup_healthmedium_max");
+    g_pickup_healthlarge               = cvar("g_pickup_healthlarge");
+    g_pickup_healthlarge_max           = cvar("g_pickup_healthlarge_max");
+    g_pickup_healthmega                = cvar("g_pickup_healthmega");
+    g_pickup_healthmega_max            = cvar("g_pickup_healthmega_max");
 
-	g_pinata = cvar("g_pinata");
+    g_pinata = cvar("g_pinata");
 
-	g_weapon_stay = cvar("g_weapon_stay");
-	if(!g_weapon_stay && (cvar("deathmatch") == 2))
-		g_weapon_stay = 1;
+    g_weapon_stay = cvar("g_weapon_stay");
+    if (!g_weapon_stay && (cvar("deathmatch") == 2))
+        g_weapon_stay = 1;
 
-	if not(inWarmupStage)
-		game_starttime                 = cvar("g_start_delay");
+    if not(inWarmupStage)
+        game_starttime                 = cvar("g_start_delay");
 
-	readplayerstartcvars();
+    readplayerstartcvars();
 }
 
 /*
@@ -1129,412 +1146,419 @@
 
 float sound_allowed(float dest, entity e)
 {
-	// sounds from world may always pass
-	for(;;)
-	{
-		if(e.classname == "body")
-			e = e.enemy;
-		if(e.owner && e.owner != e)
-			e = e.owner;
-		else
-			break;
-	}
-	// sounds to self may always pass
-	if(dest == MSG_ONE)
-		if(e == msg_entity)
-			return TRUE;
-	// sounds by players can be removed
-	if(cvar("bot_sound_monopoly"))
-		if(clienttype(e) == CLIENTTYPE_REAL)
-			return FALSE;
-	// anything else may pass
-	return TRUE;
+    // sounds from world may always pass
+    for (;;)
+    {
+        if (e.classname == "body")
+            e = e.enemy;
+        if (e.owner && e.owner != e)
+            e = e.owner;
+        else
+            break;
+    }
+    // sounds to self may always pass
+    if (dest == MSG_ONE)
+        if (e == msg_entity)
+            return TRUE;
+    // sounds by players can be removed
+    if (cvar("bot_sound_monopoly"))
+        if (clienttype(e) == CLIENTTYPE_REAL)
+            return FALSE;
+    // anything else may pass
+    return TRUE;
 }
 
 void sound(entity e, float chan, string samp, float vol, float atten)
 {
-	if(!sound_allowed(MSG_BROADCAST, e))
-		return;
-	sound_builtin(e, chan, samp, vol, atten);
+    if (!sound_allowed(MSG_BROADCAST, e))
+        return;
+    sound_builtin(e, chan, samp, vol, atten);
 }
 void soundtoat(float dest, entity e, vector o, float chan, string samp, float vol, float atten)
 {
-	float entno, idx;
+    float entno, idx;
 
-	if(!sound_allowed(dest, e))
-		return;
+    if (!sound_allowed(dest, e))
+        return;
 
-	entno = num_for_edict(e);
-	idx = precache_sound_index(samp);
+    entno = num_for_edict(e);
+    idx = precache_sound_index(samp);
 
-	float sflags;
-	sflags = 0;
+    float sflags;
+    sflags = 0;
 
-	atten = floor(atten * 64);
-	vol = floor(vol * 255);
+    atten = floor(atten * 64);
+    vol = floor(vol * 255);
 
-	if(vol != 255)
-		sflags |= SND_VOLUME;
-	if(atten != 64)
-		sflags |= SND_ATTENUATION;
-	if(entno >= 8192)
-		sflags |= SND_LARGEENTITY;
-	if(idx >= 256)
-		sflags |= SND_LARGESOUND;
+    if (vol != 255)
+        sflags |= SND_VOLUME;
+    if (atten != 64)
+        sflags |= SND_ATTENUATION;
+    if (entno >= 8192)
+        sflags |= SND_LARGEENTITY;
+    if (idx >= 256)
+        sflags |= SND_LARGESOUND;
 
-	WriteByte(dest, SVC_SOUND);
-	WriteByte(dest, sflags);
-	if(sflags & SND_VOLUME)
-		WriteByte(dest, vol);
-	if(sflags & SND_ATTENUATION)
-		WriteByte(dest, atten);
-	if(sflags & SND_LARGEENTITY)
-	{
-		WriteShort(dest, entno);
-		WriteByte(dest, chan);
-	}
-	else
-	{
-		WriteShort(dest, entno * 8 + chan);
-	}
-	if(sflags & SND_LARGESOUND)
-		WriteShort(dest, idx);
-	else
-		WriteByte(dest, idx);
+    WriteByte(dest, SVC_SOUND);
+    WriteByte(dest, sflags);
+    if (sflags & SND_VOLUME)
+        WriteByte(dest, vol);
+    if (sflags & SND_ATTENUATION)
+        WriteByte(dest, atten);
+    if (sflags & SND_LARGEENTITY)
+    {
+        WriteShort(dest, entno);
+        WriteByte(dest, chan);
+    }
+    else
+    {
+        WriteShort(dest, entno * 8 + chan);
+    }
+    if (sflags & SND_LARGESOUND)
+        WriteShort(dest, idx);
+    else
+        WriteByte(dest, idx);
 
-	WriteCoord(dest, o_x);
-	WriteCoord(dest, o_y);
-	WriteCoord(dest, o_z);
+    WriteCoord(dest, o_x);
+    WriteCoord(dest, o_y);
+    WriteCoord(dest, o_z);
 }
 void soundto(float dest, entity e, float chan, string samp, float vol, float atten)
 {
-	vector o;
+    vector o;
 
-	if(!sound_allowed(dest, e))
-		return;
+    if (!sound_allowed(dest, e))
+        return;
 
-	o = e.origin + 0.5 * (e.mins + e.maxs);
-	soundtoat(dest, e, o, chan, samp, vol, atten);
+    o = e.origin + 0.5 * (e.mins + e.maxs);
+    soundtoat(dest, e, o, chan, samp, vol, atten);
 }
 void soundat(entity e, vector o, float chan, string samp, float vol, float atten)
 {
-	soundtoat(MSG_BROADCAST, e, o, chan, samp, vol, atten);
+    soundtoat(MSG_BROADCAST, e, o, chan, samp, vol, atten);
 }
 void stopsoundto(float dest, entity e, float chan)
 {
-	float entno;
+    float entno;
 
-	if(!sound_allowed(dest, e))
-		return;
+    if (!sound_allowed(dest, e))
+        return;
 
-	entno = num_for_edict(e);
+    entno = num_for_edict(e);
 
-	if(entno >= 8192)
-	{
-		float idx, sflags;
-		idx = precache_sound_index("misc/null.wav");
-		sflags = SND_LARGEENTITY;
-		if(idx >= 256)
-			sflags |= SND_LARGESOUND;
-		WriteByte(dest, SVC_SOUND);
-		WriteByte(dest, sflags);
-		WriteShort(dest, entno);
-		WriteByte(dest, chan);
-		if(sflags & SND_LARGESOUND)
-			WriteShort(dest, idx);
-		else
-			WriteByte(dest, idx);
-		WriteCoord(dest, e.origin_x);
-		WriteCoord(dest, e.origin_y);
-		WriteCoord(dest, e.origin_z);
-	}
-	else
-	{
-		WriteByte(dest, SVC_STOPSOUND);
-		WriteShort(dest, entno * 8 + chan);
-	}
+    if (entno >= 8192)
+    {
+        float idx, sflags;
+        idx = precache_sound_index("misc/null.wav");
+        sflags = SND_LARGEENTITY;
+        if (idx >= 256)
+            sflags |= SND_LARGESOUND;
+        WriteByte(dest, SVC_SOUND);
+        WriteByte(dest, sflags);
+        WriteShort(dest, entno);
+        WriteByte(dest, chan);
+        if (sflags & SND_LARGESOUND)
+            WriteShort(dest, idx);
+        else
+            WriteByte(dest, idx);
+        WriteCoord(dest, e.origin_x);
+        WriteCoord(dest, e.origin_y);
+        WriteCoord(dest, e.origin_z);
+    }
+    else
+    {
+        WriteByte(dest, SVC_STOPSOUND);
+        WriteShort(dest, entno * 8 + chan);
+    }
 }
 void stopsound(entity e, float chan)
 {
-	if(!sound_allowed(MSG_BROADCAST, e))
-		return;
+    if (!sound_allowed(MSG_BROADCAST, e))
+        return;
 
-	stopsoundto(MSG_BROADCAST, e, chan); // unreliable, gets there fast
-	stopsoundto(MSG_ALL, e, chan); // in case of packet loss
+    stopsoundto(MSG_BROADCAST, e, chan); // unreliable, gets there fast
+    stopsoundto(MSG_ALL, e, chan); // in case of packet loss
 }
 
 void play2(entity e, string filename)
 {
-	//stuffcmd(e, strcat("play2 ", filename, "\n"));
-	msg_entity = e;
-	soundtoat(MSG_ONE, world, '0 0 0', CHAN_AUTO, filename, VOL_BASE, ATTN_NONE);
+    //stuffcmd(e, strcat("play2 ", filename, "\n"));
+    msg_entity = e;
+    soundtoat(MSG_ONE, world, '0 0 0', CHAN_AUTO, filename, VOL_BASE, ATTN_NONE);
 }
 
 .float announcetime;
 float announce(entity player, string msg)
 {
-	if(time > player.announcetime)
-	if(clienttype(player) == CLIENTTYPE_REAL)
-	{
-		player.announcetime = time + 0.8;
-		play2(player, msg);
-		return TRUE;
-	}
-	return FALSE;
+    if (time > player.announcetime)
+        if (clienttype(player) == CLIENTTYPE_REAL)
+        {
+            player.announcetime = time + 0.8;
+            play2(player, msg);
+            return TRUE;
+        }
+    return FALSE;
 }
 // use this one if you might be causing spam (e.g. from touch functions that might get called more than once per frame)
 float spamsound(entity e, float chan, string samp, float vol, float atten)
 {
-	if(!sound_allowed(MSG_BROADCAST, e))
-		return FALSE;
+    if (!sound_allowed(MSG_BROADCAST, e))
+        return FALSE;
 
-	if(time > e.announcetime)
-	{
-		e.announcetime = time;
-		sound(e, chan, samp, vol, atten);
-		return TRUE;
-	}
-	return FALSE;
+    if (time > e.announcetime)
+    {
+        e.announcetime = time;
+        sound(e, chan, samp, vol, atten);
+        return TRUE;
+    }
+    return FALSE;
 }
 
 void play2team(float t, string filename)
 {
-	local entity head;
+    local entity head;
 
-	if(cvar("bot_sound_monopoly"))
-		return;
+    if (cvar("bot_sound_monopoly"))
+        return;
 
-	FOR_EACH_REALPLAYER(head)
-	{
-		if (head.team == t)
-			play2(head, filename);
-	}
+    FOR_EACH_REALPLAYER(head)
+    {
+        if (head.team == t)
+            play2(head, filename);
+    }
 }
 
 void play2all(string samp)
 {
-	if(cvar("bot_sound_monopoly"))
-		return;
+    if (cvar("bot_sound_monopoly"))
+        return;
 
-	sound(world, CHAN_AUTO, samp, VOL_BASE, ATTN_NONE);
+    sound(world, CHAN_AUTO, samp, VOL_BASE, ATTN_NONE);
 }
 
 void PrecachePlayerSounds(string f);
 void precache_all_models(string pattern)
 {
-	float globhandle, i, n;
-	string f;
+    float globhandle, i, n;
+    string f;
 
-	globhandle = search_begin(pattern, TRUE, FALSE);
-	if(globhandle < 0)
-		return;
-	n = search_getsize(globhandle);
-	for(i = 0; i < n; ++i)
-	{
+    globhandle = search_begin(pattern, TRUE, FALSE);
+    if (globhandle < 0)
+        return;
+    n = search_getsize(globhandle);
+    for (i = 0; i < n; ++i)
+    {
 		//print(search_getfilename(globhandle, i), "\n");
 		f = search_getfilename(globhandle, i);
-		precache_model(f);
+		if(sv_loddistance1)
+			precache_model(f);
+		if(substring(f, -9,5) == "_lod1")
+			continue;
+		if(substring(f, -9,5) == "_lod2")
+			continue;
+		if(!sv_loddistance1)
+			precache_model(f);
 		PrecachePlayerSounds(strcat(f, ".sounds"));
-	}
-	search_end(globhandle);
+    }
+    search_end(globhandle);
 }
 
 void precache()
 {
-	// gamemode related things
-	precache_model ("models/misc/chatbubble.spr");
-	precache_model ("models/misc/teambubble.spr");
-	if (g_runematch)
-	{
-		precache_model ("models/runematch/curse.mdl");
-		precache_model ("models/runematch/rune.mdl");
-	}
+    // gamemode related things
+    precache_model ("models/misc/chatbubble.spr");
+    precache_model ("models/misc/teambubble.spr");
+    if (g_runematch)
+    {
+        precache_model ("models/runematch/curse.mdl");
+        precache_model ("models/runematch/rune.mdl");
+    }
 
 #ifdef TTURRETS_ENABLED
-    if(cvar("g_turrets"))
+    if (cvar("g_turrets"))
         turrets_precash();
 #endif
 
-	// Precache all player models if desired
-	if (cvar("sv_precacheplayermodels"))
-	{
-		PrecachePlayerSounds("sound/player/default.sounds");
-		precache_all_models("models/player/*.zym");
-		precache_all_models("models/player/*.dpm");
-		precache_all_models("models/player/*.md3");
-		precache_all_models("models/player/*.psk");
-		//precache_model("models/player/carni.zym");
-		//precache_model("models/player/crash.zym");
-		//precache_model("models/player/grunt.zym");
-		//precache_model("models/player/headhunter.zym");
-		//precache_model("models/player/insurrectionist.zym");
-		//precache_model("models/player/jeandarc.zym");
-		//precache_model("models/player/lurk.zym");
-		//precache_model("models/player/lycanthrope.zym");
-		//precache_model("models/player/marine.zym");
-		//precache_model("models/player/nexus.zym");
-		//precache_model("models/player/pyria.zym");
-		//precache_model("models/player/shock.zym");
-		//precache_model("models/player/skadi.zym");
-		//precache_model("models/player/specop.zym");
-		//precache_model("models/player/visitant.zym");
-	}
+    // Precache all player models if desired
+    if (cvar("sv_precacheplayermodels"))
+    {
+        PrecachePlayerSounds("sound/player/default.sounds");
+        precache_all_models("models/player/*.zym");
+        precache_all_models("models/player/*.dpm");
+        precache_all_models("models/player/*.md3");
+        precache_all_models("models/player/*.psk");
+        //precache_model("models/player/carni.zym");
+        //precache_model("models/player/crash.zym");
+        //precache_model("models/player/grunt.zym");
+        //precache_model("models/player/headhunter.zym");
+        //precache_model("models/player/insurrectionist.zym");
+        //precache_model("models/player/jeandarc.zym");
+        //precache_model("models/player/lurk.zym");
+        //precache_model("models/player/lycanthrope.zym");
+        //precache_model("models/player/marine.zym");
+        //precache_model("models/player/nexus.zym");
+        //precache_model("models/player/pyria.zym");
+        //precache_model("models/player/shock.zym");
+        //precache_model("models/player/skadi.zym");
+        //precache_model("models/player/specop.zym");
+        //precache_model("models/player/visitant.zym");
+    }
 
-	if(cvar("sv_defaultcharacter"))
-	{
-		string s;
-		s = cvar_string("sv_defaultplayermodel_red");
-		if(s != "")
-		{
-			precache_model(s);
-			PrecachePlayerSounds(strcat(s, ".sounds"));
-		}
-		s = cvar_string("sv_defaultplayermodel_blue");
-		if(s != "")
-		{
-			precache_model(s);
-			PrecachePlayerSounds(strcat(s, ".sounds"));
-		}
-		s = cvar_string("sv_defaultplayermodel_yellow");
-		if(s != "")
-		{
-			precache_model(s);
-			PrecachePlayerSounds(strcat(s, ".sounds"));
-		}
-		s = cvar_string("sv_defaultplayermodel_pink");
-		if(s != "")
-		{
-			precache_model(s);
-			PrecachePlayerSounds(strcat(s, ".sounds"));
-		}
-		s = cvar_string("sv_defaultplayermodel");
-		if(s != "")
-		{
-			precache_model(s);
-			PrecachePlayerSounds(strcat(s, ".sounds"));
-		}
-	}
+    if (cvar("sv_defaultcharacter"))
+    {
+        string s;
+        s = cvar_string("sv_defaultplayermodel_red");
+        if (s != "")
+        {
+            precache_model(s);
+            PrecachePlayerSounds(strcat(s, ".sounds"));
+        }
+        s = cvar_string("sv_defaultplayermodel_blue");
+        if (s != "")
+        {
+            precache_model(s);
+            PrecachePlayerSounds(strcat(s, ".sounds"));
+        }
+        s = cvar_string("sv_defaultplayermodel_yellow");
+        if (s != "")
+        {
+            precache_model(s);
+            PrecachePlayerSounds(strcat(s, ".sounds"));
+        }
+        s = cvar_string("sv_defaultplayermodel_pink");
+        if (s != "")
+        {
+            precache_model(s);
+            PrecachePlayerSounds(strcat(s, ".sounds"));
+        }
+        s = cvar_string("sv_defaultplayermodel");
+        if (s != "")
+        {
+            precache_model(s);
+            PrecachePlayerSounds(strcat(s, ".sounds"));
+        }
+    }
 
-	if (g_footsteps)
-	{
-		PrecacheGlobalSound((globalsound_step = "misc/footstep0 6"));
-		PrecacheGlobalSound((globalsound_metalstep = "misc/metalfootstep0 6"));
-	}
+    if (g_footsteps)
+    {
+        PrecacheGlobalSound((globalsound_step = "misc/footstep0 6"));
+        PrecacheGlobalSound((globalsound_metalstep = "misc/metalfootstep0 6"));
+    }
 
-	// gore and miscellaneous sounds
-	//precache_sound ("misc/h2ohit.wav");
-	precache_model ("models/hook.md3");
-	precache_sound ("misc/armorimpact.wav");
-	precache_sound ("misc/bodyimpact1.wav");
-	precache_sound ("misc/bodyimpact2.wav");
-	precache_sound ("misc/gib.wav");
-	precache_sound ("misc/gib_splat01.wav");
-	precache_sound ("misc/gib_splat02.wav");
-	precache_sound ("misc/gib_splat03.wav");
-	precache_sound ("misc/gib_splat04.wav");
-	precache_sound ("misc/hit.wav");
-	PrecacheGlobalSound((globalsound_fall = "misc/hitground 4"));
-	PrecacheGlobalSound((globalsound_metalfall = "misc/metalhitground 4"));
-	precache_sound ("misc/null.wav");
-	precache_sound ("misc/spawn.wav");
-	precache_sound ("misc/talk.wav");
-	precache_sound ("misc/teleport.wav");
-	precache_sound ("misc/poweroff.wav");
-	precache_sound ("player/lava.wav");
-	precache_sound ("player/slime.wav");
-	
-	if(g_jetpack)
-		precache_sound ("misc/jetpack_fly.wav");
+    // gore and miscellaneous sounds
+    //precache_sound ("misc/h2ohit.wav");
+    precache_model ("models/hook.md3");
+    precache_sound ("misc/armorimpact.wav");
+    precache_sound ("misc/bodyimpact1.wav");
+    precache_sound ("misc/bodyimpact2.wav");
+    precache_sound ("misc/gib.wav");
+    precache_sound ("misc/gib_splat01.wav");
+    precache_sound ("misc/gib_splat02.wav");
+    precache_sound ("misc/gib_splat03.wav");
+    precache_sound ("misc/gib_splat04.wav");
+    precache_sound ("misc/hit.wav");
+    PrecacheGlobalSound((globalsound_fall = "misc/hitground 4"));
+    PrecacheGlobalSound((globalsound_metalfall = "misc/metalhitground 4"));
+    precache_sound ("misc/null.wav");
+    precache_sound ("misc/spawn.wav");
+    precache_sound ("misc/talk.wav");
+    precache_sound ("misc/teleport.wav");
+    precache_sound ("misc/poweroff.wav");
+    precache_sound ("player/lava.wav");
+    precache_sound ("player/slime.wav");
 
-	// announcer sounds - male
-	precache_sound ("announcer/male/electrobitch.wav");
-	precache_sound ("announcer/male/airshot.wav");
-	precache_sound ("announcer/male/03kills.wav");
-	precache_sound ("announcer/male/05kills.wav");
-	precache_sound ("announcer/male/10kills.wav");
-	precache_sound ("announcer/male/15kills.wav");
-	precache_sound ("announcer/male/20kills.wav");
-	precache_sound ("announcer/male/25kills.wav");
-	precache_sound ("announcer/male/30kills.wav");
-	precache_sound ("announcer/male/botlike.wav");
-	precache_sound ("announcer/male/yoda.wav");
-	precache_sound ("announcer/male/amazing.wav");
-	precache_sound ("announcer/male/awesome.wav");
-	precache_sound ("announcer/male/headshot.wav");
-	precache_sound ("announcer/male/impressive.wav");
+    if (g_jetpack)
+        precache_sound ("misc/jetpack_fly.wav");
 
-	// announcer sounds - robotic
-	precache_sound ("announcer/robotic/prepareforbattle.wav");
-	precache_sound ("announcer/robotic/begin.wav");
-	precache_sound ("announcer/robotic/timeoutcalled.wav");
-	precache_sound ("announcer/robotic/1fragleft.wav");
-	precache_sound ("announcer/robotic/2fragsleft.wav");
-	precache_sound ("announcer/robotic/3fragsleft.wav");
-	if (g_minstagib)
-	{
-		precache_sound ("announcer/robotic/lastsecond.wav");
-		precache_sound ("announcer/robotic/narrowly.wav");
-	}
+    // announcer sounds - male
+    precache_sound ("announcer/male/electrobitch.wav");
+    precache_sound ("announcer/male/airshot.wav");
+    precache_sound ("announcer/male/03kills.wav");
+    precache_sound ("announcer/male/05kills.wav");
+    precache_sound ("announcer/male/10kills.wav");
+    precache_sound ("announcer/male/15kills.wav");
+    precache_sound ("announcer/male/20kills.wav");
+    precache_sound ("announcer/male/25kills.wav");
+    precache_sound ("announcer/male/30kills.wav");
+    precache_sound ("announcer/male/botlike.wav");
+    precache_sound ("announcer/male/yoda.wav");
+    precache_sound ("announcer/male/amazing.wav");
+    precache_sound ("announcer/male/awesome.wav");
+    precache_sound ("announcer/male/headshot.wav");
+    precache_sound ("announcer/male/impressive.wav");
 
-	precache_model ("models/sprites/1.spr32");
-	precache_model ("models/sprites/2.spr32");
-	precache_model ("models/sprites/3.spr32");
-	precache_model ("models/sprites/4.spr32");
-	precache_model ("models/sprites/5.spr32");
-	precache_model ("models/sprites/6.spr32");
-	precache_model ("models/sprites/7.spr32");
-	precache_model ("models/sprites/8.spr32");
-	precache_model ("models/sprites/9.spr32");
-	precache_model ("models/sprites/10.spr32");
-	precache_sound ("announcer/robotic/1.wav");
-	precache_sound ("announcer/robotic/2.wav");
-	precache_sound ("announcer/robotic/3.wav");
-	precache_sound ("announcer/robotic/4.wav");
-	precache_sound ("announcer/robotic/5.wav");
-	precache_sound ("announcer/robotic/6.wav");
-	precache_sound ("announcer/robotic/7.wav");
-	precache_sound ("announcer/robotic/8.wav");
-	precache_sound ("announcer/robotic/9.wav");
-	precache_sound ("announcer/robotic/10.wav");
+    // announcer sounds - robotic
+    precache_sound ("announcer/robotic/prepareforbattle.wav");
+    precache_sound ("announcer/robotic/begin.wav");
+    precache_sound ("announcer/robotic/timeoutcalled.wav");
+    precache_sound ("announcer/robotic/1fragleft.wav");
+    precache_sound ("announcer/robotic/2fragsleft.wav");
+    precache_sound ("announcer/robotic/3fragsleft.wav");
+    if (g_minstagib)
+    {
+        precache_sound ("announcer/robotic/lastsecond.wav");
+        precache_sound ("announcer/robotic/narrowly.wav");
+    }
 
-	// common weapon precaches
-	precache_sound ("weapons/weapon_switch.wav");
-	precache_sound ("weapons/weaponpickup.wav");
-	precache_sound ("weapons/unavailable.wav");
-	if(g_grappling_hook)
-	{
-		precache_sound ("weapons/hook_fire.wav"); // hook
-		precache_sound ("weapons/hook_impact.wav"); // hook
-	}
+    precache_model ("models/sprites/1.spr32");
+    precache_model ("models/sprites/2.spr32");
+    precache_model ("models/sprites/3.spr32");
+    precache_model ("models/sprites/4.spr32");
+    precache_model ("models/sprites/5.spr32");
+    precache_model ("models/sprites/6.spr32");
+    precache_model ("models/sprites/7.spr32");
+    precache_model ("models/sprites/8.spr32");
+    precache_model ("models/sprites/9.spr32");
+    precache_model ("models/sprites/10.spr32");
+    precache_sound ("announcer/robotic/1.wav");
+    precache_sound ("announcer/robotic/2.wav");
+    precache_sound ("announcer/robotic/3.wav");
+    precache_sound ("announcer/robotic/4.wav");
+    precache_sound ("announcer/robotic/5.wav");
+    precache_sound ("announcer/robotic/6.wav");
+    precache_sound ("announcer/robotic/7.wav");
+    precache_sound ("announcer/robotic/8.wav");
+    precache_sound ("announcer/robotic/9.wav");
+    precache_sound ("announcer/robotic/10.wav");
 
-	if (cvar("sv_precacheweapons") || g_nixnex)
-	{
-		//precache weapon models/sounds
-		local float wep;
-		wep = WEP_FIRST;
-		while (wep <= WEP_LAST)
-		{
-			weapon_action(wep, WR_PRECACHE);
-			wep = wep + 1;
-		}
-	}
+    // common weapon precaches
+    precache_sound ("weapons/weapon_switch.wav");
+    precache_sound ("weapons/weaponpickup.wav");
+    precache_sound ("weapons/unavailable.wav");
+    if (g_grappling_hook)
+    {
+        precache_sound ("weapons/hook_fire.wav"); // hook
+        precache_sound ("weapons/hook_impact.wav"); // hook
+    }
 
-	precache_model("models/elaser.mdl");
-	precache_model("models/laser.mdl");
-	precache_model("models/ebomb.mdl");
+    if (cvar("sv_precacheweapons") || g_nixnex)
+    {
+        //precache weapon models/sounds
+        local float wep;
+        wep = WEP_FIRST;
+        while (wep <= WEP_LAST)
+        {
+            weapon_action(wep, WR_PRECACHE);
+            wep = wep + 1;
+        }
+    }
 
+    precache_model("models/elaser.mdl");
+    precache_model("models/laser.mdl");
+    precache_model("models/ebomb.mdl");
+
 #if 0
-	// Disabled this code because it simply does not work (e.g. ignores bgmvolume, overlaps with "cd loop" controlled tracks).
+    // Disabled this code because it simply does not work (e.g. ignores bgmvolume, overlaps with "cd loop" controlled tracks).
 
-	if (!self.noise && self.music) // quake 3 uses the music field
-		self.noise = self.music;
+    if (!self.noise && self.music) // quake 3 uses the music field
+        self.noise = self.music;
 
-	// plays music for the level if there is any
-	if (self.noise)
-	{
-		precache_sound (self.noise);
-		ambientsound ('0 0 0', self.noise, VOL_BASE, ATTN_NONE);
-	}
+    // plays music for the level if there is any
+    if (self.noise)
+    {
+        precache_sound (self.noise);
+        ambientsound ('0 0 0', self.noise, VOL_BASE, ATTN_NONE);
+    }
 #endif
 }
 
@@ -1547,40 +1571,40 @@
 vector ExactTriggerHit_maxs;
 float ExactTriggerHit_Recurse()
 {
-	float s;
-	entity se;
-	float f;
+    float s;
+    entity se;
+    float f;
 
-	tracebox('0 0 0', ExactTriggerHit_mins, ExactTriggerHit_maxs, '0 0 0', MOVE_NORMAL, other);
-	if not(trace_ent)
-		return 0;
-	if(trace_ent == self)
-		return 1;
+    tracebox('0 0 0', ExactTriggerHit_mins, ExactTriggerHit_maxs, '0 0 0', MOVE_NORMAL, other);
+    if not(trace_ent)
+        return 0;
+    if (trace_ent == self)
+        return 1;
 
-	se = trace_ent;
-	s = se.solid;
-	se.solid = SOLID_NOT;
-	f = ExactTriggerHit_Recurse();
-	se.solid = s;
+    se = trace_ent;
+    s = se.solid;
+    se.solid = SOLID_NOT;
+    f = ExactTriggerHit_Recurse();
+    se.solid = s;
 
-	return f;
+    return f;
 }
 
 float ExactTriggerHit()
 {
-	float f, s;
+    float f, s;
 
-	if not(self.modelindex)
-		return 1;
+    if not(self.modelindex)
+        return 1;
 
-	s = self.solid;
-	self.solid = SOLID_BSP;
-	ExactTriggerHit_mins = other.absmin;
-	ExactTriggerHit_maxs = other.absmax;
-	f = ExactTriggerHit_Recurse();
-	self.solid = s;
+    s = self.solid;
+    self.solid = SOLID_BSP;
+    ExactTriggerHit_mins = other.absmin;
+    ExactTriggerHit_maxs = other.absmax;
+    f = ExactTriggerHit_Recurse();
+    self.solid = s;
 
-	return f;
+    return f;
 }
 
 // WARNING: this kills the trace globals
@@ -1604,111 +1628,111 @@
 
 void make_safe_for_remove(entity e)
 {
-	if(e.initialize_entity)
-	{
-		entity ent, prev;
-		for(ent = initialize_entity_first; ent; )
-		{
-			if((ent == e) || ((ent.classname == "initialize_entity") && (ent.enemy == e)))
-			{
-				//print("make_safe_for_remove: getting rid of initializer ", etos(ent), "\n");
-				// skip it in linked list
-				if(prev)
-				{
-					prev.initialize_entity_next = ent.initialize_entity_next;
-					ent = prev.initialize_entity_next;
-				}
-				else
-				{
-					initialize_entity_first = ent.initialize_entity_next;
-					ent = initialize_entity_first;
-				}
-			}
-			else
-			{
-				prev = ent;
-				ent = ent.initialize_entity_next;
-			}
-		}
-	}
+    if (e.initialize_entity)
+    {
+        entity ent, prev;
+        for (ent = initialize_entity_first; ent; )
+        {
+            if ((ent == e) || ((ent.classname == "initialize_entity") && (ent.enemy == e)))
+            {
+                //print("make_safe_for_remove: getting rid of initializer ", etos(ent), "\n");
+                // skip it in linked list
+                if (prev)
+                {
+                    prev.initialize_entity_next = ent.initialize_entity_next;
+                    ent = prev.initialize_entity_next;
+                }
+                else
+                {
+                    initialize_entity_first = ent.initialize_entity_next;
+                    ent = initialize_entity_first;
+                }
+            }
+            else
+            {
+                prev = ent;
+                ent = ent.initialize_entity_next;
+            }
+        }
+    }
 }
 
 void objerror(string s)
 {
-	make_safe_for_remove(self);
-	objerror_builtin(s);
+    make_safe_for_remove(self);
+    objerror_builtin(s);
 }
 
 void remove_unsafely(entity e)
-{ 
-	remove_builtin(e);
+{
+    remove_builtin(e);
 }
 
 void remove_safely(entity e)
 {
-	make_safe_for_remove(e);
-	remove_builtin(e);
+    make_safe_for_remove(e);
+    remove_builtin(e);
 }
 
 void InitializeEntity(entity e, void(void) func, float order)
 {
-	entity prev, cur;
+    entity prev, cur;
 
-	if(!e || e.initialize_entity)
-	{
-		// make a proxy initializer entity
-		entity e_old;
-		e_old = e;
-		e = spawn();
-		e.classname = "initialize_entity";
-		e.enemy = e_old;
-	}
+    if (!e || e.initialize_entity)
+    {
+        // make a proxy initializer entity
+        entity e_old;
+        e_old = e;
+        e = spawn();
+        e.classname = "initialize_entity";
+        e.enemy = e_old;
+    }
 
-	e.initialize_entity = func;
-	e.initialize_entity_order = order;
+    e.initialize_entity = func;
+    e.initialize_entity_order = order;
 
-	cur = initialize_entity_first;
-	for(;;)
-	{
-		if(!cur || cur.initialize_entity_order > order)
-		{
-			// insert between prev and cur
-			if(prev)
-				prev.initialize_entity_next = e;
-			else
-				initialize_entity_first = e;
-			e.initialize_entity_next = cur;
-			return;
-		}
-		prev = cur;
-		cur = cur.initialize_entity_next;
-	}
+    cur = initialize_entity_first;
+    for (;;)
+    {
+        if (!cur || cur.initialize_entity_order > order)
+        {
+            // insert between prev and cur
+            if (prev)
+                prev.initialize_entity_next = e;
+            else
+                initialize_entity_first = e;
+            e.initialize_entity_next = cur;
+            return;
+        }
+        prev = cur;
+        cur = cur.initialize_entity_next;
+    }
 }
 void InitializeEntitiesRun()
 {
-	entity startoflist;
-	startoflist = initialize_entity_first;
-	initialize_entity_first = world;
-	for(self = startoflist; self; )
-	{
-		entity e;
-		var void(void) func;
-		e = self.initialize_entity_next;
-		func = self.initialize_entity;
-		self.initialize_entity_order = 0;
-		self.initialize_entity = func_null;
-		self.initialize_entity_next = world;
-		if(self.classname == "initialize_entity")
-		{
-			entity e_old;
-			e_old = self.enemy;
-			remove_builtin(self);
-			self = e_old;
-		}
-		//dprint("Delayed initialization: ", self.classname, "\n");
-		func();
-		self = e;
-	}
+    entity startoflist;
+    startoflist = initialize_entity_first;
+    initialize_entity_first = world;
+    for (self = startoflist; self; )
+    {
+        entity e;
+        var void(void) func;
+        e = self.initialize_entity_next;
+        func = self.initialize_entity;
+        self.initialize_entity_order = 0;
+        self.initialize_entity = func_null;
+        self.initialize_entity_next = world;
+        if (self.classname == "initialize_entity")
+        {
+            entity e_old;
+            e_old = self.enemy;
+            remove_builtin(self);
+            self = e_old;
+        }
+        //dprint("Delayed initialization: ", self.classname, "\n");
+        func();
+        self = e;
+    }
 }
 
 .float uncustomizeentityforclient_set;
@@ -1716,17 +1740,17 @@
 void(void) SUB_Nullpointer = #0;
 void UncustomizeEntitiesRun()
 {
-	entity oldself;
-	oldself = self;
-	for(self = world; (self = findfloat(self, uncustomizeentityforclient_set, 1)); )
-		self.uncustomizeentityforclient();
-	self = oldself;
+    entity oldself;
+    oldself = self;
+    for (self = world; (self = findfloat(self, uncustomizeentityforclient_set, 1)); )
+        self.uncustomizeentityforclient();
+    self = oldself;
 }
 void SetCustomizer(entity e, float(void) customizer, void(void) uncustomizer)
 {
-	e.customizeentityforclient = customizer;
-	e.uncustomizeentityforclient = uncustomizer;
-	e.uncustomizeentityforclient_set = (uncustomizer != SUB_Nullpointer);
+    e.customizeentityforclient = customizer;
+    e.uncustomizeentityforclient = uncustomizer;
+    e.uncustomizeentityforclient_set = (uncustomizer != SUB_Nullpointer);
 }
 
 .float nottargeted;
@@ -1735,63 +1759,63 @@
 void() SUB_Remove;
 void Net_LinkEntity(entity e, float docull, float dt, float(entity, float) sendfunc)
 {
-	vector mi, ma;
+    vector mi, ma;
 
-	if(e.classname == "")
-		e.classname = "net_linked";
+    if (e.classname == "")
+        e.classname = "net_linked";
 
-	if(e.model == "" || self.modelindex == 0)
-	{
-		mi = e.mins;
-		ma = e.maxs;
-		setmodel(e, "null");
-		setsize(e, mi, ma);
-	}
+    if (e.model == "" || self.modelindex == 0)
+    {
+        mi = e.mins;
+        ma = e.maxs;
+        setmodel(e, "null");
+        setsize(e, mi, ma);
+    }
 
-	e.SendEntity = sendfunc;
-	e.SendFlags = 0xFFFFFF;
+    e.SendEntity = sendfunc;
+    e.SendFlags = 0xFFFFFF;
 
-	if(!docull)
-		e.effects |= EF_NODEPTHTEST;
+    if (!docull)
+        e.effects |= EF_NODEPTHTEST;
 
-	if(dt)
-	{
-		e.nextthink = time + dt;
-		e.think = SUB_Remove;
-	}
+    if (dt)
+    {
+        e.nextthink = time + dt;
+        e.think = SUB_Remove;
+    }
 }
 
 void adaptor_think2touch()
 {
-	entity o;
-	o = other;
-	other = world;
-	self.touch();
-	other = o;
+    entity o;
+    o = other;
+    other = world;
+    self.touch();
+    other = o;
 }
 
 void adaptor_think2use()
 {
-	entity o, a;
-	o = other;
-	a = activator;
-	activator = world;
-	other = world;
-	self.use();
-	other = o;
-	activator = a;
+    entity o, a;
+    o = other;
+    a = activator;
+    activator = world;
+    other = world;
+    self.use();
+    other = o;
+    activator = a;
 }
 
 // deferred dropping
 void DropToFloor_Handler()
 {
-	droptofloor_builtin();
-	self.dropped_origin = self.origin;
+    droptofloor_builtin();
+    self.dropped_origin = self.origin;
 }
 
 void droptofloor()
 {
-	InitializeEntity(self, DropToFloor_Handler, INITPRIO_DROPTOFLOOR);
+    InitializeEntity(self, DropToFloor_Handler, INITPRIO_DROPTOFLOOR);
 }
 
 
@@ -1800,73 +1824,73 @@
 
 float trace_hits_box_1d(float end, float thmi, float thma)
 {
-	if(end == 0)
-	{
-		// just check if x is in range
-		if(0 < thmi)
-			return FALSE;
-		if(0 > thma)
-			return FALSE;
-	}
-	else
-	{
-		// do the trace with respect to x
-		// 0 -> end has to stay in thmi -> thma
-		trace_hits_box_a0 = max(trace_hits_box_a0, min(thmi / end, thma / end));
-		trace_hits_box_a1 = min(trace_hits_box_a1, max(thmi / end, thma / end));
-		if(trace_hits_box_a0 > trace_hits_box_a1)
-			return FALSE;
-	}
-	return TRUE;
+    if (end == 0)
+    {
+        // just check if x is in range
+        if (0 < thmi)
+            return FALSE;
+        if (0 > thma)
+            return FALSE;
+    }
+    else
+    {
+        // do the trace with respect to x
+        // 0 -> end has to stay in thmi -> thma
+        trace_hits_box_a0 = max(trace_hits_box_a0, min(thmi / end, thma / end));
+        trace_hits_box_a1 = min(trace_hits_box_a1, max(thmi / end, thma / end));
+        if (trace_hits_box_a0 > trace_hits_box_a1)
+            return FALSE;
+    }
+    return TRUE;
 }
 
 float trace_hits_box(vector start, vector end, vector thmi, vector thma)
 {
-	end -= start;
-	thmi -= start;
-	thma -= start;
-	// now it is a trace from 0 to end
+    end -= start;
+    thmi -= start;
+    thma -= start;
+    // now it is a trace from 0 to end
 
-	trace_hits_box_a0 = 0;
-	trace_hits_box_a1 = 1;
+    trace_hits_box_a0 = 0;
+    trace_hits_box_a1 = 1;
 
-	if(!trace_hits_box_1d(end_x, thmi_x, thma_x))
-		return FALSE;
-	if(!trace_hits_box_1d(end_y, thmi_y, thma_y))
-		return FALSE;
-	if(!trace_hits_box_1d(end_z, thmi_z, thma_z))
-		return FALSE;
+    if (!trace_hits_box_1d(end_x, thmi_x, thma_x))
+        return FALSE;
+    if (!trace_hits_box_1d(end_y, thmi_y, thma_y))
+        return FALSE;
+    if (!trace_hits_box_1d(end_z, thmi_z, thma_z))
+        return FALSE;
 
-	return TRUE;
+    return TRUE;
 }
 
 float tracebox_hits_box(vector start, vector mi, vector ma, vector end, vector thmi, vector thma)
 {
-	return trace_hits_box(start, end, thmi - ma, thma - mi);
+    return trace_hits_box(start, end, thmi - ma, thma - mi);
 }
 
 float SUB_NoImpactCheck()
 {
-	if(trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOIMPACT)
-		return 1;
-	if(other == world && self.size != '0 0 0')
-	{
-		vector tic;
-		tic = self.velocity * sys_ticrate;
-		tic = tic + normalize(tic) * vlen(self.maxs - self.mins);
-		traceline(self.origin - tic, self.origin + tic, MOVE_NORMAL, self);
-		if(trace_fraction >= 1)
-		{
-			dprint("Odd... did not hit...?\n");
-		}
-		else if (trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOIMPACT)
-		{
-			dprint("Detected and prevented the sky-grapple bug.\n");
-			return 1;
-		}
-	}
+    if (trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOIMPACT)
+        return 1;
+    if (other == world && self.size != '0 0 0')
+    {
+        vector tic;
+        tic = self.velocity * sys_ticrate;
+        tic = tic + normalize(tic) * vlen(self.maxs - self.mins);
+        traceline(self.origin - tic, self.origin + tic, MOVE_NORMAL, self);
+        if (trace_fraction >= 1)
+        {
+            dprint("Odd... did not hit...?\n");
+        }
+        else if (trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOIMPACT)
+        {
+            dprint("Detected and prevented the sky-grapple bug.\n");
+            return 1;
+        }
+    }
 
-	return 0;
+    return 0;
 }
 
 #define SUB_OwnerCheck() (other && (other == self.owner))
@@ -1881,233 +1905,254 @@
 
 void URI_Get_Callback(float id, float status, string data)
 {
-	dprint("Received HTTP request data for id ", ftos(id), "; status is ", ftos(status), "\nData is:\n");
-	dprint(data);
-	dprint("\nEnd of data.\n");
+    dprint("Received HTTP request data for id ", ftos(id), "; status is ", ftos(status), "\nData is:\n");
+    dprint(data);
+    dprint("\nEnd of data.\n");
 
-	if(id == URI_GET_DISCARD)
-	{
-		// discard
-	}
-	else if(id >= URI_GET_IPBAN && id <= URI_GET_IPBAN_END)
-	{
-		// online ban list
-		OnlineBanList_URI_Get_Callback(id, status, data);
-	}
-	else
-	{
-		print("Received HTTP request data for an invalid id ", ftos(id), ".\n");
-	}
+    if (id == URI_GET_DISCARD)
+    {
+        // discard
+    }
+    else if (id >= URI_GET_IPBAN && id <= URI_GET_IPBAN_END)
+    {
+        // online ban list
+        OnlineBanList_URI_Get_Callback(id, status, data);
+    }
+    else
+    {
+        print("Received HTTP request data for an invalid id ", ftos(id), ".\n");
+    }
 }
 
 void print_to(entity e, string s)
 {
-	if(e)
-		sprint(e, strcat(s, "\n"));
-	else
-		print(s, "\n");
+    if (e)
+        sprint(e, strcat(s, "\n"));
+    else
+        print(s, "\n");
 }
 
 string getrecords()
 {
-	float rec;
-	string h;
-	float r;
-	float i;
-	string s;
+    float rec;
+    string h;
+    float r;
+    float i;
+    string s;
 
-	rec = 0;
-	
-	s = "";
+    rec = 0;
 
-	if(g_ctf)
-	{
-		for(i = 0; i < MapInfo_count; ++i)
-		{
-			if(MapInfo_Get_ByID(i))
-			{
-				r = stof(db_get(ServerProgsDB, strcat(MapInfo_Map_bspname, "/captimerecord/time")));
-				if(r == 0)
-					continue;
-				h = db_get(ServerProgsDB, strcat(MapInfo_Map_bspname, "/captimerecord/netname"));
-				s = strcat(s, strpad(32, MapInfo_Map_bspname), " ", strpad(-6, ftos_decimals(r, 2)), " ", h, "\n");
-				++rec;
-			}
-		}
-	}
+    s = "";
 
-	if(g_race)
-	{
-		for(i = 0; i < MapInfo_count; ++i)
-		{
-			if(MapInfo_Get_ByID(i))
-			{
-				r = stof(db_get(ServerProgsDB, strcat(MapInfo_Map_bspname, "/racerecord/time")));
-				if(r == 0)
-					continue;
-				h = db_get(ServerProgsDB, strcat(MapInfo_Map_bspname, "/racerecord/netname"));
-				s = strcat(s, strpad(32, MapInfo_Map_bspname), " ", strpad(-8, mmsss(r)), " ", h, "\n");
-				++rec;
-			}
-		}
-	}
-	MapInfo_ClearTemps();
+    if (g_ctf)
+    {
+        for (i = 0; i < MapInfo_count; ++i)
+        {
+            if (MapInfo_Get_ByID(i))
+            {
+                r = stof(db_get(ServerProgsDB, strcat(MapInfo_Map_bspname, "/captimerecord/time")));
+                if (r == 0)
+                    continue;
+                h = db_get(ServerProgsDB, strcat(MapInfo_Map_bspname, "/captimerecord/netname"));
+                s = strcat(s, strpad(32, MapInfo_Map_bspname), " ", strpad(-6, ftos_decimals(r, 2)), " ", h, "\n");
+                ++rec;
+            }
+        }
+    }
 
-	if(s == "")
-		return "No records are available on this server.\n";
-	else
-		return strcat("Records on this server:\n", s);
+    if (g_race)
+    {
+        for (i = 0; i < MapInfo_count; ++i)
+        {
+            if (MapInfo_Get_ByID(i))
+            {
+                r = stof(db_get(ServerProgsDB, strcat(MapInfo_Map_bspname, "/racerecord/time")));
+                if (r == 0)
+                    continue;
+                h = db_get(ServerProgsDB, strcat(MapInfo_Map_bspname, "/racerecord/netname"));
+                s = strcat(s, strpad(32, MapInfo_Map_bspname), " ", strpad(-8, mmsss(r)), " ", h, "\n");
+                ++rec;
+            }
+        }
+    }
+    MapInfo_ClearTemps();
+
+    if (s == "")
+        return "No records are available on this server.\n";
+    else
+        return strcat("Records on this server:\n", s);
 }
 
 float MoveToRandomMapLocation(entity e, float goodcontents, float badcontents, float badsurfaceflags, float attempts, float maxaboveground, float minviewdistance)
 {
-	float m, i;
-	vector start, org, delta, end, enddown, mstart;
+    float m, i;
+    vector start, org, delta, end, enddown, mstart;
 
-	m = e.dphitcontentsmask;
-	e.dphitcontentsmask = goodcontents | badcontents;
+    m = e.dphitcontentsmask;
+    e.dphitcontentsmask = goodcontents | badcontents;
 
-	org = world.mins;
-	delta = world.maxs - world.mins;
+    org = world.mins;
+    delta = world.maxs - world.mins;
 
-	for(i = 0; i < attempts; ++i)
-	{
-		start_x = org_x + random() * delta_x;
-		start_y = org_y + random() * delta_y;
-		start_z = org_z + random() * delta_z;
+    for (i = 0; i < attempts; ++i)
+    {
+        start_x = org_x + random() * delta_x;
+        start_y = org_y + random() * delta_y;
+        start_z = org_z + random() * delta_z;
 
-		// rule 1: start inside world bounds, and outside
-		// solid, and don't start from somewhere where you can
-		// fall down to evil
-		tracebox(start, e.mins, e.maxs, start - '0 0 1' * delta_z, MOVE_NORMAL, e);
-		if(trace_fraction >= 1)
-			continue;
-		if(trace_startsolid)
-			continue;
-		if(trace_dphitcontents & badcontents)
-			continue;
-		if(trace_dphitq3surfaceflags & badsurfaceflags)
-			continue;
+        // rule 1: start inside world bounds, and outside
+        // solid, and don't start from somewhere where you can
+        // fall down to evil
+        tracebox(start, e.mins, e.maxs, start - '0 0 1' * delta_z, MOVE_NORMAL, e);
+        if (trace_fraction >= 1)
+            continue;
+        if (trace_startsolid)
+            continue;
+        if (trace_dphitcontents & badcontents)
+            continue;
+        if (trace_dphitq3surfaceflags & badsurfaceflags)
+            continue;
 
-		// rule 2: if we are too high, lower the point
-		if(trace_fraction * delta_z > maxaboveground)
-			start = trace_endpos + '0 0 1' * maxaboveground;
-		enddown = trace_endpos;
+        // rule 2: if we are too high, lower the point
+        if (trace_fraction * delta_z > maxaboveground)
+            start = trace_endpos + '0 0 1' * maxaboveground;
+        enddown = trace_endpos;
 
-		// rule 3: make sure we aren't outside the map. This only works
-		// for somewhat well formed maps. A good rule of thumb is that
-		// the map should have a convex outside hull.
-		// these can be traceLINES as we already verified the starting box
-		mstart = start + 0.5 * (e.mins + e.maxs);
-		traceline(mstart, mstart + '1 0 0' * delta_x, MOVE_NORMAL, e);
-		if(trace_fraction >= 1)
-			continue;
-		traceline(mstart, mstart - '1 0 0' * delta_x, MOVE_NORMAL, e);
-		if(trace_fraction >= 1)
-			continue;
-		traceline(mstart, mstart + '0 1 0' * delta_y, MOVE_NORMAL, e);
-		if(trace_fraction >= 1)
-			continue;
-		traceline(mstart, mstart - '0 1 0' * delta_y, MOVE_NORMAL, e);
-		if(trace_fraction >= 1)
-			continue;
-		traceline(mstart, mstart + '0 0 1' * delta_z, MOVE_NORMAL, e);
-		if(trace_fraction >= 1)
-			continue;
+        // rule 3: make sure we aren't outside the map. This only works
+        // for somewhat well formed maps. A good rule of thumb is that
+        // the map should have a convex outside hull.
+        // these can be traceLINES as we already verified the starting box
+        mstart = start + 0.5 * (e.mins + e.maxs);
+        traceline(mstart, mstart + '1 0 0' * delta_x, MOVE_NORMAL, e);
+        if (trace_fraction >= 1)
+            continue;
+        traceline(mstart, mstart - '1 0 0' * delta_x, MOVE_NORMAL, e);
+        if (trace_fraction >= 1)
+            continue;
+        traceline(mstart, mstart + '0 1 0' * delta_y, MOVE_NORMAL, e);
+        if (trace_fraction >= 1)
+            continue;
+        traceline(mstart, mstart - '0 1 0' * delta_y, MOVE_NORMAL, e);
+        if (trace_fraction >= 1)
+            continue;
+        traceline(mstart, mstart + '0 0 1' * delta_z, MOVE_NORMAL, e);
+        if (trace_fraction >= 1)
+            continue;
 
-		// find a random vector to "look at"
-		end_x = org_x + random() * delta_x;
-		end_y = org_y + random() * delta_y;
-		end_z = org_z + random() * delta_z;
-		end = start + normalize(end - start) * vlen(delta);
+        // find a random vector to "look at"
+        end_x = org_x + random() * delta_x;
+        end_y = org_y + random() * delta_y;
+        end_z = org_z + random() * delta_z;
+        end = start + normalize(end - start) * vlen(delta);
 
-		// rule 4: start TO end must not be too short
-		tracebox(start, e.mins, e.maxs, end, MOVE_NORMAL, e);
-		if(trace_startsolid)
-			continue;
-		if(trace_fraction < minviewdistance / vlen(delta))
-			continue;
+        // rule 4: start TO end must not be too short
+        tracebox(start, e.mins, e.maxs, end, MOVE_NORMAL, e);
+        if (trace_startsolid)
+            continue;
+        if (trace_fraction < minviewdistance / vlen(delta))
+            continue;
 
-		// rule 5: don't want to look at sky
-		if(trace_dphitq3surfaceflags & Q3SURFACEFLAG_SKY)
-			continue;
+        // rule 5: don't want to look at sky
+        if (trace_dphitq3surfaceflags & Q3SURFACEFLAG_SKY)
+            continue;
 
-		// rule 6: we must not end up in trigger_hurt
-		if(tracebox_hits_trigger_hurt(start, e.mins, e.maxs, enddown))
-		{
-			dprint("trigger_hurt! ouch! and nothing else could find it!\n");
-			continue;
-		}
+        // rule 6: we must not end up in trigger_hurt
+        if (tracebox_hits_trigger_hurt(start, e.mins, e.maxs, enddown))
+        {
+            dprint("trigger_hurt! ouch! and nothing else could find it!\n");
+            continue;
+        }
 
-		break;
-	}
+        break;
+    }
 
-	e.dphitcontentsmask = m;
+    e.dphitcontentsmask = m;
 
-	if(i < attempts)
-	{
-		setorigin(e, start);
-		e.angles = vectoangles(end - start);
-		dprint("Needed ", ftos(i + 1), " attempts\n");
-		return TRUE;
-	}
-	else
-		return FALSE;
+    if (i < attempts)
+    {
+        setorigin(e, start);
+        e.angles = vectoangles(end - start);
+        dprint("Needed ", ftos(i + 1), " attempts\n");
+        return TRUE;
+    }
+    else
+        return FALSE;
 }
 
 void zcurveparticles(float effectno, vector start, vector end, float end_dz, float spd)
 {
-	WriteByte(MSG_BROADCAST, SVC_TEMPENTITY);
-	WriteByte(MSG_BROADCAST, TE_CSQC_ZCURVEPARTICLES);
-	WriteShort(MSG_BROADCAST, effectno);
-	WriteCoord(MSG_BROADCAST, start_x);
-	WriteCoord(MSG_BROADCAST, start_y);
-	WriteCoord(MSG_BROADCAST, start_z);
-	WriteCoord(MSG_BROADCAST, end_x);
-	WriteCoord(MSG_BROADCAST, end_y);
-	WriteCoord(MSG_BROADCAST, end_z);
-	WriteCoord(MSG_BROADCAST, end_dz);
-	WriteShort(MSG_BROADCAST, spd / 16);
+    WriteByte(MSG_BROADCAST, SVC_TEMPENTITY);
+    WriteByte(MSG_BROADCAST, TE_CSQC_ZCURVEPARTICLES);
+    WriteShort(MSG_BROADCAST, effectno);
+    WriteCoord(MSG_BROADCAST, start_x);
+    WriteCoord(MSG_BROADCAST, start_y);
+    WriteCoord(MSG_BROADCAST, start_z);
+    WriteCoord(MSG_BROADCAST, end_x);
+    WriteCoord(MSG_BROADCAST, end_y);
+    WriteCoord(MSG_BROADCAST, end_z);
+    WriteCoord(MSG_BROADCAST, end_dz);
+    WriteShort(MSG_BROADCAST, spd / 16);
 }
 
 void zcurveparticles_from_tracetoss(float effectno, vector start, vector end, vector vel)
 {
-	float end_dz;
-	vector vecxy, velxy;
+    float end_dz;
+    vector vecxy, velxy;
 
-	vecxy = end - start; vecxy_z = 0;
-	velxy = vel;         velxy_z = 0;
+    vecxy = end - start;
+    vecxy_z = 0;
+    velxy = vel;
+    velxy_z = 0;
 
-	if(vlen(velxy) < 0.000001 * fabs(vel_z))
-	{
-		trailparticles(world, effectno, start, end);
-		return;
-	}
+    if (vlen(velxy) < 0.000001 * fabs(vel_z))
+    {
+        trailparticles(world, effectno, start, end);
+        return;
+    }
 
-	end_dz = vlen(vecxy) / vlen(velxy) * vel_z - (end_z - start_z);
-	zcurveparticles(effectno, start, end, end_dz, vlen(vel));
+    end_dz = vlen(vecxy) / vlen(velxy) * vel_z - (end_z - start_z);
+    zcurveparticles(effectno, start, end, end_dz, vlen(vel));
 }
 
 string GetGametype(); // g_world.qc
 void write_recordmarker(entity pl, float tstart, float dt)
 {
-	GameLogEcho(strcat(":recordset:", ftos(pl.playerid), ":", ftos(dt / 10)));
+    GameLogEcho(strcat(":recordset:", ftos(pl.playerid), ":", ftos(dt / 10)));
 
-	// also write a marker into demo files for demotc-race-record-extractor to find
-	stuffcmd(pl,
-		strcat(
-			strcat("//", strconv(2, 0, 0, GetGametype()), " RECORD SET ", mmsss(dt * 10)),
-			" ", ftos(tstart), " ", ftos(dt), "\n"));
+    // also write a marker into demo files for demotc-race-record-extractor to find
+    stuffcmd(pl,
+             strcat(
+                 strcat("//", strconv(2, 0, 0, GetGametype()), " RECORD SET ", mmsss(dt * 10)),
+                 " ", ftos(tstart), " ", ftos(dt), "\n"));
 }
 
 vector shotorg_adjust(vector vecs, float y_is_right, float visual)
 {
 	string s;
 	vector v;
-	if (cvar("g_shootfromeye"))
+
+	if (cvar("g_shootfromclient"))
 	{
-		if(visual)
+		switch(self.owner.cvar_cl_gunalign)
 		{
+			case 1: // right
+				break;
+
+			case 2: // left
+				vecs_y = -vecs_y;
+				break;
+
+			default:
+			case 3: // center
+				vecs_y = 0;
+				vecs_z -= 4;
+				break;
+		}
+	}
+	else if (cvar("g_shootfromeye"))
+	{
+		if (visual)
+		{
 			vecs_y = 0;
 			vecs_z -= 4;
 		}
@@ -2122,12 +2167,12 @@
 		vecs_y = 0;
 		vecs_z -= 4;
 	}
-	else if((s = cvar_string("g_shootfromfixedorigin")) != "")
+	else if ((s = cvar_string("g_shootfromfixedorigin")) != "")
 	{
 		v = stov(s);
-		if(y_is_right)
+		if (y_is_right)
 			v_y = -v_y;
-		if(v_x != 0)
+		if (v_x != 0)
 			vecs_x = v_x;
 		vecs_y = v_y;
 		vecs_z = v_z;
@@ -2139,189 +2184,189 @@
 
 void attach_sameorigin(entity e, entity to, string tag)
 {
-	vector org, t_forward, t_left, t_up, e_forward, e_up;
-	vector org0, ang0;
-	float tagscale;
+    vector org, t_forward, t_left, t_up, e_forward, e_up;
+    vector org0, ang0;
+    float tagscale;
 
-	ang0 = e.angles;
-	org0 = e.origin;
+    ang0 = e.angles;
+    org0 = e.origin;
 
-	org = e.origin - gettaginfo(to, gettagindex(to, tag));
-	tagscale = pow(vlen(v_forward), -2); // undo a scale on the tag
-	t_forward = v_forward * tagscale;
-	t_left = v_right * -tagscale;
-	t_up = v_up * tagscale;
+    org = e.origin - gettaginfo(to, gettagindex(to, tag));
+    tagscale = pow(vlen(v_forward), -2); // undo a scale on the tag
+    t_forward = v_forward * tagscale;
+    t_left = v_right * -tagscale;
+    t_up = v_up * tagscale;
 
-	e.origin_x = org * t_forward;
-	e.origin_y = org * t_left;
-	e.origin_z = org * t_up;
+    e.origin_x = org * t_forward;
+    e.origin_y = org * t_left;
+    e.origin_z = org * t_up;
 
-	// current forward and up directions
-	if(substring(e.model, 0, 1) == "*") // bmodels have their own rules
-		e.angles_x = -e.angles_x;
-	fixedmakevectors(e.angles);
+    // current forward and up directions
+    if (substring(e.model, 0, 1) == "*") // bmodels have their own rules
+        e.angles_x = -e.angles_x;
+    fixedmakevectors(e.angles);
 
-	// untransform forward, up!
-	e_forward_x = v_forward * t_forward;
-	e_forward_y = v_forward * t_left;
-	e_forward_z = v_forward * t_up;
-	e_up_x = v_up * t_forward;
-	e_up_y = v_up * t_left;
-	e_up_z = v_up * t_up;
+    // untransform forward, up!
+    e_forward_x = v_forward * t_forward;
+    e_forward_y = v_forward * t_left;
+    e_forward_z = v_forward * t_up;
+    e_up_x = v_up * t_forward;
+    e_up_y = v_up * t_left;
+    e_up_z = v_up * t_up;
 
-	e.angles = fixedvectoangles2(e_forward, e_up);
-	if(substring(e.model, 0, 1) == "*") // bmodels have their own rules
-		e.angles_x = -e.angles_x;
+    e.angles = fixedvectoangles2(e_forward, e_up);
+    if (substring(e.model, 0, 1) == "*") // bmodels have their own rules
+        e.angles_x = -e.angles_x;
 
-	setattachment(e, to, tag);
-	setorigin(e, e.origin);
+    setattachment(e, to, tag);
+    setorigin(e, e.origin);
 }
 
 void detach_sameorigin(entity e)
 {
-	vector org;
-	org = gettaginfo(e, 0);
-	e.angles = fixedvectoangles2(v_forward, v_up);
-	if(substring(e.model, 0, 1) == "*") // bmodels have their own rules
-		e.angles_x = -e.angles_x;
-	e.origin = org;
-	setattachment(e, world, "");
-	setorigin(e, e.origin);
+    vector org;
+    org = gettaginfo(e, 0);
+    e.angles = fixedvectoangles2(v_forward, v_up);
+    if (substring(e.model, 0, 1) == "*") // bmodels have their own rules
+        e.angles_x = -e.angles_x;
+    e.origin = org;
+    setattachment(e, world, "");
+    setorigin(e, e.origin);
 }
 
 void follow_sameorigin(entity e, entity to)
 {
-	e.movetype = MOVETYPE_FOLLOW; // make the hole follow
-	e.aiment = to; // make the hole follow bmodel
-	e.punchangle = to.angles; // the original angles of bmodel
-	e.view_ofs = e.origin - to.origin; // relative origin
-	e.v_angle = e.angles - to.angles; // relative angles
+    e.movetype = MOVETYPE_FOLLOW; // make the hole follow
+    e.aiment = to; // make the hole follow bmodel
+    e.punchangle = to.angles; // the original angles of bmodel
+    e.view_ofs = e.origin - to.origin; // relative origin
+    e.v_angle = e.angles - to.angles; // relative angles
 }
 
 void unfollow_sameorigin(entity e)
 {
-	e.movetype = MOVETYPE_NONE;
+    e.movetype = MOVETYPE_NONE;
 }
 
 entity gettaginfo_relative_ent;
 vector gettaginfo_relative(entity e, float tag)
 {
-	if(!gettaginfo_relative_ent)
-	{
-		gettaginfo_relative_ent = spawn();
-		gettaginfo_relative_ent.effects = EF_NODRAW;
-	}
-	gettaginfo_relative_ent.model = e.model;
-	gettaginfo_relative_ent.modelindex = e.modelindex;
-	gettaginfo_relative_ent.frame = e.frame;
-	return gettaginfo(gettaginfo_relative_ent, tag);
+    if (!gettaginfo_relative_ent)
+    {
+        gettaginfo_relative_ent = spawn();
+        gettaginfo_relative_ent.effects = EF_NODRAW;
+    }
+    gettaginfo_relative_ent.model = e.model;
+    gettaginfo_relative_ent.modelindex = e.modelindex;
+    gettaginfo_relative_ent.frame = e.frame;
+    return gettaginfo(gettaginfo_relative_ent, tag);
 }
 
 void SoundEntity_StartSound(entity pl, float chan, string samp, float vol, float attn)
 {
-	float p;
-	p = pow(2, chan);
-	if(pl.soundentity.cnt & p)
-		return;
-	soundtoat(MSG_ALL, pl.soundentity, gettaginfo(pl.soundentity, 0), chan, samp, vol, attn);
-	pl.soundentity.cnt |= p;
+    float p;
+    p = pow(2, chan);
+    if (pl.soundentity.cnt & p)
+        return;
+    soundtoat(MSG_ALL, pl.soundentity, gettaginfo(pl.soundentity, 0), chan, samp, vol, attn);
+    pl.soundentity.cnt |= p;
 }
 
 void SoundEntity_StopSound(entity pl, float chan)
 {
-	float p;
-	p = pow(2, chan);
-	if(pl.soundentity.cnt & p)
-	{
-		stopsoundto(MSG_ALL, pl.soundentity, chan);
-		pl.soundentity.cnt &~= p;
-	}
+    float p;
+    p = pow(2, chan);
+    if (pl.soundentity.cnt & p)
+    {
+        stopsoundto(MSG_ALL, pl.soundentity, chan);
+        pl.soundentity.cnt &~= p;
+    }
 }
 
 void SoundEntity_Attach(entity pl)
 {
-	pl.soundentity = spawn();
-	pl.soundentity.classname = "soundentity";
-	pl.soundentity.owner = pl;
-	setattachment(pl.soundentity, pl, "");
-	setmodel(pl.soundentity, "null");
+    pl.soundentity = spawn();
+    pl.soundentity.classname = "soundentity";
+    pl.soundentity.owner = pl;
+    setattachment(pl.soundentity, pl, "");
+    setmodel(pl.soundentity, "null");
 }
 
 void SoundEntity_Detach(entity pl)
 {
-	float i;
-	for(i = 0; i <= 7; ++i)
-		SoundEntity_StopSound(pl, i);
+    float i;
+    for (i = 0; i <= 7; ++i)
+        SoundEntity_StopSound(pl, i);
 }
 
 
 float ParseCommandPlayerSlotTarget_firsttoken;
 entity GetCommandPlayerSlotTargetFromTokenizedCommand(float tokens, float idx) // idx = start index
 {
-	string s;
-	entity e, head;
-	float n;
+    string s;
+    entity e, head;
+    float n;
 
-	s = string_null;
+    s = string_null;
 
-	ParseCommandPlayerSlotTarget_firsttoken = -1;
+    ParseCommandPlayerSlotTarget_firsttoken = -1;
 
-	if(tokens > idx)
-	{
-		if(substring(argv(idx), 0, 1) == "#")
-		{
-			s = substring(argv(idx), 1, -1);
-			++idx;
-			if(s == "")
-			if(tokens > idx)
-			{
-				s = argv(idx);
-				++idx;
-			}
-			if(s == ftos(stof(s)))
-			{
-				e = edict_num(stof(s));
-				if(e.flags & FL_CLIENT)
-				{
-					ParseCommandPlayerSlotTarget_firsttoken = idx;
-					return e;
-				}
-			}
-		}
-		else
-		{
-			// it must be a nick name
-			s = argv(idx);
-			++idx;
+    if (tokens > idx)
+    {
+        if (substring(argv(idx), 0, 1) == "#")
+        {
+            s = substring(argv(idx), 1, -1);
+            ++idx;
+            if (s == "")
+                if (tokens > idx)
+                {
+                    s = argv(idx);
+                    ++idx;
+                }
+            if (s == ftos(stof(s)))
+            {
+                e = edict_num(stof(s));
+                if (e.flags & FL_CLIENT)
+                {
+                    ParseCommandPlayerSlotTarget_firsttoken = idx;
+                    return e;
+                }
+            }
+        }
+        else
+        {
+            // it must be a nick name
+            s = argv(idx);
+            ++idx;
 
-			n = 0;
-			FOR_EACH_CLIENT(head)
-				if(head.netname == s)
-				{
-					e = head;
-					++n;
-				}
-			if(n == 1)
-			{
-				ParseCommandPlayerSlotTarget_firsttoken = idx;
-				return e;
-			}
+            n = 0;
+            FOR_EACH_CLIENT(head)
+            if (head.netname == s)
+            {
+                e = head;
+                ++n;
+            }
+            if (n == 1)
+            {
+                ParseCommandPlayerSlotTarget_firsttoken = idx;
+                return e;
+            }
 
-			s = strdecolorize(s);
-			n = 0;
-			FOR_EACH_CLIENT(head)
-				if(strdecolorize(head.netname) == s)
-				{
-					e = head;
-					++n;
-				}
-			if(n == 1)
-			{
-				ParseCommandPlayerSlotTarget_firsttoken = idx;
-				return e;
-			}
-		}
-	}
+            s = strdecolorize(s);
+            n = 0;
+            FOR_EACH_CLIENT(head)
+            if (strdecolorize(head.netname) == s)
+            {
+                e = head;
+                ++n;
+            }
+            if (n == 1)
+            {
+                ParseCommandPlayerSlotTarget_firsttoken = idx;
+                return e;
+            }
+        }
+    }
 
-	return world;
+    return world;
 }

Modified: branches/nexuiz-2.0/data/qcsrc/server/mode_onslaught.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/mode_onslaught.qc	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/qcsrc/server/mode_onslaught.qc	2009-07-11 14:59:28 UTC (rev 7191)
@@ -14,6 +14,7 @@
 .float lasthealth;
 .float lastteam;
 .float lastshielded;
+.float lastcaptured;
 
 .string model1, model2, model3;
 
@@ -169,46 +170,49 @@
 	l = links;
 	while (l)
 	{
-		if (l.goalentity.team != l.enemy.team)
+		if (l.goalentity.islinked)
 		{
-			if (l.goalentity.islinked)
+			if (l.goalentity.team != l.enemy.team)
 			{
 				dprint(etos(l), " (link) is unshielding ", etos(l.enemy), " (point) because its team does not match ", etos(l.goalentity), " (point)\n");
 				l.enemy.isshielded = FALSE;
-				if(l.goalentity.classname == "onslaught_generator")
-				{
-					if(l.goalentity.team == COLOR_TEAM1)
-						l.enemy.isgenneighbor_red = TRUE;
-					else if(l.goalentity.team == COLOR_TEAM2)
-						l.enemy.isgenneighbor_blue = TRUE;
-				}
-				else
-				{
-					if(l.goalentity.team == COLOR_TEAM1)
-						l.enemy.iscpneighbor_red = TRUE;
-					else if(l.goalentity.team == COLOR_TEAM2)
-						l.enemy.iscpneighbor_blue = TRUE;
-				}
 			}
-			if (l.enemy.islinked)
+			if(l.goalentity.classname == "onslaught_generator")
 			{
+				if(l.goalentity.team == COLOR_TEAM1)
+					l.enemy.isgenneighbor_red = TRUE;
+				else if(l.goalentity.team == COLOR_TEAM2)
+					l.enemy.isgenneighbor_blue = TRUE;
+			}
+			else
+			{
+				if(l.goalentity.team == COLOR_TEAM1)
+					l.enemy.iscpneighbor_red = TRUE;
+				else if(l.goalentity.team == COLOR_TEAM2)
+					l.enemy.iscpneighbor_blue = TRUE;
+			}
+		}
+		if (l.enemy.islinked)
+		{
+			if (l.goalentity.team != l.enemy.team)
+			{
 				dprint(etos(l), " (link) is unshielding ", etos(l.goalentity), " (point) because its team does not match ", etos(l.enemy), " (point)\n");
 				l.goalentity.isshielded = FALSE;
-				if(l.enemy.classname == "onslaught_generator")
-				{
-					if(l.enemy.team == COLOR_TEAM1)
-						l.goalentity.isgenneighbor_red = TRUE;
-					else if(l.enemy.team == COLOR_TEAM2)
-						l.goalentity.isgenneighbor_blue = TRUE;
-				}
-				else
-				{
-					if(l.enemy.team == COLOR_TEAM1)
-						l.goalentity.iscpneighbor_red = TRUE;
-					else if(l.enemy.team == COLOR_TEAM2)
-						l.goalentity.iscpneighbor_blue = TRUE;
-				}
 			}
+			if(l.enemy.classname == "onslaught_generator")
+			{
+				if(l.enemy.team == COLOR_TEAM1)
+					l.goalentity.isgenneighbor_red = TRUE;
+				else if(l.enemy.team == COLOR_TEAM2)
+					l.goalentity.isgenneighbor_blue = TRUE;
+			}
+			else
+			{
+				if(l.enemy.team == COLOR_TEAM1)
+					l.goalentity.iscpneighbor_red = TRUE;
+				else if(l.enemy.team == COLOR_TEAM2)
+					l.goalentity.iscpneighbor_blue = TRUE;
+			}
 		}
 		l = l.chain;
 	}
@@ -640,16 +644,19 @@
 		}
 	}
 	self.health = self.health - damage;
+	WaypointSprite_UpdateHealth(self.sprite, self.health);
 	// choose an animation frame based on health
 	self.frame = 10 * bound(0, (1 - self.health / self.max_health), 1);
 	// see if the generator is still functional, or dying
 	if (self.health > 0)
 	{
+#ifdef ONSLAUGHT_SPAM
 		float h, lh;
 		lh = ceil(self.lasthealth / 100) * 100;
 		h = ceil(self.health / 100) * 100;
 		if(lh != h)
 			bprint(ColoredTeamName(self.team), " generator has less than ", ftos(h), " health remaining\n");
+#endif
 		self.lasthealth = self.health;
 	}
 	else
@@ -671,6 +678,9 @@
 		self.think = onslaught_generator_deaththink; // explosion sequence
 		self.nextthink = time; // start exploding immediately
 		self.think(); // do the first explosion now
+
+		WaypointSprite_UpdateMaxHealth(self.sprite, 0);
+
 		onslaught_updatelinks();
 	}
 	if(self.health <= 0)
@@ -766,19 +776,15 @@
 		e.lastshielded = e.isshielded;
 		if(e.lastshielded)
 		{
-			if(e.team == COLOR_TEAM1)
-				WaypointSprite_UpdateTeamRadar(e.sprite, RADARICON_GENERATOR, '0.5 0 0');
-			else if(e.team == COLOR_TEAM2)
-				WaypointSprite_UpdateTeamRadar(e.sprite, RADARICON_GENERATOR, '0 0 0.5');
+			if(e.team == COLOR_TEAM1 || e.team == COLOR_TEAM2)
+				WaypointSprite_UpdateTeamRadar(e.sprite, RADARICON_GENERATOR, 0.5 * colormapPaletteColor(e.team - 1, FALSE));
 			else
 				WaypointSprite_UpdateTeamRadar(e.sprite, RADARICON_GENERATOR, '0.5 0.5 0.5');
 		}
 		else
 		{
-			if(e.team == COLOR_TEAM1)
-				WaypointSprite_UpdateTeamRadar(e.sprite, RADARICON_GENERATOR, '1 0 0');
-			else if(e.team == COLOR_TEAM2)
-				WaypointSprite_UpdateTeamRadar(e.sprite, RADARICON_GENERATOR, '0 0 1');
+			if(e.team == COLOR_TEAM1 || e.team == COLOR_TEAM2)
+				WaypointSprite_UpdateTeamRadar(e.sprite, RADARICON_GENERATOR, colormapPaletteColor(e.team - 1, FALSE));
 			else
 				WaypointSprite_UpdateTeamRadar(e.sprite, RADARICON_GENERATOR, '0.75 0.75 0.75');
 		}
@@ -841,29 +847,39 @@
 	float sh;
 	sh = !(onslaught_controlpoint_can_be_linked(e, COLOR_TEAM1) || onslaught_controlpoint_can_be_linked(e, COLOR_TEAM2));
 
-	if(e.lastteam != e.team + 2 || e.lastshielded != sh)
+	if(e.lastteam != e.team + 2 || e.lastshielded != sh || e.iscaptured != e.lastcaptured)
 	{
-		e.lastteam = e.team + 2;
-		e.lastshielded = sh;
+		if(e.iscaptured) // don't mess up build bars!
+		{
+			if(sh)
+			{
+				WaypointSprite_UpdateMaxHealth(e.sprite, 0);
+			}
+			else
+			{
+				WaypointSprite_UpdateMaxHealth(e.sprite, e.goalentity.max_health);
+				WaypointSprite_UpdateHealth(e.sprite, e.goalentity.health);
+			}
+		}
 		if(e.lastshielded)
 		{
-			if(e.team == COLOR_TEAM1)
-				WaypointSprite_UpdateTeamRadar(e.sprite, RADARICON_CONTROLPOINT, '0.5 0 0');
-			else if(e.team == COLOR_TEAM2)
-				WaypointSprite_UpdateTeamRadar(e.sprite, RADARICON_CONTROLPOINT, '0 0 0.5');
+			if(e.team == COLOR_TEAM1 || e.team == COLOR_TEAM2)
+				WaypointSprite_UpdateTeamRadar(e.sprite, RADARICON_CONTROLPOINT, 0.5 * colormapPaletteColor(e.team - 1, FALSE));
 			else
 				WaypointSprite_UpdateTeamRadar(e.sprite, RADARICON_CONTROLPOINT, '0.5 0.5 0.5');
 		}
 		else
 		{
-			if(e.team == COLOR_TEAM1)
-				WaypointSprite_UpdateTeamRadar(e.sprite, RADARICON_CONTROLPOINT, '1 0 0');
-			else if(e.team == COLOR_TEAM2)
-				WaypointSprite_UpdateTeamRadar(e.sprite, RADARICON_CONTROLPOINT, '0 0 1');
+			if(e.team == COLOR_TEAM1 || e.team == COLOR_TEAM2)
+				WaypointSprite_UpdateTeamRadar(e.sprite, RADARICON_CONTROLPOINT, colormapPaletteColor(e.team - 1, FALSE));
 			else
 				WaypointSprite_UpdateTeamRadar(e.sprite, RADARICON_CONTROLPOINT, '0.75 0.75 0.75');
 		}
 		WaypointSprite_Ping(e.sprite);
+
+		e.lastteam = e.team + 2;
+		e.lastshielded = sh;
+		e.lastcaptured = e.iscaptured;
 	}
 }
 
@@ -880,6 +896,9 @@
 	self.think = onslaught_generator_delayed;
 	self.nextthink = time + 0.2;
 	setmodel(self, "models/onslaught/generator.md3");
+
+	WaypointSprite_UpdateMaxHealth(self.sprite, self.max_health);
+	WaypointSprite_UpdateHealth(self.sprite, self.health);
 }
 
 /*QUAKED spawnfunc_onslaught_generator (0 .5 .8) (-32 -32 -24) (32 32 64)
@@ -961,6 +980,8 @@
 
 	WaypointSprite_SpawnFixed(string_null, e.origin + '0 0 1' * e.maxs_z, self, sprite);
 	WaypointSprite_UpdateRule(self.sprite, COLOR_TEAM2, SPRITERULE_TEAMPLAY);
+	WaypointSprite_UpdateMaxHealth(self.sprite, self.max_health);
+	WaypointSprite_UpdateHealth(self.sprite, self.health);
 
 	waypoint_spawnforitem(self);
 
@@ -995,6 +1016,10 @@
 			self.pain_finished = time + 10;
 		}
 	self.health = self.health - damage;
+	if(self.owner.iscaptured)
+		WaypointSprite_UpdateHealth(self.owner.sprite, self.health);
+	else
+		WaypointSprite_UpdateBuildFinished(self.owner.sprite, time + (self.max_health - self.health) / (self.count / sys_ticrate));
 	self.pain_finished = time + 1;
 	self.punchangle = (2 * randomvec() - '1 1 1') * 45;
 	self.cp_bob_dmg_z = (2 * random() - 1) * 15;
@@ -1029,6 +1054,9 @@
 		self.owner.iscaptured = FALSE;
 		self.owner.team = 0;
 		self.owner.colormap = 1024;
+
+		WaypointSprite_UpdateMaxHealth(self.owner.sprite, 0);
+
 		onslaught_updatelinks();
 
 		// Use targets now (somebody make sure this is in the right place..)
@@ -1051,12 +1079,16 @@
 void onslaught_controlpoint_icon_think()
 {
 	entity oself;
-	self.nextthink = time + 0.05;
+	self.nextthink = time + sys_ticrate;
 	if (time > self.pain_finished + 5)
 	{
-		self.health = self.health + self.count;
-		if (self.health >= self.max_health)
-			self.health = self.max_health;
+		if(self.health < self.max_health)
+		{
+			self.health = self.health + self.count;
+			if (self.health >= self.max_health)
+				self.health = self.max_health;
+			WaypointSprite_UpdateHealth(self.owner.sprite, self.health);
+		}
 	}
 	if (self.health < self.max_health * 0.25)
 		setmodel(self, "models/onslaught/controlpoint_icon_dmg3.md3");
@@ -1135,7 +1167,7 @@
 	local entity oself;
 	float a;
 
-	self.nextthink = time + 0.05;
+	self.nextthink = time + sys_ticrate;
 
 	// only do this if there is power
 	a = onslaught_controlpoint_can_be_linked(self.owner, self.owner.team);
@@ -1147,11 +1179,15 @@
 	if (self.health >= self.max_health)
 	{
 		self.health = self.max_health;
-		self.count = self.count * 0.1; // slow repair rate from now on
+		self.count = cvar("g_onslaught_cp_regen") * sys_ticrate; // slow repair rate from now on
 		self.think = onslaught_controlpoint_icon_think;
 		sound(self, CHAN_TRIGGER, "onslaught/controlpoint_built.wav", VOL_BASE, ATTN_NORM);
 		bprint(ColoredTeamName(self.team), " captured ", self.owner.message, " control point\n");
 		self.owner.iscaptured = TRUE;
+
+		WaypointSprite_UpdateMaxHealth(self.owner.sprite, self.max_health);
+		WaypointSprite_UpdateHealth(self.owner.sprite, self.health);
+
 		onslaught_updatelinks();
 
 		// Use targets now (somebody make sure this is in the right place..)
@@ -1194,7 +1230,7 @@
 	e.classname = "onslaught_controlpoint_icon";
 	e.owner = self;
 	e.max_health = cvar("g_onslaught_cp_health");
-	e.health = e.max_health * 0.1;
+	e.health = cvar("g_onslaught_cp_buildhealth");
 	e.solid = SOLID_BBOX;
 	e.movetype = MOVETYPE_NONE;
 	setmodel(e, "models/onslaught/controlpoint_icon.md3");
@@ -1206,11 +1242,13 @@
 	e.team = other.team;
 	e.colormap = 1024 + (e.team - 1) * 17;
 	e.think = onslaught_controlpoint_icon_buildthink;
-	e.nextthink = time + 0.1;
-	e.count = e.max_health / 100; // how long it takes to build
+	e.nextthink = time + sys_ticrate;
+	e.count = (e.max_health - e.health) * sys_ticrate / cvar("g_onslaught_cp_buildtime"); // how long it takes to build
 	sound(e, CHAN_TRIGGER, "onslaught/controlpoint_build.wav", VOL_BASE, ATTN_NORM);
 	self.team = e.team;
 	self.colormap = e.colormap;
+	WaypointSprite_UpdateBuildFinished(self.sprite, time + (e.max_health - e.health) / (e.count / sys_ticrate));
+	onslaught_updatelinks();
 };
 
 void onslaught_controlpoint_reset()
@@ -1230,6 +1268,8 @@
 	setmodel(self, "models/onslaught/controlpoint_pad.md3");
 	//setsize(self, '-32 -32 0', '32 32 8');
 
+	WaypointSprite_UpdateMaxHealth(self.sprite, 0);
+
 	onslaught_updatelinks();
 
 	activator = self;
@@ -1358,6 +1398,9 @@
 		cc = (COLOR_TEAM2 - 1) * 0x11;
 	else
 		cc = 0;
+	
+	//print(etos(self), " rp=", ftos(redpower), " bp=", ftos(bluepower), " ");
+	//print("cc=", ftos(cc), "\n");
 
 	if(cc != self.clientcolors)
 	{


Property changes on: branches/nexuiz-2.0/data/qcsrc/server/monsters/ai.qc
___________________________________________________________________
Name: svn:eol-style
   + native


Property changes on: branches/nexuiz-2.0/data/qcsrc/server/monsters/defs.qc
___________________________________________________________________
Name: svn:eol-style
   + native


Property changes on: branches/nexuiz-2.0/data/qcsrc/server/monsters/fight.qc
___________________________________________________________________
Name: svn:eol-style
   + native


Property changes on: branches/nexuiz-2.0/data/qcsrc/server/monsters/m_monsters.qc
___________________________________________________________________
Name: svn:eol-style
   + native


Property changes on: branches/nexuiz-2.0/data/qcsrc/server/monsters/mode_management.qc
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: branches/nexuiz-2.0/data/qcsrc/server/movelib.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/movelib.qc	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/qcsrc/server/movelib.qc	2009-07-11 14:59:28 UTC (rev 7191)
@@ -1,234 +1,234 @@
-.vector moveto;
-
-/**
-    Simulate drag
-    self.velocity = movelib_vdrag(self.velocity,0.02,0.5);
-**/
-vector movelib_dragvec(float drag, float exp)
-{
-    float lspeed,ldrag;
-
-    lspeed = vlen(self.velocity);
-    ldrag = lspeed * drag;
-    ldrag = ldrag * (drag * exp);
-    ldrag = 1 - (ldrag / lspeed);
-
-    return self.velocity * ldrag;
-}
-
-/**
-    Simulate drag
-    self.velocity = movelib_vdrag(somespeed,0.01,0.7);
-**/
-float movelib_dragflt(float fspeed,float drag,float exp)
-{
-    float ldrag;
-
-    ldrag = fspeed * drag;
-    ldrag = ldrag * ldrag * exp;
-    ldrag = 1 - (ldrag / fspeed);
-
-    return ldrag;
-}
-
-/**
-    Do a inertia simulation based on velocity.
-    Basicaly, this allows you to simulate loss of steering with higher speed.
-    self.velocity = movelib_inertia_fromspeed(self.velocity,newvel,1000,0.1,0.9);
-**/
-vector movelib_inertmove_byspeed(vector vel_new, float vel_max,float newmin,float oldmax)
-{
-    float influense;
-
-    influense = vlen(self.velocity) * (1 / vel_max);
-
-    influense = bound(newmin,influense,oldmax);
-
-    return (vel_new * (1 - influense)) + (self.velocity * influense);
-}
-
-vector movelib_inertmove(vector new_vel,float new_bias)
-{
-    return new_vel * new_bias + self.velocity * (1-new_bias);
-}
-
-.float  movelib_lastupdate;
-void movelib_move(vector force,float max_velocity,float drag,float mass,float breakforce)
-{
-    float deltatime;
-    float acceleration;
-    float mspeed;
-    vector breakvec;
-
-    deltatime = time - self.movelib_lastupdate;
-    if (deltatime > 0.15) deltatime = 0;
-    self.movelib_lastupdate = time;
-    if (!deltatime) return;
-
-    mspeed = vlen(self.velocity);
-
-    if (mass)
-        acceleration = vlen(force) / mass;
-    else
-        acceleration = vlen(force);
-
-    if (self.flags & FL_ONGROUND)
-    {
-        if (breakforce)
-        {
-            breakvec = (normalize(self.velocity) * (breakforce / mass) * deltatime);
-            self.velocity = self.velocity - breakvec;
-        }
-
-        self.velocity = self.velocity + force * (acceleration * deltatime);
-    }
-
-    if (drag)
-        self.velocity = movelib_dragvec(drag, 1);
-
-    if (self.waterlevel > 1)
-    {
-        self.velocity = self.velocity + force * (acceleration * deltatime);
-        self.velocity = self.velocity + '0 0 0.05' * sv_gravity * deltatime;
-    }
-    else
-        self.velocity = self.velocity + '0 0 -1' * sv_gravity * deltatime;
-
-    mspeed = vlen(self.velocity);
-
-    if (max_velocity)
-        if (mspeed > max_velocity)
-            self.velocity = normalize(self.velocity) * (mspeed - 50);//* max_velocity;
-}
-
-/*
-.float mass;
-.float side_friction;
-.float ground_friction;
-.float air_friction;
-.float water_friction;
-.float buoyancy;
-float movelib_deltatime;
-
-void movelib_startupdate()
-{
-    movelib_deltatime = time - self.movelib_lastupdate;
-
-    if (movelib_deltatime > 0.5)
-        movelib_deltatime = 0;
-
-    self.movelib_lastupdate = time;
-}
-
-void movelib_update(vector dir,float force)
-{
-    vector acceleration;
-    float old_speed;
-    float ffriction,v_z;
-
-    vector breakvec;
-    vector old_dir;
-    vector ggravity;
-    vector old;
-
-    if(!movelib_deltatime)
-        return;
-    v_z = self.velocity_z;
-    old_speed    = vlen(self.velocity);
-    old_dir      = normalize(self.velocity);
-
-    //ggravity      =  (sv_gravity / self.mass) * '0 0 100';
-    acceleration =  (force / self.mass) * dir;
-    //acceleration -= old_dir * (old_speed / self.mass);
-    acceleration -= ggravity;
-
-    if(self.waterlevel > 1)
-    {
-        ffriction = self.water_friction;
-        acceleration += self.buoyancy * '0 0 1';
-    }
-    else
-        if(self.flags & FL_ONGROUND)
-            ffriction = self.ground_friction;
-        else
-            ffriction = self.air_friction;
-
-    acceleration *= ffriction;
-    //self.velocity = self.velocity * (ffriction * movelib_deltatime);
-    self.velocity += acceleration * movelib_deltatime;
-    self.velocity_z = v_z;
-
-}
-*/
-
-void movelib_move_simple(vector newdir,float velo,float blendrate)
-{
-    self.velocity = self.velocity * (1 - blendrate) + (newdir * blendrate) * velo;
-}
-void movelib_beak_simple(float force)
-{
-    float mspeed;
-    vector mdir;
-    float vz;
-
-    mspeed = max(0,vlen(self.velocity) - force);
-    mdir   = normalize(self.velocity);
-    vz = self.velocity_z;
-    self.velocity = mdir * mspeed;
-    self.velocity_z = vz;
-}
-
-
-void movelib_groundalign4point(float spring_length,float spring_up,float blendrate)
-{
-    vector a,b,c,d,e,r,push_angle, ahead,side;
-
-    push_angle_y = 0;
-    r = (self.absmax + self.absmin) * 0.5 + (v_up * spring_up);
-    e = v_up * spring_length;
-
-    // Put springs slightly inside bbox
-    ahead = v_forward * (self.maxs_x * 0.85);
-    side  = v_right   * (self.maxs_y * 0.85);
-
-    a = r + ahead + side;
-    b = r + ahead - side;
-    c = r - ahead + side;
-    d = r - ahead - side;
-
-    traceline(a, a - e,MOVE_NORMAL,self);
-    a_z =  (1 - trace_fraction);
-    r = trace_endpos;
-
-    traceline(b, b - e,MOVE_NORMAL,self);
-    b_z =  (1 - trace_fraction);
-    r += trace_endpos;
-
-    traceline(c, c - e,MOVE_NORMAL,self);
-    c_z =  (1 - trace_fraction);
-    r += trace_endpos;
-
-    traceline(d, d - e,MOVE_NORMAL,self);
-    d_z =  (1 - trace_fraction);
-    r += trace_endpos;
-
-    a_x = r_z;
-    r = self.origin;
-    r_z = r_z;
-
-    push_angle_x = (a_z - c_z) * 45;
-    push_angle_x += (b_z - d_z) * 45;
-
-    push_angle_z = (b_z - a_z) * 45;
-    push_angle_z += (d_z - c_z) * 45;
-
-    //self.angles_x += push_angle_x * 0.95;
-    //self.angles_z += push_angle_z * 0.95;
-
-    self.angles_x = ((1-blendrate) *  self.angles_x)  + (push_angle_x * blendrate);
-    self.angles_z = ((1-blendrate) *  self.angles_z)  + (push_angle_z * blendrate);
-
-    //a = self.origin;
-    setorigin(self,r);
-}
-
+.vector moveto;
+
+/**
+    Simulate drag
+    self.velocity = movelib_vdrag(self.velocity,0.02,0.5);
+**/
+vector movelib_dragvec(float drag, float exp)
+{
+    float lspeed,ldrag;
+
+    lspeed = vlen(self.velocity);
+    ldrag = lspeed * drag;
+    ldrag = ldrag * (drag * exp);
+    ldrag = 1 - (ldrag / lspeed);
+
+    return self.velocity * ldrag;
+}
+
+/**
+    Simulate drag
+    self.velocity = movelib_vdrag(somespeed,0.01,0.7);
+**/
+float movelib_dragflt(float fspeed,float drag,float exp)
+{
+    float ldrag;
+
+    ldrag = fspeed * drag;
+    ldrag = ldrag * ldrag * exp;
+    ldrag = 1 - (ldrag / fspeed);
+
+    return ldrag;
+}
+
+/**
+    Do a inertia simulation based on velocity.
+    Basicaly, this allows you to simulate loss of steering with higher speed.
+    self.velocity = movelib_inertia_fromspeed(self.velocity,newvel,1000,0.1,0.9);
+**/
+vector movelib_inertmove_byspeed(vector vel_new, float vel_max,float newmin,float oldmax)
+{
+    float influense;
+
+    influense = vlen(self.velocity) * (1 / vel_max);
+
+    influense = bound(newmin,influense,oldmax);
+
+    return (vel_new * (1 - influense)) + (self.velocity * influense);
+}
+
+vector movelib_inertmove(vector new_vel,float new_bias)
+{
+    return new_vel * new_bias + self.velocity * (1-new_bias);
+}
+
+.float  movelib_lastupdate;
+void movelib_move(vector force,float max_velocity,float drag,float mass,float breakforce)
+{
+    float deltatime;
+    float acceleration;
+    float mspeed;
+    vector breakvec;
+
+    deltatime = time - self.movelib_lastupdate;
+    if (deltatime > 0.15) deltatime = 0;
+    self.movelib_lastupdate = time;
+    if (!deltatime) return;
+
+    mspeed = vlen(self.velocity);
+
+    if (mass)
+        acceleration = vlen(force) / mass;
+    else
+        acceleration = vlen(force);
+
+    if (self.flags & FL_ONGROUND)
+    {
+        if (breakforce)
+        {
+            breakvec = (normalize(self.velocity) * (breakforce / mass) * deltatime);
+            self.velocity = self.velocity - breakvec;
+        }
+
+        self.velocity = self.velocity + force * (acceleration * deltatime);
+    }
+
+    if (drag)
+        self.velocity = movelib_dragvec(drag, 1);
+
+    if (self.waterlevel > 1)
+    {
+        self.velocity = self.velocity + force * (acceleration * deltatime);
+        self.velocity = self.velocity + '0 0 0.05' * sv_gravity * deltatime;
+    }
+    else
+        self.velocity = self.velocity + '0 0 -1' * sv_gravity * deltatime;
+
+    mspeed = vlen(self.velocity);
+
+    if (max_velocity)
+        if (mspeed > max_velocity)
+            self.velocity = normalize(self.velocity) * (mspeed - 50);//* max_velocity;
+}
+
+/*
+.float mass;
+.float side_friction;
+.float ground_friction;
+.float air_friction;
+.float water_friction;
+.float buoyancy;
+float movelib_deltatime;
+
+void movelib_startupdate()
+{
+    movelib_deltatime = time - self.movelib_lastupdate;
+
+    if (movelib_deltatime > 0.5)
+        movelib_deltatime = 0;
+
+    self.movelib_lastupdate = time;
+}
+
+void movelib_update(vector dir,float force)
+{
+    vector acceleration;
+    float old_speed;
+    float ffriction,v_z;
+
+    vector breakvec;
+    vector old_dir;
+    vector ggravity;
+    vector old;
+
+    if(!movelib_deltatime)
+        return;
+    v_z = self.velocity_z;
+    old_speed    = vlen(self.velocity);
+    old_dir      = normalize(self.velocity);
+
+    //ggravity      =  (sv_gravity / self.mass) * '0 0 100';
+    acceleration =  (force / self.mass) * dir;
+    //acceleration -= old_dir * (old_speed / self.mass);
+    acceleration -= ggravity;
+
+    if(self.waterlevel > 1)
+    {
+        ffriction = self.water_friction;
+        acceleration += self.buoyancy * '0 0 1';
+    }
+    else
+        if(self.flags & FL_ONGROUND)
+            ffriction = self.ground_friction;
+        else
+            ffriction = self.air_friction;
+
+    acceleration *= ffriction;
+    //self.velocity = self.velocity * (ffriction * movelib_deltatime);
+    self.velocity += acceleration * movelib_deltatime;
+    self.velocity_z = v_z;
+
+}
+*/
+
+void movelib_move_simple(vector newdir,float velo,float blendrate)
+{
+    self.velocity = self.velocity * (1 - blendrate) + (newdir * blendrate) * velo;
+}
+void movelib_beak_simple(float force)
+{
+    float mspeed;
+    vector mdir;
+    float vz;
+
+    mspeed = max(0,vlen(self.velocity) - force);
+    mdir   = normalize(self.velocity);
+    vz = self.velocity_z;
+    self.velocity = mdir * mspeed;
+    self.velocity_z = vz;
+}
+
+
+void movelib_groundalign4point(float spring_length,float spring_up,float blendrate)
+{
+    vector a,b,c,d,e,r,push_angle, ahead,side;
+
+    push_angle_y = 0;
+    r = (self.absmax + self.absmin) * 0.5 + (v_up * spring_up);
+    e = v_up * spring_length;
+
+    // Put springs slightly inside bbox
+    ahead = v_forward * (self.maxs_x * 0.85);
+    side  = v_right   * (self.maxs_y * 0.85);
+
+    a = r + ahead + side;
+    b = r + ahead - side;
+    c = r - ahead + side;
+    d = r - ahead - side;
+
+    traceline(a, a - e,MOVE_NORMAL,self);
+    a_z =  (1 - trace_fraction);
+    r = trace_endpos;
+
+    traceline(b, b - e,MOVE_NORMAL,self);
+    b_z =  (1 - trace_fraction);
+    r += trace_endpos;
+
+    traceline(c, c - e,MOVE_NORMAL,self);
+    c_z =  (1 - trace_fraction);
+    r += trace_endpos;
+
+    traceline(d, d - e,MOVE_NORMAL,self);
+    d_z =  (1 - trace_fraction);
+    r += trace_endpos;
+
+    a_x = r_z;
+    r = self.origin;
+    r_z = r_z;
+
+    push_angle_x = (a_z - c_z) * 45;
+    push_angle_x += (b_z - d_z) * 45;
+
+    push_angle_z = (b_z - a_z) * 45;
+    push_angle_z += (d_z - c_z) * 45;
+
+    //self.angles_x += push_angle_x * 0.95;
+    //self.angles_z += push_angle_z * 0.95;
+
+    self.angles_x = ((1-blendrate) *  self.angles_x)  + (push_angle_x * blendrate);
+    self.angles_z = ((1-blendrate) *  self.angles_z)  + (push_angle_z * blendrate);
+
+    //a = self.origin;
+    setorigin(self,r);
+}
+


Property changes on: branches/nexuiz-2.0/data/qcsrc/server/movelib.qc
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: branches/nexuiz-2.0/data/qcsrc/server/nexball.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/nexball.qc	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/qcsrc/server/nexball.qc	2009-07-11 14:59:28 UTC (rev 7191)
@@ -24,6 +24,7 @@
 float g_nexball_basketball_teamsteal;
 float balls;
 float ball_scale;
+float nb_teams;
 
 .float teamtime;
 
@@ -47,6 +48,15 @@
 	InitializeEntity(world, nb_delayedinit, INITPRIO_GAMETYPE);
 }
 
+float OtherTeam(float t)  //works only if there are two teams on the map!
+{
+	entity e;
+	e = find(world, classname, "nexball_team");
+	if (e.team == t)
+		e = find(e, classname, "nexball_team");
+	return e.team;
+}
+
 void ResetBall();
 
 void LogNB(string mode, entity actor)
@@ -130,7 +140,12 @@
 			ownr.metertime = 0;
 			ownr.weaponentity.state = WS_READY;
 		}
+		WaypointSprite_Kill(ownr.waypointsprite_attachedforcarrier);
 	}
+	else
+	{
+		WaypointSprite_Kill(ball.waypointsprite_attachedforcarrier);
+	}
 
 	setattachment(ball, plyr, "");
 	setorigin(ball, BALL_ATTACHORG);
@@ -152,7 +167,9 @@
 	ball.effects |= EF_NOSHADOW;
 	ball.scale = 1; // scale down.
 
-	ball.waypointsprite_attachedforcarrier.exteriormodeltoclient = plyr;
+	WaypointSprite_AttachCarrier("nb-ball", plyr);
+	WaypointSprite_UpdateRule(plyr.waypointsprite_attachedforcarrier, 0, SPRITERULE_DEFAULT);
+	WaypointSprite_UpdateTeamRadar(plyr.waypointsprite_attachedforcarrier, RADARICON_FLAGCARRIER, BALL_SPRITECOLOR);
 
 	if (g_nexball_basketball_delay_hold)
 	{
@@ -184,7 +201,10 @@
 		ball.owner.weaponentity.state = WS_READY;
 	}
 
-	ball.waypointsprite_attachedforcarrier.exteriormodeltoclient = world;
+	WaypointSprite_Kill(ball.owner.waypointsprite_attachedforcarrier);
+	WaypointSprite_AttachCarrier("nb-ball", ball);
+	WaypointSprite_UpdateRule(ball.waypointsprite_attachedforcarrier, 0, SPRITERULE_DEFAULT);
+	WaypointSprite_UpdateTeamRadar(ball.waypointsprite_attachedforcarrier, RADARICON_FLAGCARRIER, BALL_SPRITECOLOR);
 
 	ball.owner.ballcarried = world;
 	ball.owner = world;
@@ -300,7 +320,7 @@
 void GoalTouch (void)
 {
 	entity ball;
-	float isclient, pscore;
+	float isclient, pscore, otherteam;
 	string pname;
 
 	if (gameover) return;
@@ -316,6 +336,9 @@
 	EXACTTRIGGER_TOUCH;
 
 
+	if(nb_teams == 2)
+		otherteam = OtherTeam(ball.team);
+
 	if((isclient = ball.pusher.flags & FL_CLIENT))
 		pname = ball.pusher.netname;
 	else
@@ -328,7 +351,10 @@
 		pscore = -1;
 	} else if (self.team == GOAL_FAULT) {
 		LogNB("fault", ball.pusher);
-		bprint(ColoredTeamName(ball.team), " loses a point due to ", pname, "^7's silliness.\n");
+		if (nb_teams == 2)
+			bprint(ColoredTeamName(otherteam), " gets a point due to ", pname, "^7's silliness.\n");
+		else
+			bprint(ColoredTeamName(ball.team), " loses a point due to ", pname, "^7's silliness.\n");
 		pscore = -1;
 	} else if (self.team == GOAL_OUT) {
 		LogNB("out", ball.pusher);
@@ -346,11 +372,19 @@
 	sound (ball, CHAN_AUTO, self.noise, VOL_BASE, ATTN_NONE);
 
 	if(ball.team && pscore)
-		TeamScore_AddToTeam(ball.team, ST_NEXBALL_GOALS, pscore);
-	if (isclient && pscore > 0)
-		PlayerScore_Add(ball.pusher, SP_NEXBALL_GOALS, pscore);
-	else if (isclient && pscore < 0)
-		PlayerScore_Add(ball.pusher, SP_NEXBALL_FAULTS, pscore);
+	{
+		if (nb_teams == 2 && pscore < 0)
+			TeamScore_AddToTeam(otherteam, ST_NEXBALL_GOALS, -pscore);
+		else
+			TeamScore_AddToTeam(ball.team, ST_NEXBALL_GOALS, pscore);
+	}
+	if (isclient)
+	{
+		if (pscore > 0)
+			PlayerScore_Add(ball.pusher, SP_NEXBALL_GOALS, pscore);
+		else if (pscore < 0)
+			PlayerScore_Add(ball.pusher, SP_NEXBALL_FAULTS, -pscore);
+	}
 
 	if (ball.owner) // Happens on spawnflag GOAL_TOUCHPLAYER
 		DropBall(ball, ball.owner.origin, ball.owner.velocity);
@@ -382,6 +416,7 @@
 	e.netname = teamname;
 	e.cnt = teamcolor;
 	e.team = e.cnt + 1;
+	nb_teams += 1;
 };
 
 void nb_spawnteams (void)
@@ -467,7 +502,7 @@
 void spawnfunc_nexball_basketball (void)
 {
 	self.classname = "nexball_basketball";
-	if(!balls & BALL_BASKET)
+	if not(balls & BALL_BASKET)
 	{
 		CVTOV(g_nexball_basketball_effects_default);
 		CVTOV(g_nexball_basketball_delay_hold);


Property changes on: branches/nexuiz-2.0/data/qcsrc/server/nexball.qc
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: branches/nexuiz-2.0/data/qcsrc/server/pathlib/costs.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/pathlib/costs.qc	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/qcsrc/server/pathlib/costs.qc	2009-07-11 14:59:28 UTC (rev 7191)
@@ -1,144 +1,144 @@
-float pathlib_g_static(entity parent,vector to, float static_cost)
-{
-    return parent.pathlib_node_g + static_cost;
-}
-
-float pathlib_g_static_water(entity parent,vector to, float static_cost)
-{
-    if(inwater(to))
-        return parent.pathlib_node_g + static_cost * pathlib_movecost_waterfactor;
-    else
-        return parent.pathlib_node_g + static_cost;
-}
-
-float pathlib_g_euclidean(entity parent,vector to, float static_cost)
-{
-    return parent.pathlib_node_g + vlen(parent.origin - to);
-}
-
-float pathlib_g_euclidean_water(entity parent,vector to, float static_cost)
-{
-    if(inwater(to))
-        return parent.pathlib_node_g + vlen(parent.origin - to) * pathlib_movecost_waterfactor;
-    else
-        return parent.pathlib_node_g + vlen(parent.origin - to);
-}
-
-
-/**
-    Manhattan Menas we expect to move up,down left or right
-    No diagonal moves espected. (like moving bewteen city blocks)
-**/
-float pathlib_h_manhattan(vector a,vector b)
-{
-    //h(n) = D * (abs(n.x-goal.x) + abs(n.y-goal.y))
-
-    float h;
-    h  = fabs(a_x - b_x);
-    h += fabs(a_y - b_y);
-    h *= pathlib_gridsize;
-
-    return h;
-}
-
-/**
-    This heuristic consider both stright and disagonal moves
-    to have teh same cost.
-**/
-float pathlib_h_diagonal(vector a,vector b)
-{
-    //h(n) = D * max(abs(n.x-goal.x), abs(n.y-goal.y))
-    float h,x,y;
-
-    x = fabs(a_x - b_x);
-    y = fabs(a_y - b_y);
-    h = pathlib_movecost * max(x,y);
-
-    return h;
-}
-
-/**
-    This heuristic only considers the stright line distance.
-    Will usualy mean a lower H then G meaning A* Will speand more
-    and run slower.
-**/
-float pathlib_h_euclidean(vector a,vector b)
-{
-    return vlen(a - b);
-}
-
-/**
-    This heuristic consider both stright and disagonal moves,
-    But has a separate cost for diagonal moves.
-**/
-float pathlib_h_diagonal2(vector a,vector b)
-{
-    float h_diag,h_str,h,x,y;
-
-    /*
-    h_diagonal(n) = min(abs(n.x-goal.x), abs(n.y-goal.y))
-    h_straight(n) = (abs(n.x-goal.x) + abs(n.y-goal.y))
-    h(n) = D2 * h_diagonal(n) + D * (h_straight(n) - 2*h_diagonal(n)))
-    */
-
-    x = fabs(a_x - b_x);
-    y = fabs(a_y - b_y);
-
-    h_diag = min(x,y);
-    h_str = x + y;
-
-    h =  pathlib_movecost_diag * h_diag;
-    h += pathlib_movecost * (h_str - 2 * h_diag);
-
-    return h;
-}
-
-/**
-    This heuristic consider both stright and disagonal moves,
-    But has a separate cost for diagonal moves.
-**/
-float pathlib_h_diagonal2sdp(vector preprev,vector prev,vector point,vector end)
-{
-    float h_diag,h_str,h,x,y,z;
-
-    //h_diagonal(n) = min(abs(n.x-goal.x), abs(n.y-goal.y))
-    //h_straight(n) = (abs(n.x-goal.x) + abs(n.y-goal.y))
-    //h(n) = D2 * h_diagonal(n) + D * (h_straight(n) - 2*h_diagonal(n)))
-
-    x = fabs(point_x - end_x);
-    y = fabs(point_y - end_y);
-    z = fabs(point_z - end_z);
-
-    h_diag = min3(x,y,z);
-    h_str = x + y + z;
-
-    h =  pathlib_movecost_diag * h_diag;
-    h += pathlib_movecost * (h_str - 2 * h_diag);
-
-    float m;
-    vector d1,d2;
-
-    d1 = normalize(preprev - point);
-    d2 = normalize(prev    - point);
-    m = vlen(d1-d2);
-
-    return h * m;
-}
-
-
-float pathlib_h_diagonal3(vector a,vector b)
-{
-    float h_diag,h_str,h,x,y,z;
-
-    x = fabs(a_x - b_x);
-    y = fabs(a_y - b_y);
-    z = fabs(a_z - b_z);
-
-    h_diag = min3(x,y,z);
-    h_str = x + y + z;
-
-    h =  pathlib_movecost_diag * h_diag;
-    h += pathlib_movecost * (h_str - 2 * h_diag);
-
-    return h;
-}
+float pathlib_g_static(entity parent,vector to, float static_cost)
+{
+    return parent.pathlib_node_g + static_cost;
+}
+
+float pathlib_g_static_water(entity parent,vector to, float static_cost)
+{
+    if(inwater(to))
+        return parent.pathlib_node_g + static_cost * pathlib_movecost_waterfactor;
+    else
+        return parent.pathlib_node_g + static_cost;
+}
+
+float pathlib_g_euclidean(entity parent,vector to, float static_cost)
+{
+    return parent.pathlib_node_g + vlen(parent.origin - to);
+}
+
+float pathlib_g_euclidean_water(entity parent,vector to, float static_cost)
+{
+    if(inwater(to))
+        return parent.pathlib_node_g + vlen(parent.origin - to) * pathlib_movecost_waterfactor;
+    else
+        return parent.pathlib_node_g + vlen(parent.origin - to);
+}
+
+
+/**
+    Manhattan Menas we expect to move up,down left or right
+    No diagonal moves espected. (like moving bewteen city blocks)
+**/
+float pathlib_h_manhattan(vector a,vector b)
+{
+    //h(n) = D * (abs(n.x-goal.x) + abs(n.y-goal.y))
+
+    float h;
+    h  = fabs(a_x - b_x);
+    h += fabs(a_y - b_y);
+    h *= pathlib_gridsize;
+
+    return h;
+}
+
+/**
+    This heuristic consider both stright and disagonal moves
+    to have teh same cost.
+**/
+float pathlib_h_diagonal(vector a,vector b)
+{
+    //h(n) = D * max(abs(n.x-goal.x), abs(n.y-goal.y))
+    float h,x,y;
+
+    x = fabs(a_x - b_x);
+    y = fabs(a_y - b_y);
+    h = pathlib_movecost * max(x,y);
+
+    return h;
+}
+
+/**
+    This heuristic only considers the stright line distance.
+    Will usualy mean a lower H then G meaning A* Will speand more
+    and run slower.
+**/
+float pathlib_h_euclidean(vector a,vector b)
+{
+    return vlen(a - b);
+}
+
+/**
+    This heuristic consider both stright and disagonal moves,
+    But has a separate cost for diagonal moves.
+**/
+float pathlib_h_diagonal2(vector a,vector b)
+{
+    float h_diag,h_str,h,x,y;
+
+    /*
+    h_diagonal(n) = min(abs(n.x-goal.x), abs(n.y-goal.y))
+    h_straight(n) = (abs(n.x-goal.x) + abs(n.y-goal.y))
+    h(n) = D2 * h_diagonal(n) + D * (h_straight(n) - 2*h_diagonal(n)))
+    */
+
+    x = fabs(a_x - b_x);
+    y = fabs(a_y - b_y);
+
+    h_diag = min(x,y);
+    h_str = x + y;
+
+    h =  pathlib_movecost_diag * h_diag;
+    h += pathlib_movecost * (h_str - 2 * h_diag);
+
+    return h;
+}
+
+/**
+    This heuristic consider both stright and disagonal moves,
+    But has a separate cost for diagonal moves.
+**/
+float pathlib_h_diagonal2sdp(vector preprev,vector prev,vector point,vector end)
+{
+    float h_diag,h_str,h,x,y,z;
+
+    //h_diagonal(n) = min(abs(n.x-goal.x), abs(n.y-goal.y))
+    //h_straight(n) = (abs(n.x-goal.x) + abs(n.y-goal.y))
+    //h(n) = D2 * h_diagonal(n) + D * (h_straight(n) - 2*h_diagonal(n)))
+
+    x = fabs(point_x - end_x);
+    y = fabs(point_y - end_y);
+    z = fabs(point_z - end_z);
+
+    h_diag = min3(x,y,z);
+    h_str = x + y + z;
+
+    h =  pathlib_movecost_diag * h_diag;
+    h += pathlib_movecost * (h_str - 2 * h_diag);
+
+    float m;
+    vector d1,d2;
+
+    d1 = normalize(preprev - point);
+    d2 = normalize(prev    - point);
+    m = vlen(d1-d2);
+
+    return h * m;
+}
+
+
+float pathlib_h_diagonal3(vector a,vector b)
+{
+    float h_diag,h_str,h,x,y,z;
+
+    x = fabs(a_x - b_x);
+    y = fabs(a_y - b_y);
+    z = fabs(a_z - b_z);
+
+    h_diag = min3(x,y,z);
+    h_str = x + y + z;
+
+    h =  pathlib_movecost_diag * h_diag;
+    h += pathlib_movecost * (h_str - 2 * h_diag);
+
+    return h;
+}


Property changes on: branches/nexuiz-2.0/data/qcsrc/server/pathlib/costs.qc
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: branches/nexuiz-2.0/data/qcsrc/server/pathlib/debug.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/pathlib/debug.qc	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/qcsrc/server/pathlib/debug.qc	2009-07-11 14:59:28 UTC (rev 7191)
@@ -1,117 +1,117 @@
-
-void mark_error(vector where,float lifetime);
-void mark_info(vector where,float lifetime);
-entity mark_misc(vector where,float lifetime);
-
-
-void pathlib_showpath(entity start)
-{
-    entity e;
-    e = start;
-    while(e.path_next)
-    {
-        te_lightning1(e,e.origin,e.path_next.origin);
-        e = e.path_next;
-    }
-}
-
-void path_dbg_think()
-{
-    pathlib_showpath(self);
-    self.nextthink = time + 1;
-}
-
-void __showpath2_think()
-{
-    mark_info(self.origin,1);
-    if(self.path_next)
-    {
-        self.path_next.think     = __showpath2_think;
-        self.path_next.nextthink = time + 0.15;
-    }
-    else
-    {
-        self.owner.think     = __showpath2_think;
-        self.owner.nextthink = time + 0.15;
-    }
-}
-
-void pathlib_showpath2(entity path)
-{
-    path.think     = __showpath2_think;
-    path.nextthink = time;
-}
-
-
-void pathlib_showsquare2(entity node ,vector ncolor,float align)
-{
-
-    node.alpha     = 0.25;
-    node.scale     = pathlib_gridsize / 512.001;
-    node.solid     = SOLID_NOT;
-
-    setmodel(node,"models/pathlib/square.md3");
-    setorigin(node,node.origin);
-    node.colormod = ncolor;
-
-    if(align)
-    {
-        traceline(node.origin + '0 0 32',node.origin - '0 0 128',MOVE_WORLDONLY,node);
-        node.angles = vectoangles(trace_plane_normal);
-        node.angles_x -= 90;
-    }
-}
-
-void pathlib_showsquare(vector where,float goodsquare,float lifetime)
-{
-    entity s;
-
-    if(!lifetime)
-        lifetime = time + 30;
-    else
-        lifetime += time;
-
-    s           = spawn();
-    s.alpha     = 0.25;
-    s.think     = SUB_Remove;
-    s.nextthink = lifetime;
-    s.scale     = pathlib_gridsize / 512.001;
-    s.solid     = SOLID_NOT;
-
-    if(goodsquare)
-        setmodel(s,"models/pathlib/goodsquare.md3");
-    else
-        setmodel(s,"models/pathlib/badsquare.md3");
-
-
-
-    traceline(where + '0 0 32',where - '0 0 128',MOVE_WORLDONLY,s);
-
-    s.angles = vectoangles(trace_plane_normal);
-    s.angles_x -= 90;
-    setorigin(s,where);
-}
-
-void pathlib_showedge(vector where,float lifetime,float rot)
-{
-    entity e;
-
-    if(!lifetime)
-        lifetime = time + 30;
-    else
-        lifetime += time;
-
-    e           = spawn();
-    e.alpha     = 0.25;
-    e.think     = SUB_Remove;
-    e.nextthink = lifetime;
-    e.scale     = pathlib_gridsize / 512;
-    e.solid     = SOLID_NOT;
-    setorigin(e,where);
-    setmodel(e,"models/pathlib/edge.md3");
-    //traceline(where + '0 0 32',where - '0 0 128',MOVE_WORLDONLY,e);
-    //e.angles = vectoangles(trace_plane_normal);
-    e.angles_y = rot;
-    //e.angles_x += 90;
-
-}
+
+void mark_error(vector where,float lifetime);
+void mark_info(vector where,float lifetime);
+entity mark_misc(vector where,float lifetime);
+
+
+void pathlib_showpath(entity start)
+{
+    entity e;
+    e = start;
+    while(e.path_next)
+    {
+        te_lightning1(e,e.origin,e.path_next.origin);
+        e = e.path_next;
+    }
+}
+
+void path_dbg_think()
+{
+    pathlib_showpath(self);
+    self.nextthink = time + 1;
+}
+
+void __showpath2_think()
+{
+    mark_info(self.origin,1);
+    if(self.path_next)
+    {
+        self.path_next.think     = __showpath2_think;
+        self.path_next.nextthink = time + 0.15;
+    }
+    else
+    {
+        self.owner.think     = __showpath2_think;
+        self.owner.nextthink = time + 0.15;
+    }
+}
+
+void pathlib_showpath2(entity path)
+{
+    path.think     = __showpath2_think;
+    path.nextthink = time;
+}
+
+
+void pathlib_showsquare2(entity node ,vector ncolor,float align)
+{
+
+    node.alpha     = 0.25;
+    node.scale     = pathlib_gridsize / 512.001;
+    node.solid     = SOLID_NOT;
+
+    setmodel(node,"models/pathlib/square.md3");
+    setorigin(node,node.origin);
+    node.colormod = ncolor;
+
+    if(align)
+    {
+        traceline(node.origin + '0 0 32',node.origin - '0 0 128',MOVE_WORLDONLY,node);
+        node.angles = vectoangles(trace_plane_normal);
+        node.angles_x -= 90;
+    }
+}
+
+void pathlib_showsquare(vector where,float goodsquare,float lifetime)
+{
+    entity s;
+
+    if(!lifetime)
+        lifetime = time + 30;
+    else
+        lifetime += time;
+
+    s           = spawn();
+    s.alpha     = 0.25;
+    s.think     = SUB_Remove;
+    s.nextthink = lifetime;
+    s.scale     = pathlib_gridsize / 512.001;
+    s.solid     = SOLID_NOT;
+
+    if(goodsquare)
+        setmodel(s,"models/pathlib/goodsquare.md3");
+    else
+        setmodel(s,"models/pathlib/badsquare.md3");
+
+
+
+    traceline(where + '0 0 32',where - '0 0 128',MOVE_WORLDONLY,s);
+
+    s.angles = vectoangles(trace_plane_normal);
+    s.angles_x -= 90;
+    setorigin(s,where);
+}
+
+void pathlib_showedge(vector where,float lifetime,float rot)
+{
+    entity e;
+
+    if(!lifetime)
+        lifetime = time + 30;
+    else
+        lifetime += time;
+
+    e           = spawn();
+    e.alpha     = 0.25;
+    e.think     = SUB_Remove;
+    e.nextthink = lifetime;
+    e.scale     = pathlib_gridsize / 512;
+    e.solid     = SOLID_NOT;
+    setorigin(e,where);
+    setmodel(e,"models/pathlib/edge.md3");
+    //traceline(where + '0 0 32',where - '0 0 128',MOVE_WORLDONLY,e);
+    //e.angles = vectoangles(trace_plane_normal);
+    e.angles_y = rot;
+    //e.angles_x += 90;
+
+}


Property changes on: branches/nexuiz-2.0/data/qcsrc/server/pathlib/debug.qc
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: branches/nexuiz-2.0/data/qcsrc/server/pathlib/expandnode.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/pathlib/expandnode.qc	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/qcsrc/server/pathlib/expandnode.qc	2009-07-11 14:59:28 UTC (rev 7191)
@@ -1,196 +1,196 @@
-vector plib_points2[8];
-vector plib_points[8];
-float  plib_fvals[8];
-
-float pathlib_expandnode_starf(entity node, vector start, vector goal)
-{
-    vector where,f,r,t;
-    float i,fc,fc2,c;
-    entity nap;
-
-    where = node.origin;
-
-    f = PLIB_FORWARD * pathlib_gridsize;
-    r = PLIB_RIGHT   * pathlib_gridsize;
-
-    // Forward
-    plib_points[0] = where + f;
-
-    // Back
-    plib_points[1] = where - f;
-
-    // Right
-    plib_points[2] = where + r;
-
-    // Left
-    plib_points[3] = where - r;
-
-    // Forward-right
-    plib_points[4] = where + f + r;
-
-    // Forward-left
-    plib_points[5] = where + f - r;
-
-    // Back-right
-    plib_points[6] = where - f + r;
-
-    // Back-left
-    plib_points[7] = where - f - r;
-
-    for(i=0;i < 8; ++i)
-    {
-        t = plib_points[i];
-        fc  = pathlib_heuristic(t,goal) + pathlib_cost(node,t,pathlib_gridsize);
-        plib_fvals[i] = fc;
-
-    }
-
-    fc = plib_fvals[0];
-    plib_points2[0] = plib_points[0];
-    vector bp;
-    bp = plib_points[0];
-    for(i = 0; i < 8; ++i)
-    {
-        c = 0;
-        nap = pathlib_nodeatpoint(plib_points[i]);
-        if(nap)
-            if(nap.owner == openlist)
-                c = 1;
-        else
-            c = 1;
-
-        if(c)
-        if(plib_fvals[i] < fc)
-        {
-            bp = plib_points[i];
-            fc = plib_fvals[i];
-            plib_points2[fc2] = plib_points[i];
-            ++fc2;
-        }
-
-        /*
-        nap = pathlib_nodeatpoint(plib_points[i]);
-        if(nap)
-        if not nap.owner == closedlist)
-        {
-        }
-        */
-    }
-
-    pathlib_makenode(node,start,bp,goal,pathlib_gridsize);
-
-    for(i = 0; i < 3; ++i)
-    {
-        pathlib_makenode(node,start,plib_points2[i],goal,pathlib_gridsize);
-    }
-
-    return pathlib_open_cnt;
-}
-
-float pathlib_expandnode_star(entity node, vector start, vector goal)
-{
-    vector point,where,f,r;
-
-    where = node.origin;
-
-    f = PLIB_FORWARD * pathlib_gridsize;
-    r = PLIB_RIGHT   * pathlib_gridsize;
-
-    // Forward
-    point = where + f;
-    pathlib_makenode(node,start,point,goal,pathlib_movecost);
-
-    // Back
-    point = where - f;
-    pathlib_makenode(node,start,point,goal,pathlib_movecost);
-
-    // Right
-    point = where + r;
-    pathlib_makenode(node,start,point,goal,pathlib_movecost);
-
-    // Left
-    point = where - r;
-    pathlib_makenode(node,start,point,goal,pathlib_movecost);
-
-    // Forward-right
-    point = where + f + r;
-    pathlib_makenode(node,start,point,goal,pathlib_movecost_diag);
-
-    // Forward-left
-    point = where + f - r;
-    pathlib_makenode(node,start,point,goal,pathlib_movecost_diag);
-
-    // Back-right
-    point = where - f + r;
-    pathlib_makenode(node,start,point,goal,pathlib_movecost_diag);
-
-    // Back-left
-    point = where - f - r;
-    pathlib_makenode(node,start,point,goal,pathlib_movecost_diag);
-
-    return pathlib_open_cnt;
-}
-
-float pathlib_expandnode_octagon(entity node, vector start, vector goal)
-{
-    vector point,where,f,r;
-
-    where = node.origin;
-
-    f = PLIB_FORWARD * pathlib_gridsize;
-    r = PLIB_RIGHT   * pathlib_gridsize;
-
-    // Forward
-    point = where + f;
-    pathlib_makenode(node,start,point,goal,pathlib_movecost);
-
-    // Back
-    point = where - f;
-    pathlib_makenode(node,start,point,goal,pathlib_movecost);
-
-    // Right
-    point = where + r;
-    pathlib_makenode(node,start,point,goal,pathlib_movecost);
-
-    // Left
-    point = where - r;
-    pathlib_makenode(node,start,point,goal,pathlib_movecost);
-
-    f = PLIB_FORWARD * pathlib_gridsize * 0.5;
-    r = PLIB_RIGHT   * pathlib_gridsize * 0.5;
-
-    // Forward-right
-    point = where + f + r;
-    pathlib_makenode(node,start,point,goal,pathlib_movecost);
-
-
-    // Forward-left
-    point = where + f - r;
-    pathlib_makenode(node,start,point,goal,pathlib_movecost);
-
-
-    // Back-right
-    point = where - f + r;
-    pathlib_makenode(node,start,point,goal,pathlib_movecost);
-
-    // Back-left
-    point = where - f - r;
-    pathlib_makenode(node,start,point,goal,pathlib_movecost);
-
-    return pathlib_open_cnt;
-}
-
-float pathlib_expandnode_box(entity node, vector start, vector goal)
-{
-    vector v;
-
-    for(v_z = node.origin_z - pathlib_gridsize; v_z <= node.origin_z + pathlib_gridsize; v_z += pathlib_gridsize)
-    for(v_y = node.origin_y - pathlib_gridsize; v_y <= node.origin_y + pathlib_gridsize; v_y += pathlib_gridsize)
-    for(v_x = node.origin_x - pathlib_gridsize; v_x <= node.origin_x + pathlib_gridsize; v_x += pathlib_gridsize)
-    {
-        //if(vlen(v - node.origin))
-            pathlib_makenode(node,start,v,goal,pathlib_movecost);
-    }
-
-    return pathlib_open_cnt;
-}
+vector plib_points2[8];
+vector plib_points[8];
+float  plib_fvals[8];
+
+float pathlib_expandnode_starf(entity node, vector start, vector goal)
+{
+    vector where,f,r,t;
+    float i,fc,fc2,c;
+    entity nap;
+
+    where = node.origin;
+
+    f = PLIB_FORWARD * pathlib_gridsize;
+    r = PLIB_RIGHT   * pathlib_gridsize;
+
+    // Forward
+    plib_points[0] = where + f;
+
+    // Back
+    plib_points[1] = where - f;
+
+    // Right
+    plib_points[2] = where + r;
+
+    // Left
+    plib_points[3] = where - r;
+
+    // Forward-right
+    plib_points[4] = where + f + r;
+
+    // Forward-left
+    plib_points[5] = where + f - r;
+
+    // Back-right
+    plib_points[6] = where - f + r;
+
+    // Back-left
+    plib_points[7] = where - f - r;
+
+    for(i=0;i < 8; ++i)
+    {
+        t = plib_points[i];
+        fc  = pathlib_heuristic(t,goal) + pathlib_cost(node,t,pathlib_gridsize);
+        plib_fvals[i] = fc;
+
+    }
+
+    fc = plib_fvals[0];
+    plib_points2[0] = plib_points[0];
+    vector bp;
+    bp = plib_points[0];
+    for(i = 0; i < 8; ++i)
+    {
+        c = 0;
+        nap = pathlib_nodeatpoint(plib_points[i]);
+        if(nap)
+            if(nap.owner == openlist)
+                c = 1;
+        else
+            c = 1;
+
+        if(c)
+        if(plib_fvals[i] < fc)
+        {
+            bp = plib_points[i];
+            fc = plib_fvals[i];
+            plib_points2[fc2] = plib_points[i];
+            ++fc2;
+        }
+
+        /*
+        nap = pathlib_nodeatpoint(plib_points[i]);
+        if(nap)
+        if not nap.owner == closedlist)
+        {
+        }
+        */
+    }
+
+    pathlib_makenode(node,start,bp,goal,pathlib_gridsize);
+
+    for(i = 0; i < 3; ++i)
+    {
+        pathlib_makenode(node,start,plib_points2[i],goal,pathlib_gridsize);
+    }
+
+    return pathlib_open_cnt;
+}
+
+float pathlib_expandnode_star(entity node, vector start, vector goal)
+{
+    vector point,where,f,r;
+
+    where = node.origin;
+
+    f = PLIB_FORWARD * pathlib_gridsize;
+    r = PLIB_RIGHT   * pathlib_gridsize;
+
+    // Forward
+    point = where + f;
+    pathlib_makenode(node,start,point,goal,pathlib_movecost);
+
+    // Back
+    point = where - f;
+    pathlib_makenode(node,start,point,goal,pathlib_movecost);
+
+    // Right
+    point = where + r;
+    pathlib_makenode(node,start,point,goal,pathlib_movecost);
+
+    // Left
+    point = where - r;
+    pathlib_makenode(node,start,point,goal,pathlib_movecost);
+
+    // Forward-right
+    point = where + f + r;
+    pathlib_makenode(node,start,point,goal,pathlib_movecost_diag);
+
+    // Forward-left
+    point = where + f - r;
+    pathlib_makenode(node,start,point,goal,pathlib_movecost_diag);
+
+    // Back-right
+    point = where - f + r;
+    pathlib_makenode(node,start,point,goal,pathlib_movecost_diag);
+
+    // Back-left
+    point = where - f - r;
+    pathlib_makenode(node,start,point,goal,pathlib_movecost_diag);
+
+    return pathlib_open_cnt;
+}
+
+float pathlib_expandnode_octagon(entity node, vector start, vector goal)
+{
+    vector point,where,f,r;
+
+    where = node.origin;
+
+    f = PLIB_FORWARD * pathlib_gridsize;
+    r = PLIB_RIGHT   * pathlib_gridsize;
+
+    // Forward
+    point = where + f;
+    pathlib_makenode(node,start,point,goal,pathlib_movecost);
+
+    // Back
+    point = where - f;
+    pathlib_makenode(node,start,point,goal,pathlib_movecost);
+
+    // Right
+    point = where + r;
+    pathlib_makenode(node,start,point,goal,pathlib_movecost);
+
+    // Left
+    point = where - r;
+    pathlib_makenode(node,start,point,goal,pathlib_movecost);
+
+    f = PLIB_FORWARD * pathlib_gridsize * 0.5;
+    r = PLIB_RIGHT   * pathlib_gridsize * 0.5;
+
+    // Forward-right
+    point = where + f + r;
+    pathlib_makenode(node,start,point,goal,pathlib_movecost);
+
+
+    // Forward-left
+    point = where + f - r;
+    pathlib_makenode(node,start,point,goal,pathlib_movecost);
+
+
+    // Back-right
+    point = where - f + r;
+    pathlib_makenode(node,start,point,goal,pathlib_movecost);
+
+    // Back-left
+    point = where - f - r;
+    pathlib_makenode(node,start,point,goal,pathlib_movecost);
+
+    return pathlib_open_cnt;
+}
+
+float pathlib_expandnode_box(entity node, vector start, vector goal)
+{
+    vector v;
+
+    for(v_z = node.origin_z - pathlib_gridsize; v_z <= node.origin_z + pathlib_gridsize; v_z += pathlib_gridsize)
+    for(v_y = node.origin_y - pathlib_gridsize; v_y <= node.origin_y + pathlib_gridsize; v_y += pathlib_gridsize)
+    for(v_x = node.origin_x - pathlib_gridsize; v_x <= node.origin_x + pathlib_gridsize; v_x += pathlib_gridsize)
+    {
+        //if(vlen(v - node.origin))
+            pathlib_makenode(node,start,v,goal,pathlib_movecost);
+    }
+
+    return pathlib_open_cnt;
+}


Property changes on: branches/nexuiz-2.0/data/qcsrc/server/pathlib/expandnode.qc
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: branches/nexuiz-2.0/data/qcsrc/server/pathlib/main.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/pathlib/main.qc	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/qcsrc/server/pathlib/main.qc	2009-07-11 14:59:28 UTC (rev 7191)
@@ -1,534 +1,534 @@
-void pathlib_deletepath(entity start)
-{
-    entity e;
-
-    e = findchainentity(owner, start);
-    while(e)
-    {
-        e.think = SUB_Remove;
-        e.nextthink = time;
-        e = e.chain;
-    }
-}
-
-//#define PATHLIB_NODEEXPIRE 0.05
-#define PATHLIB_NODEEXPIRE 20
-
-void dumpnode(entity n)
-{
-    n.is_path_node = FALSE;
-    n.think        = SUB_Remove;
-    n.nextthink    = time;
-}
-
-entity pathlib_mknode(vector where,entity parent)
-{
-    entity node;
-
-    node = pathlib_nodeatpoint(where);
-    if(node)
-    {
-        mark_error(where,60);
-        return node;
-    }
-
-    node = spawn();
-
-    node.think        = SUB_Remove;
-    node.nextthink    = time + PATHLIB_NODEEXPIRE;
-    node.is_path_node = TRUE;
-    node.owner        = openlist;
-    node.path_prev    = parent;
-
-    setmodel(node,"models/pathlib/square.md3");
-    setsize(node,'0 0 0','0 0 0');
-    node.colormod = randomvec() * 2;
-    node.alpha = 0.25;
-    node.scale     = pathlib_gridsize / 512.001;
-
-    //pathlib_showsquare2(node,'1 1 1',0);//(node.medium & CONTENT_EMPTY));
-    setorigin(node, where);
-    node.medium = pointcontents(where);
-
-    mark_info(where,60);
-    //pathlib_showsquare(where,1,30);
-
-
-    ++pathlib_made_cnt;
-    ++pathlib_open_cnt;
-
-    return node;
-}
-
-float pathlib_makenode_adaptive(entity parent,vector start, vector to, vector goal,float cost)
-{
-    entity node;
-    float h,g,f,doedge;
-    vector where;
-
-    ++pathlib_searched_cnt;
-
-    if(inwater(parent.origin))
-    {
-        pathlib_expandnode = pathlib_expandnode_box;
-        pathlib_movenode   = pathlib_swimnode;
-    }
-    else
-    {
-        if(inwater(to))
-        {
-            pathlib_expandnode = pathlib_expandnode_box;
-            pathlib_movenode   = pathlib_walknode;
-        }
-        else
-        {
-            //if(edge_check(parent.origin))
-            //    return 0;
-
-            pathlib_expandnode = pathlib_expandnode_star;
-            pathlib_movenode   = pathlib_walknode;
-            doedge = 1;
-        }
-    }
-
-    node = pathlib_nodeatpoint(to);
-    if(node)
-    {
-        ++pathlib_merge_cnt;
-
-        if(node.owner == openlist)
-        {
-            h = pathlib_heuristic(node.origin,goal);
-            g = pathlib_cost(parent,node.origin,cost);
-            f = g + h;
-
-            if(node.pathlib_node_g > g)
-            {
-                node.pathlib_node_h = h;
-                node.pathlib_node_g = g;
-                node.pathlib_node_f = f;
-
-                node.path_prev = parent;
-            }
-
-            if not (best_open_node)
-                best_open_node = node;
-            else if(best_open_node.pathlib_node_f > node.pathlib_node_f)
-                best_open_node = node;
-        }
-
-        return 1;
-    }
-
-    where = pathlib_movenode(parent.origin,to,0);
-    if not(pathlib_movenode_goodnode)
-        return 0;
-
-    if(pathlib_nodeatpoint(where))
-    {
-        dprint("NAP WHERE :",vtos(where),"\n");
-        dprint("not NAP TO:",vtos(to),"\n");
-        dprint("NAP-NNAP:",ftos(vlen(to-where)),"\n\n");
-        return 0;
-    }
-
-    if(doedge)
-        if not (tile_check(where))
-            return 0;
-
-    h = pathlib_heuristic(where,goal);
-    g = pathlib_cost(parent,where,cost);
-    f = g + h;
-
-
-    /*
-    node = findradius(where,pathlib_gridsize * 0.5);
-    while(node)
-    {
-        if(node.is_path_node == TRUE)
-        {
-            ++pathlib_merge_cnt;
-            if(node.owner == openlist)
-            {
-                if(node.pathlib_node_g > g)
-                {
-                    //pathlib_movenode(where,node.origin,0);
-                    //if(pathlib_movenode_goodnode)
-                    //{
-                        //mark_error(node.origin + '0 0 128',30);
-                        node.pathlib_node_h = h;
-                        node.pathlib_node_g = g;
-                        node.pathlib_node_f = f;
-                        node.path_prev = parent;
-                    //}
-                }
-
-                if not (best_open_node)
-                    best_open_node = node;
-                else if(best_open_node.pathlib_node_f > node.pathlib_node_f)
-                    best_open_node = node;
-            }
-
-            return 1;
-        }
-        node = node.chain;
-    }
-    */
-
-    node = pathlib_mknode(where,parent);
-    node.pathlib_node_h = h;
-    node.pathlib_node_g = g;
-    node.pathlib_node_f = f;
-
-    if not (best_open_node)
-        best_open_node = node;
-    else if(best_open_node.pathlib_node_f > node.pathlib_node_f)
-        best_open_node = node;
-
-    return 1;
-}
-
-entity pathlib_getbestopen()
-{
-    entity node;
-    entity bestnode;
-
-    if(best_open_node)
-    {
-        ++pathlib_bestcash_hits;
-        pathlib_bestcash_saved += pathlib_open_cnt;
-
-        return best_open_node;
-    }
-
-    node = findchainentity(owner,openlist);
-    if(!node)
-        return world;
-
-    bestnode = node;
-    while(node)
-    {
-        ++pathlib_bestopen_seached;
-        if(node.pathlib_node_f < bestnode.pathlib_node_f)
-            bestnode = node;
-
-        node = node.chain;
-    }
-
-    return bestnode;
-}
-
-void pathlib_close_node(entity node,vector goal)
-{
-
-    if(node.owner == closedlist)
-    {
-        dprint("Pathlib: Tried to close a closed node!\n");
-        return;
-    }
-
-    if(node == best_open_node)
-        best_open_node = world;
-
-    ++pathlib_closed_cnt;
-    --pathlib_open_cnt;
-
-    node.owner = closedlist;
-
-    if(vlen(node.origin - goal) <= pathlib_gridsize)
-    {
-        vector goalmove;
-
-        goalmove = pathlib_walknode(node.origin,goal,1);
-        if(pathlib_movenode_goodnode)
-        {
-            goal_node         = node;
-            pathlib_foundgoal = TRUE;
-        }
-    }
-}
-
-void pathlib_cleanup()
-{
-    best_open_node = world;
-
-    //return;
-
-    entity node;
-
-    node = findfloat(world,is_path_node, TRUE);
-    while(node)
-    {
-        /*
-        node.owner = openlist;
-        node.pathlib_node_g = 0;
-        node.pathlib_node_h = 0;
-        node.pathlib_node_f = 0;
-        node.path_prev = world;
-        */
-
-        dumpnode(node);
-        node = findfloat(node,is_path_node, TRUE);
-    }
-
-    if(openlist)
-        remove(openlist);
-
-    if(closedlist)
-        remove(closedlist);
-
-    openlist       = world;
-    closedlist     = world;
-
-}
-
-float Cosine_Interpolate(float a, float b, float x)
-{
-    float ft,f;
-
-	ft = x * 3.1415927;
-	f = (1 - cos(ft)) * 0.5;
-
-	return  a*(1-f) + b*f;
-}
-
-float buildpath_nodefilter_directional(vector n,vector c,vector p)
-{
-    vector d1,d2;
-
-    d2 = normalize(p - c);
-    d1 = normalize(c - n);
-
-    if(vlen(d1-d2) < 0.25)
-    {
-        //mark_error(c,30);
-        return 1;
-    }
-    //mark_info(c,30);
-    return 0;
-}
-
-float buildpath_nodefilter_moveskip(vector n,vector c,vector p)
-{
-    pathlib_walknode(p,n,1);
-    if(pathlib_movenode_goodnode)
-        return 1;
-
-    return 0;
-}
-
-entity path_build(entity next, vector where, entity prev, entity start)
-{
-    entity path;
-
-    if(prev && next)
-        if(buildpath_nodefilter)
-            if(buildpath_nodefilter(next.origin,where,prev.origin))
-                return next;
-
-
-    path           = spawn();
-    path.owner     = start;
-    path.path_next = next;
-
-    setorigin(path,where);
-
-    if(!next)
-        path.classname = "path_end";
-    else
-    {
-        if(!prev)
-            path.classname = "path_start";
-        else
-            path.classname = "path_node";
-    }
-
-    return path;
-}
-
-entity pathlib_astar(vector from,vector to)
-{
-    entity path, start, end, open, n, ln;
-    float ptime, ftime, ctime;
-
-    ptime = gettime(GETTIME_REALTIME);
-    pathlib_starttime = ptime;
-
-    pathlib_cleanup();
-
-    // Select water<->land capable node make/link
-    pathlib_makenode     = pathlib_makenode_adaptive;
-    // Select XYZ cost estimate
-    //pathlib_heuristic    = pathlib_h_diagonal3;
-    pathlib_heuristic    = pathlib_h_diagonal;
-    // Select distance + waterfactor cost
-    pathlib_cost         = pathlib_g_euclidean_water;
-    // Select star expander
-    pathlib_expandnode   = pathlib_expandnode_star;
-    // Select walk simulation movement test
-    pathlib_movenode     = pathlib_walknode;
-    // Filter final nodes by direction
-    buildpath_nodefilter = buildpath_nodefilter_directional;
-    // Filter tiles with cross pattern
-    tile_check = tile_check_cross;
-
-    // If the start is in water we need diffrent settings
-    if(inwater(from))
-    {
-        // Select volumetric node expaner
-        pathlib_expandnode = pathlib_expandnode_box;
-
-        // Water movement test
-        pathlib_movenode   = pathlib_swimnode;
-    }
-
-    if not(openlist)
-        openlist       = spawn();
-
-    if not(closedlist)
-        closedlist     = spawn();
-
-    pathlib_closed_cnt       = 0;
-    pathlib_open_cnt         = 0;
-    pathlib_made_cnt         = 0;
-    pathlib_merge_cnt        = 0;
-    pathlib_searched_cnt     = 0;
-    pathlib_bestopen_seached = 0;
-    pathlib_bestcash_hits    = 0;
-    pathlib_bestcash_saved   = 0;
-
-    pathlib_gridsize       = 128;
-    pathlib_movecost       = pathlib_gridsize;
-    pathlib_movecost_diag  = vlen(('1 1 0' * pathlib_gridsize));
-    pathlib_movecost_waterfactor = 1;
-    pathlib_foundgoal      = 0;
-
-    movenode_boxmax   = self.maxs * 1.25;
-    movenode_boxmin   = self.mins * 1.25;
-
-    movenode_stepsize = 32;
-
-    tile_check_size = 65;
-    tile_check_up   = '0 0 128';
-    tile_check_down = '0 0 128';
-
-    movenode_stepup   = '0 0 36';
-    movenode_maxdrop  = '0 0 128';
-    movenode_boxup    = '0 0 72';
-
-    from_x = fsnap(from_x,pathlib_gridsize);
-    from_y = fsnap(from_y,pathlib_gridsize);
-
-    to_x = fsnap(to_x,pathlib_gridsize);
-    to_y = fsnap(to_y,pathlib_gridsize);
-
-    dprint("AStar init\n");
-    path = pathlib_mknode(from,world);
-    pathlib_close_node(path,to);
-    if(pathlib_foundgoal)
-    {
-        dprint("AStar: Goal found on first node!\n");
-
-        open           = spawn();
-        open.owner     = open;
-        open.classname = "path_end";
-        setorigin(open,path.origin);
-
-        pathlib_cleanup();
-
-        return open;
-    }
-
-    if(pathlib_expandnode(path,from,to) <= 0)
-    {
-        dprint("AStar path fail.\n");
-        pathlib_cleanup();
-
-        return world;
-    }
-
-    best_open_node = pathlib_getbestopen();
-    n = best_open_node;
-    pathlib_close_node(best_open_node,to);
-    if(inwater(n.origin))
-        pathlib_expandnode_box(n,from,to);
-    else
-        pathlib_expandnode_star(n,from,to);
-
-    while(pathlib_open_cnt)
-    {
-        if((gettime(GETTIME_REALTIME) - pathlib_starttime) > pathlib_maxtime)
-        {
-            dprint("Path took to long to compute!\n");
-            dprint("Nodes - created: ", ftos(pathlib_made_cnt),"\n");
-            dprint("Nodes -    open: ", ftos(pathlib_open_cnt),"\n");
-            dprint("Nodes -  merged: ", ftos(pathlib_merge_cnt),"\n");
-            dprint("Nodes -  closed: ", ftos(pathlib_closed_cnt),"\n");
-
-            pathlib_cleanup();
-            return world;
-        }
-
-        best_open_node = pathlib_getbestopen();
-        n = best_open_node;
-        pathlib_close_node(best_open_node,to);
-
-        if(inwater(n.origin))
-            pathlib_expandnode_box(n,from,to);
-        else
-            pathlib_expandnode(n,from,to);
-
-        if(pathlib_foundgoal)
-        {
-            dprint("Target found. Rebuilding and filtering path...\n");
-            ftime = gettime(GETTIME_REALTIME);
-            ptime = ftime - ptime;
-
-            start = path_build(world,path.origin,world,world);
-            end   = path_build(world,goal_node.origin,world,start);
-            ln    = end;
-
-            open = goal_node;
-            for(open = goal_node; open.path_prev != path; open = open.path_prev)
-            {
-                n    = path_build(ln,open.origin,open.path_prev,start);
-                ln.path_prev = n;
-                ln = n;
-            }
-            start.path_next = n;
-            n.path_prev = start;
-            ftime = gettime(GETTIME_REALTIME) - ftime;
-
-            ctime = gettime(GETTIME_REALTIME);
-            pathlib_cleanup();
-            ctime = gettime(GETTIME_REALTIME) - ctime;
-
-
-#ifdef DEBUGPATHING
-            pathlib_showpath2(start);
-
-            dprint("Time used -      pathfinding: ", ftos(ptime),"\n");
-            dprint("Time used - rebuild & filter: ", ftos(ftime),"\n");
-            dprint("Time used -          cleanup: ", ftos(ctime),"\n");
-            dprint("Time used -            total: ", ftos(ptime + ftime + ctime),"\n");
-            dprint("Time used -         # frames: ", ftos(ceil((ptime + ftime + ctime) / sys_ticrate)),"\n\n");
-            dprint("Nodes -         created: ", ftos(pathlib_made_cnt),"\n");
-            dprint("Nodes -            open: ", ftos(pathlib_open_cnt),"\n");
-            dprint("Nodes -          merged: ", ftos(pathlib_merge_cnt),"\n");
-            dprint("Nodes -          closed: ", ftos(pathlib_closed_cnt),"\n");
-            dprint("Nodes -        searched: ", ftos(pathlib_searched_cnt),"\n");
-            dprint("Nodes bestopen searched: ", ftos(pathlib_bestopen_seached),"\n");
-            dprint("Nodes bestcash -   hits: ", ftos(pathlib_bestcash_hits),"\n");
-            dprint("Nodes bestcash -   save: ", ftos(pathlib_bestcash_saved),"\n");
-            dprint("AStar done.\n");
-#endif
-            return start;
-        }
-    }
-
-    dprint("A* Faild to find a path! Try a smaller gridsize.\n");
-
-    pathlib_cleanup();
-
-    return world;
-}
+void pathlib_deletepath(entity start)
+{
+    entity e;
+
+    e = findchainentity(owner, start);
+    while(e)
+    {
+        e.think = SUB_Remove;
+        e.nextthink = time;
+        e = e.chain;
+    }
+}
+
+//#define PATHLIB_NODEEXPIRE 0.05
+#define PATHLIB_NODEEXPIRE 20
+
+void dumpnode(entity n)
+{
+    n.is_path_node = FALSE;
+    n.think        = SUB_Remove;
+    n.nextthink    = time;
+}
+
+entity pathlib_mknode(vector where,entity parent)
+{
+    entity node;
+
+    node = pathlib_nodeatpoint(where);
+    if(node)
+    {
+        mark_error(where,60);
+        return node;
+    }
+
+    node = spawn();
+
+    node.think        = SUB_Remove;
+    node.nextthink    = time + PATHLIB_NODEEXPIRE;
+    node.is_path_node = TRUE;
+    node.owner        = openlist;
+    node.path_prev    = parent;
+
+    setmodel(node,"models/pathlib/square.md3");
+    setsize(node,'0 0 0','0 0 0');
+    node.colormod = randomvec() * 2;
+    node.alpha = 0.25;
+    node.scale     = pathlib_gridsize / 512.001;
+
+    //pathlib_showsquare2(node,'1 1 1',0);//(node.medium & CONTENT_EMPTY));
+    setorigin(node, where);
+    node.medium = pointcontents(where);
+
+    mark_info(where,60);
+    //pathlib_showsquare(where,1,30);
+
+
+    ++pathlib_made_cnt;
+    ++pathlib_open_cnt;
+
+    return node;
+}
+
+float pathlib_makenode_adaptive(entity parent,vector start, vector to, vector goal,float cost)
+{
+    entity node;
+    float h,g,f,doedge;
+    vector where;
+
+    ++pathlib_searched_cnt;
+
+    if(inwater(parent.origin))
+    {
+        pathlib_expandnode = pathlib_expandnode_box;
+        pathlib_movenode   = pathlib_swimnode;
+    }
+    else
+    {
+        if(inwater(to))
+        {
+            pathlib_expandnode = pathlib_expandnode_box;
+            pathlib_movenode   = pathlib_walknode;
+        }
+        else
+        {
+            //if(edge_check(parent.origin))
+            //    return 0;
+
+            pathlib_expandnode = pathlib_expandnode_star;
+            pathlib_movenode   = pathlib_walknode;
+            doedge = 1;
+        }
+    }
+
+    node = pathlib_nodeatpoint(to);
+    if(node)
+    {
+        ++pathlib_merge_cnt;
+
+        if(node.owner == openlist)
+        {
+            h = pathlib_heuristic(node.origin,goal);
+            g = pathlib_cost(parent,node.origin,cost);
+            f = g + h;
+
+            if(node.pathlib_node_g > g)
+            {
+                node.pathlib_node_h = h;
+                node.pathlib_node_g = g;
+                node.pathlib_node_f = f;
+
+                node.path_prev = parent;
+            }
+
+            if not (best_open_node)
+                best_open_node = node;
+            else if(best_open_node.pathlib_node_f > node.pathlib_node_f)
+                best_open_node = node;
+        }
+
+        return 1;
+    }
+
+    where = pathlib_movenode(parent.origin,to,0);
+    if not(pathlib_movenode_goodnode)
+        return 0;
+
+    if(pathlib_nodeatpoint(where))
+    {
+        dprint("NAP WHERE :",vtos(where),"\n");
+        dprint("not NAP TO:",vtos(to),"\n");
+        dprint("NAP-NNAP:",ftos(vlen(to-where)),"\n\n");
+        return 0;
+    }
+
+    if(doedge)
+        if not (tile_check(where))
+            return 0;
+
+    h = pathlib_heuristic(where,goal);
+    g = pathlib_cost(parent,where,cost);
+    f = g + h;
+
+
+    /*
+    node = findradius(where,pathlib_gridsize * 0.5);
+    while(node)
+    {
+        if(node.is_path_node == TRUE)
+        {
+            ++pathlib_merge_cnt;
+            if(node.owner == openlist)
+            {
+                if(node.pathlib_node_g > g)
+                {
+                    //pathlib_movenode(where,node.origin,0);
+                    //if(pathlib_movenode_goodnode)
+                    //{
+                        //mark_error(node.origin + '0 0 128',30);
+                        node.pathlib_node_h = h;
+                        node.pathlib_node_g = g;
+                        node.pathlib_node_f = f;
+                        node.path_prev = parent;
+                    //}
+                }
+
+                if not (best_open_node)
+                    best_open_node = node;
+                else if(best_open_node.pathlib_node_f > node.pathlib_node_f)
+                    best_open_node = node;
+            }
+
+            return 1;
+        }
+        node = node.chain;
+    }
+    */
+
+    node = pathlib_mknode(where,parent);
+    node.pathlib_node_h = h;
+    node.pathlib_node_g = g;
+    node.pathlib_node_f = f;
+
+    if not (best_open_node)
+        best_open_node = node;
+    else if(best_open_node.pathlib_node_f > node.pathlib_node_f)
+        best_open_node = node;
+
+    return 1;
+}
+
+entity pathlib_getbestopen()
+{
+    entity node;
+    entity bestnode;
+
+    if(best_open_node)
+    {
+        ++pathlib_bestcash_hits;
+        pathlib_bestcash_saved += pathlib_open_cnt;
+
+        return best_open_node;
+    }
+
+    node = findchainentity(owner,openlist);
+    if(!node)
+        return world;
+
+    bestnode = node;
+    while(node)
+    {
+        ++pathlib_bestopen_seached;
+        if(node.pathlib_node_f < bestnode.pathlib_node_f)
+            bestnode = node;
+
+        node = node.chain;
+    }
+
+    return bestnode;
+}
+
+void pathlib_close_node(entity node,vector goal)
+{
+
+    if(node.owner == closedlist)
+    {
+        dprint("Pathlib: Tried to close a closed node!\n");
+        return;
+    }
+
+    if(node == best_open_node)
+        best_open_node = world;
+
+    ++pathlib_closed_cnt;
+    --pathlib_open_cnt;
+
+    node.owner = closedlist;
+
+    if(vlen(node.origin - goal) <= pathlib_gridsize)
+    {
+        vector goalmove;
+
+        goalmove = pathlib_walknode(node.origin,goal,1);
+        if(pathlib_movenode_goodnode)
+        {
+            goal_node         = node;
+            pathlib_foundgoal = TRUE;
+        }
+    }
+}
+
+void pathlib_cleanup()
+{
+    best_open_node = world;
+
+    //return;
+
+    entity node;
+
+    node = findfloat(world,is_path_node, TRUE);
+    while(node)
+    {
+        /*
+        node.owner = openlist;
+        node.pathlib_node_g = 0;
+        node.pathlib_node_h = 0;
+        node.pathlib_node_f = 0;
+        node.path_prev = world;
+        */
+
+        dumpnode(node);
+        node = findfloat(node,is_path_node, TRUE);
+    }
+
+    if(openlist)
+        remove(openlist);
+
+    if(closedlist)
+        remove(closedlist);
+
+    openlist       = world;
+    closedlist     = world;
+
+}
+
+float Cosine_Interpolate(float a, float b, float x)
+{
+    float ft,f;
+
+	ft = x * 3.1415927;
+	f = (1 - cos(ft)) * 0.5;
+
+	return  a*(1-f) + b*f;
+}
+
+float buildpath_nodefilter_directional(vector n,vector c,vector p)
+{
+    vector d1,d2;
+
+    d2 = normalize(p - c);
+    d1 = normalize(c - n);
+
+    if(vlen(d1-d2) < 0.25)
+    {
+        //mark_error(c,30);
+        return 1;
+    }
+    //mark_info(c,30);
+    return 0;
+}
+
+float buildpath_nodefilter_moveskip(vector n,vector c,vector p)
+{
+    pathlib_walknode(p,n,1);
+    if(pathlib_movenode_goodnode)
+        return 1;
+
+    return 0;
+}
+
+entity path_build(entity next, vector where, entity prev, entity start)
+{
+    entity path;
+
+    if(prev && next)
+        if(buildpath_nodefilter)
+            if(buildpath_nodefilter(next.origin,where,prev.origin))
+                return next;
+
+
+    path           = spawn();
+    path.owner     = start;
+    path.path_next = next;
+
+    setorigin(path,where);
+
+    if(!next)
+        path.classname = "path_end";
+    else
+    {
+        if(!prev)
+            path.classname = "path_start";
+        else
+            path.classname = "path_node";
+    }
+
+    return path;
+}
+
+entity pathlib_astar(vector from,vector to)
+{
+    entity path, start, end, open, n, ln;
+    float ptime, ftime, ctime;
+
+    ptime = gettime(GETTIME_REALTIME);
+    pathlib_starttime = ptime;
+
+    pathlib_cleanup();
+
+    // Select water<->land capable node make/link
+    pathlib_makenode     = pathlib_makenode_adaptive;
+    // Select XYZ cost estimate
+    //pathlib_heuristic    = pathlib_h_diagonal3;
+    pathlib_heuristic    = pathlib_h_diagonal;
+    // Select distance + waterfactor cost
+    pathlib_cost         = pathlib_g_euclidean_water;
+    // Select star expander
+    pathlib_expandnode   = pathlib_expandnode_star;
+    // Select walk simulation movement test
+    pathlib_movenode     = pathlib_walknode;
+    // Filter final nodes by direction
+    buildpath_nodefilter = buildpath_nodefilter_directional;
+    // Filter tiles with cross pattern
+    tile_check = tile_check_cross;
+
+    // If the start is in water we need diffrent settings
+    if(inwater(from))
+    {
+        // Select volumetric node expaner
+        pathlib_expandnode = pathlib_expandnode_box;
+
+        // Water movement test
+        pathlib_movenode   = pathlib_swimnode;
+    }
+
+    if not(openlist)
+        openlist       = spawn();
+
+    if not(closedlist)
+        closedlist     = spawn();
+
+    pathlib_closed_cnt       = 0;
+    pathlib_open_cnt         = 0;
+    pathlib_made_cnt         = 0;
+    pathlib_merge_cnt        = 0;
+    pathlib_searched_cnt     = 0;
+    pathlib_bestopen_seached = 0;
+    pathlib_bestcash_hits    = 0;
+    pathlib_bestcash_saved   = 0;
+
+    pathlib_gridsize       = 128;
+    pathlib_movecost       = pathlib_gridsize;
+    pathlib_movecost_diag  = vlen(('1 1 0' * pathlib_gridsize));
+    pathlib_movecost_waterfactor = 1;
+    pathlib_foundgoal      = 0;
+
+    movenode_boxmax   = self.maxs * 1.25;
+    movenode_boxmin   = self.mins * 1.25;
+
+    movenode_stepsize = 32;
+
+    tile_check_size = 65;
+    tile_check_up   = '0 0 128';
+    tile_check_down = '0 0 128';
+
+    movenode_stepup   = '0 0 36';
+    movenode_maxdrop  = '0 0 128';
+    movenode_boxup    = '0 0 72';
+
+    from_x = fsnap(from_x,pathlib_gridsize);
+    from_y = fsnap(from_y,pathlib_gridsize);
+
+    to_x = fsnap(to_x,pathlib_gridsize);
+    to_y = fsnap(to_y,pathlib_gridsize);
+
+    dprint("AStar init\n");
+    path = pathlib_mknode(from,world);
+    pathlib_close_node(path,to);
+    if(pathlib_foundgoal)
+    {
+        dprint("AStar: Goal found on first node!\n");
+
+        open           = spawn();
+        open.owner     = open;
+        open.classname = "path_end";
+        setorigin(open,path.origin);
+
+        pathlib_cleanup();
+
+        return open;
+    }
+
+    if(pathlib_expandnode(path,from,to) <= 0)
+    {
+        dprint("AStar path fail.\n");
+        pathlib_cleanup();
+
+        return world;
+    }
+
+    best_open_node = pathlib_getbestopen();
+    n = best_open_node;
+    pathlib_close_node(best_open_node,to);
+    if(inwater(n.origin))
+        pathlib_expandnode_box(n,from,to);
+    else
+        pathlib_expandnode_star(n,from,to);
+
+    while(pathlib_open_cnt)
+    {
+        if((gettime(GETTIME_REALTIME) - pathlib_starttime) > pathlib_maxtime)
+        {
+            dprint("Path took to long to compute!\n");
+            dprint("Nodes - created: ", ftos(pathlib_made_cnt),"\n");
+            dprint("Nodes -    open: ", ftos(pathlib_open_cnt),"\n");
+            dprint("Nodes -  merged: ", ftos(pathlib_merge_cnt),"\n");
+            dprint("Nodes -  closed: ", ftos(pathlib_closed_cnt),"\n");
+
+            pathlib_cleanup();
+            return world;
+        }
+
+        best_open_node = pathlib_getbestopen();
+        n = best_open_node;
+        pathlib_close_node(best_open_node,to);
+
+        if(inwater(n.origin))
+            pathlib_expandnode_box(n,from,to);
+        else
+            pathlib_expandnode(n,from,to);
+
+        if(pathlib_foundgoal)
+        {
+            dprint("Target found. Rebuilding and filtering path...\n");
+            ftime = gettime(GETTIME_REALTIME);
+            ptime = ftime - ptime;
+
+            start = path_build(world,path.origin,world,world);
+            end   = path_build(world,goal_node.origin,world,start);
+            ln    = end;
+
+            open = goal_node;
+            for(open = goal_node; open.path_prev != path; open = open.path_prev)
+            {
+                n    = path_build(ln,open.origin,open.path_prev,start);
+                ln.path_prev = n;
+                ln = n;
+            }
+            start.path_next = n;
+            n.path_prev = start;
+            ftime = gettime(GETTIME_REALTIME) - ftime;
+
+            ctime = gettime(GETTIME_REALTIME);
+            pathlib_cleanup();
+            ctime = gettime(GETTIME_REALTIME) - ctime;
+
+
+#ifdef DEBUGPATHING
+            pathlib_showpath2(start);
+
+            dprint("Time used -      pathfinding: ", ftos(ptime),"\n");
+            dprint("Time used - rebuild & filter: ", ftos(ftime),"\n");
+            dprint("Time used -          cleanup: ", ftos(ctime),"\n");
+            dprint("Time used -            total: ", ftos(ptime + ftime + ctime),"\n");
+            dprint("Time used -         # frames: ", ftos(ceil((ptime + ftime + ctime) / sys_ticrate)),"\n\n");
+            dprint("Nodes -         created: ", ftos(pathlib_made_cnt),"\n");
+            dprint("Nodes -            open: ", ftos(pathlib_open_cnt),"\n");
+            dprint("Nodes -          merged: ", ftos(pathlib_merge_cnt),"\n");
+            dprint("Nodes -          closed: ", ftos(pathlib_closed_cnt),"\n");
+            dprint("Nodes -        searched: ", ftos(pathlib_searched_cnt),"\n");
+            dprint("Nodes bestopen searched: ", ftos(pathlib_bestopen_seached),"\n");
+            dprint("Nodes bestcash -   hits: ", ftos(pathlib_bestcash_hits),"\n");
+            dprint("Nodes bestcash -   save: ", ftos(pathlib_bestcash_saved),"\n");
+            dprint("AStar done.\n");
+#endif
+            return start;
+        }
+    }
+
+    dprint("A* Faild to find a path! Try a smaller gridsize.\n");
+
+    pathlib_cleanup();
+
+    return world;
+}


Property changes on: branches/nexuiz-2.0/data/qcsrc/server/pathlib/main.qc
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: branches/nexuiz-2.0/data/qcsrc/server/pathlib/movenode.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/pathlib/movenode.qc	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/qcsrc/server/pathlib/movenode.qc	2009-07-11 14:59:28 UTC (rev 7191)
@@ -1,126 +1,126 @@
-vector pathlib_wateroutnode(vector start,vector end)
-{
-    vector surface;
-
-    pathlib_movenode_goodnode = 0;
-
-    end_x = fsnap(end_x, pathlib_gridsize);
-    end_y = fsnap(end_y, pathlib_gridsize);
-
-    traceline(end + ('0 0 0.25' * pathlib_gridsize),end - ('0 0 1' * pathlib_gridsize),MOVE_WORLDONLY,self);
-    end = trace_endpos;
-
-    if not(pointcontents(end - '0 0 1') == CONTENT_SOLID)
-        return end;
-
-    for(surface = start ; surface_z < (end_z + 32); ++surface_z)
-    {
-        if(pointcontents(surface) == CONTENT_EMPTY)
-            break;
-    }
-
-    if(pointcontents(surface + '0 0 1') != CONTENT_EMPTY)
-        return end;
-
-    tracebox(start + '0 0 64', movenode_boxmin,movenode_boxmax, end + '0 0 64', MOVE_WORLDONLY, self);
-    if(trace_fraction == 1)
-        pathlib_movenode_goodnode = 1;
-
-    if(fabs(surface_z - end_z) > 32)
-        pathlib_movenode_goodnode = 0;
-
-    return end;
-}
-
-vector pathlib_swimnode(vector start,vector end)
-{
-    pathlib_movenode_goodnode = 0;
-
-    if(pointcontents(start) != CONTENT_WATER)
-        return end;
-
-    end_x = fsnap(end_x, pathlib_gridsize);
-    end_y = fsnap(end_y, pathlib_gridsize);
-
-    if(pointcontents(end) == CONTENT_EMPTY)
-        return pathlib_wateroutnode( start, end);
-
-    tracebox(start, movenode_boxmin,movenode_boxmax, end, MOVE_WORLDONLY, self);
-    if(trace_fraction == 1)
-        pathlib_movenode_goodnode = 1;
-
-    return end;
-}
-
-vector pathlib_flynode(vector start,vector end)
-{
-    pathlib_movenode_goodnode = 0;
-
-    end_x = fsnap(end_x, pathlib_gridsize);
-    end_y = fsnap(end_y, pathlib_gridsize);
-
-    tracebox(start, movenode_boxmin,movenode_boxmax, end, MOVE_WORLDONLY, self);
-    if(trace_fraction == 1)
-        pathlib_movenode_goodnode = 1;
-
-    return end;
-}
-
-vector pathlib_walknode(vector start,vector end,float doedge)
-{
-    vector direction,point,last_point,s,e;
-    float steps, distance, i;
-
-    pathlib_movenode_goodnode = 0;
-
-    end_x = fsnap(end_x,pathlib_gridsize);
-    end_y = fsnap(end_y,pathlib_gridsize);
-    start_x = fsnap(start_x,pathlib_gridsize);
-    start_y = fsnap(start_y,pathlib_gridsize);
-
-    // Find the floor
-    traceline(start + movenode_stepup, start - movenode_maxdrop,MOVE_WORLDONLY,self);
-    if(trace_fraction == 1.0)
-        return trace_endpos;
-
-    start = trace_endpos;
-
-    // Find the direcion, without Z
-    s   = start; e   = end;
-    //e_z = 0; s_z = 0;
-    direction = normalize(e - s);
-
-    distance  = vlen(start - end);
-    steps     = rint(distance / movenode_stepsize);
-
-    last_point = start;
-    for(i = 1; i < steps; ++i)
-    {
-        point = last_point + (direction * movenode_stepsize);
-        traceline(point + movenode_stepup,point - movenode_maxdrop,MOVE_WORLDONLY,self);
-        if(trace_fraction == 1.0)
-            return trace_endpos;
-
-        last_point = trace_endpos;
-    }
-
-    point = last_point + (direction * movenode_stepsize);
-    point_x = fsnap(point_x,pathlib_gridsize);
-    point_y = fsnap(point_y,pathlib_gridsize);
-
-    //dprint("end_x:  ",ftos(end_x),  "  end_y:  ",ftos(end_y),"\n");
-    //dprint("point_x:",ftos(point_x),"  point_y:",ftos(point_y),"\n\n");
-
-    traceline(point + movenode_stepup, point - movenode_maxdrop,MOVE_WORLDONLY,self);
-    if(trace_fraction == 1.0)
-        return trace_endpos;
-
-    last_point = trace_endpos;
-
-    tracebox(start + movenode_boxup, movenode_boxmin,movenode_boxmax, last_point + movenode_boxup, MOVE_WORLDONLY, self);
-    if(trace_fraction != 1.0)
-        return trace_endpos;
-
-    pathlib_movenode_goodnode = 1;
-    return last_point;
-}
+vector pathlib_wateroutnode(vector start,vector end)
+{
+    vector surface;
+
+    pathlib_movenode_goodnode = 0;
+
+    end_x = fsnap(end_x, pathlib_gridsize);
+    end_y = fsnap(end_y, pathlib_gridsize);
+
+    traceline(end + ('0 0 0.25' * pathlib_gridsize),end - ('0 0 1' * pathlib_gridsize),MOVE_WORLDONLY,self);
+    end = trace_endpos;
+
+    if not(pointcontents(end - '0 0 1') == CONTENT_SOLID)
+        return end;
+
+    for(surface = start ; surface_z < (end_z + 32); ++surface_z)
+    {
+        if(pointcontents(surface) == CONTENT_EMPTY)
+            break;
+    }
+
+    if(pointcontents(surface + '0 0 1') != CONTENT_EMPTY)
+        return end;
+
+    tracebox(start + '0 0 64', movenode_boxmin,movenode_boxmax, end + '0 0 64', MOVE_WORLDONLY, self);
+    if(trace_fraction == 1)
+        pathlib_movenode_goodnode = 1;
+
+    if(fabs(surface_z - end_z) > 32)
+        pathlib_movenode_goodnode = 0;
+
+    return end;
+}
+
+vector pathlib_swimnode(vector start,vector end)
+{
+    pathlib_movenode_goodnode = 0;
+
+    if(pointcontents(start) != CONTENT_WATER)
+        return end;
+
+    end_x = fsnap(end_x, pathlib_gridsize);
+    end_y = fsnap(end_y, pathlib_gridsize);
+
+    if(pointcontents(end) == CONTENT_EMPTY)
+        return pathlib_wateroutnode( start, end);
+
+    tracebox(start, movenode_boxmin,movenode_boxmax, end, MOVE_WORLDONLY, self);
+    if(trace_fraction == 1)
+        pathlib_movenode_goodnode = 1;
+
+    return end;
+}
+
+vector pathlib_flynode(vector start,vector end)
+{
+    pathlib_movenode_goodnode = 0;
+
+    end_x = fsnap(end_x, pathlib_gridsize);
+    end_y = fsnap(end_y, pathlib_gridsize);
+
+    tracebox(start, movenode_boxmin,movenode_boxmax, end, MOVE_WORLDONLY, self);
+    if(trace_fraction == 1)
+        pathlib_movenode_goodnode = 1;
+
+    return end;
+}
+
+vector pathlib_walknode(vector start,vector end,float doedge)
+{
+    vector direction,point,last_point,s,e;
+    float steps, distance, i;
+
+    pathlib_movenode_goodnode = 0;
+
+    end_x = fsnap(end_x,pathlib_gridsize);
+    end_y = fsnap(end_y,pathlib_gridsize);
+    start_x = fsnap(start_x,pathlib_gridsize);
+    start_y = fsnap(start_y,pathlib_gridsize);
+
+    // Find the floor
+    traceline(start + movenode_stepup, start - movenode_maxdrop,MOVE_WORLDONLY,self);
+    if(trace_fraction == 1.0)
+        return trace_endpos;
+
+    start = trace_endpos;
+
+    // Find the direcion, without Z
+    s   = start; e   = end;
+    //e_z = 0; s_z = 0;
+    direction = normalize(e - s);
+
+    distance  = vlen(start - end);
+    steps     = rint(distance / movenode_stepsize);
+
+    last_point = start;
+    for(i = 1; i < steps; ++i)
+    {
+        point = last_point + (direction * movenode_stepsize);
+        traceline(point + movenode_stepup,point - movenode_maxdrop,MOVE_WORLDONLY,self);
+        if(trace_fraction == 1.0)
+            return trace_endpos;
+
+        last_point = trace_endpos;
+    }
+
+    point = last_point + (direction * movenode_stepsize);
+    point_x = fsnap(point_x,pathlib_gridsize);
+    point_y = fsnap(point_y,pathlib_gridsize);
+
+    //dprint("end_x:  ",ftos(end_x),  "  end_y:  ",ftos(end_y),"\n");
+    //dprint("point_x:",ftos(point_x),"  point_y:",ftos(point_y),"\n\n");
+
+    traceline(point + movenode_stepup, point - movenode_maxdrop,MOVE_WORLDONLY,self);
+    if(trace_fraction == 1.0)
+        return trace_endpos;
+
+    last_point = trace_endpos;
+
+    tracebox(start + movenode_boxup, movenode_boxmin,movenode_boxmax, last_point + movenode_boxup, MOVE_WORLDONLY, self);
+    if(trace_fraction != 1.0)
+        return trace_endpos;
+
+    pathlib_movenode_goodnode = 1;
+    return last_point;
+}


Property changes on: branches/nexuiz-2.0/data/qcsrc/server/pathlib/movenode.qc
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: branches/nexuiz-2.0/data/qcsrc/server/pathlib/pathlib.qh
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/pathlib/pathlib.qh	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/qcsrc/server/pathlib/pathlib.qh	2009-07-11 14:59:28 UTC (rev 7191)
@@ -1,99 +1,99 @@
-.entity path_next;
-.entity path_prev;
-
-#define inwater(point) (pointcontents(point) == CONTENT_WATER)
-#define medium spawnshieldtime
-
-#define PLIB_FORWARD '0 1 0'
-//#define PLIB_BACK    '0 -1 0'
-#define PLIB_RIGHT   '1 0 0'
-//#define PLIB_LEFT    '-1 0 0'
-
-#define DEBUGPATHING
-#ifdef DEBUGPATHING
-void pathlib_showpath(entity start);
-void pathlib_showpath2(entity path);
-#endif
-
-entity openlist;
-entity closedlist;
-entity goal_node;
-
-.float is_path_node;
-.float pathlib_node_g;
-.float pathlib_node_h;
-.float pathlib_node_f;
-
-float pathlib_open_cnt;
-float pathlib_closed_cnt;
-float pathlib_made_cnt;
-float pathlib_merge_cnt;
-float pathlib_searched_cnt;
-float pathlib_bestopen_seached;
-float pathlib_bestcash_hits;
-float pathlib_bestcash_saved;
-float pathlib_gridsize;
-float pathlib_movecost;
-float pathlib_movecost_diag;
-float pathlib_movecost_waterfactor;
-float pathlib_foundgoal;
-
-float pathlib_starttime;
-#define pathlib_maxtime 5
-
-entity best_open_node;
-
-vector tile_check_up;
-vector tile_check_down;
-float  tile_check_size;
-float      tile_check_cross(vector where);
-float      tile_check_plus(vector where);
-float      tile_check_star(vector where);
-var float  tile_check(vector where);
-
-float  movenode_stepsize;
-vector movenode_stepup;
-vector movenode_maxdrop;
-vector movenode_boxup;
-vector movenode_boxmax;
-vector movenode_boxmin;
-float  pathlib_movenode_goodnode;
-
-vector     pathlib_wateroutnode(vector start, vector end);
-vector     pathlib_swimnode(vector start, vector end);
-vector     pathlib_flynode(vector start, vector end);
-vector     pathlib_walknode(vector start, vector end, float doedge);
-var vector pathlib_movenode(vector start, vector end, float doedge);
-
-float      pathlib_expandnode_star(entity node, vector start, vector goal);
-float      pathlib_expandnode_box(entity node, vector start, vector goal);
-float      pathlib_expandnode_octagon(entity node, vector start, vector goal);
-var float  pathlib_expandnode(entity node, vector start, vector goal);
-
-float      pathlib_g_static(entity parent, vector to, float static_cost);
-float      pathlib_g_static_water(entity parent, vector to, float static_cost);
-float      pathlib_g_euclidean(entity parent, vector to, float static_cost);
-float      pathlib_g_euclidean_water(entity parent, vector to, float static_cost);
-var float  pathlib_cost(entity parent, vector to, float static_cost);
-
-float      pathlib_h_manhattan(vector a, vector b);
-float      pathlib_h_diagonal(vector a, vector b);
-float      pathlib_h_euclidean(vector a,vector b);
-float      pathlib_h_diagonal2(vector a, vector b);
-float      pathlib_h_diagonal3(vector a, vector b);
-float      pathlib_h_diagonal2sdp(vector preprev, vector prev, vector point, vector end);
-var float  pathlib_heuristic(vector from, vector to);
-
-var float  pathlib_makenode(entity parent,vector start, vector to, vector goal,float cost);
-var float  buildpath_nodefilter(vector n,vector c,vector p);
-
-
-#ifdef DEBUGPATHING
-#include "debug.qc"
-#endif
-
-#include "utility.qc"
-#include "movenode.qc"
-#include "costs.qc"
-#include "expandnode.qc"
-#include "main.qc"
+.entity path_next;
+.entity path_prev;
+
+#define inwater(point) (pointcontents(point) == CONTENT_WATER)
+#define medium spawnshieldtime
+
+#define PLIB_FORWARD '0 1 0'
+//#define PLIB_BACK    '0 -1 0'
+#define PLIB_RIGHT   '1 0 0'
+//#define PLIB_LEFT    '-1 0 0'
+
+#define DEBUGPATHING
+#ifdef DEBUGPATHING
+void pathlib_showpath(entity start);
+void pathlib_showpath2(entity path);
+#endif
+
+entity openlist;
+entity closedlist;
+entity goal_node;
+
+.float is_path_node;
+.float pathlib_node_g;
+.float pathlib_node_h;
+.float pathlib_node_f;
+
+float pathlib_open_cnt;
+float pathlib_closed_cnt;
+float pathlib_made_cnt;
+float pathlib_merge_cnt;
+float pathlib_searched_cnt;
+float pathlib_bestopen_seached;
+float pathlib_bestcash_hits;
+float pathlib_bestcash_saved;
+float pathlib_gridsize;
+float pathlib_movecost;
+float pathlib_movecost_diag;
+float pathlib_movecost_waterfactor;
+float pathlib_foundgoal;
+
+float pathlib_starttime;
+#define pathlib_maxtime 5
+
+entity best_open_node;
+
+vector tile_check_up;
+vector tile_check_down;
+float  tile_check_size;
+float      tile_check_cross(vector where);
+float      tile_check_plus(vector where);
+float      tile_check_star(vector where);
+var float  tile_check(vector where);
+
+float  movenode_stepsize;
+vector movenode_stepup;
+vector movenode_maxdrop;
+vector movenode_boxup;
+vector movenode_boxmax;
+vector movenode_boxmin;
+float  pathlib_movenode_goodnode;
+
+vector     pathlib_wateroutnode(vector start, vector end);
+vector     pathlib_swimnode(vector start, vector end);
+vector     pathlib_flynode(vector start, vector end);
+vector     pathlib_walknode(vector start, vector end, float doedge);
+var vector pathlib_movenode(vector start, vector end, float doedge);
+
+float      pathlib_expandnode_star(entity node, vector start, vector goal);
+float      pathlib_expandnode_box(entity node, vector start, vector goal);
+float      pathlib_expandnode_octagon(entity node, vector start, vector goal);
+var float  pathlib_expandnode(entity node, vector start, vector goal);
+
+float      pathlib_g_static(entity parent, vector to, float static_cost);
+float      pathlib_g_static_water(entity parent, vector to, float static_cost);
+float      pathlib_g_euclidean(entity parent, vector to, float static_cost);
+float      pathlib_g_euclidean_water(entity parent, vector to, float static_cost);
+var float  pathlib_cost(entity parent, vector to, float static_cost);
+
+float      pathlib_h_manhattan(vector a, vector b);
+float      pathlib_h_diagonal(vector a, vector b);
+float      pathlib_h_euclidean(vector a,vector b);
+float      pathlib_h_diagonal2(vector a, vector b);
+float      pathlib_h_diagonal3(vector a, vector b);
+float      pathlib_h_diagonal2sdp(vector preprev, vector prev, vector point, vector end);
+var float  pathlib_heuristic(vector from, vector to);
+
+var float  pathlib_makenode(entity parent,vector start, vector to, vector goal,float cost);
+var float  buildpath_nodefilter(vector n,vector c,vector p);
+
+
+#ifdef DEBUGPATHING
+#include "debug.qc"
+#endif
+
+#include "utility.qc"
+#include "movenode.qc"
+#include "costs.qc"
+#include "expandnode.qc"
+#include "main.qc"


Property changes on: branches/nexuiz-2.0/data/qcsrc/server/pathlib/pathlib.qh
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: branches/nexuiz-2.0/data/qcsrc/server/pathlib/utility.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/pathlib/utility.qc	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/qcsrc/server/pathlib/utility.qc	2009-07-11 14:59:28 UTC (rev 7191)
@@ -1,162 +1,162 @@
-float fsnap(float val,float fsize)
-{
-    return rint(val / fsize) * fsize;
-}
-
-vector vsnap(vector point,float fsize)
-{
-    vector vret;
-
-    vret_x = rint(point_x / fsize) * fsize;
-    vret_y = rint(point_y / fsize) * fsize;
-    vret_z = ceil(point_z / fsize) * fsize;
-
-    return vret;
-}
-
-float location_isok(vector point, float water_isok, float air_isok)
-{
-    float pc,pc2;
-
-    if(trace_dphitq3surfaceflags & Q3SURFACEFLAG_SKY)
-        return 0;
-
-    pc  = pointcontents(point);
-    pc2 = pointcontents(point - '0 0 1');
-
-    switch(pc)
-    {
-        case CONTENT_SOLID:
-            break;
-
-        case CONTENT_SLIME:
-            break;
-
-        case CONTENT_LAVA:
-            break;
-
-        case CONTENT_SKY:
-            break;
-
-        case CONTENT_EMPTY:
-            if (pc2 == CONTENT_SOLID)
-                return 1;
-
-            if (pc2 == CONTENT_EMPTY)
-                if(air_isok)
-                    return 1;
-
-            if (pc2 == CONTENT_WATER)
-                if(water_isok)
-                    return 1;
-
-            break;
-
-        case CONTENT_WATER:
-            if (water_isok)
-                return 1;
-
-            break;
-    }
-
-    return 0;
-}
-
-entity pathlib_nodeatpoint(vector where)
-{
-    entity node;
-
-    ++pathlib_searched_cnt;
-
-    where_x = fsnap(where_x,pathlib_gridsize);
-    where_y = fsnap(where_y,pathlib_gridsize);
-
-    node = findradius(where,pathlib_gridsize * 0.5);
-    while(node)
-    {
-        if(node.is_path_node == TRUE)
-            return node;
-
-        node = node.chain;
-    }
-
-    return world;
-}
-
-float tile_check_cross(vector where)
-{
-    vector p,f,r;
-
-    f = PLIB_FORWARD * tile_check_size;
-    r = PLIB_RIGHT   * tile_check_size;
-
-    // forward-right
-    p = where + f + r;
-    traceline(p+tile_check_up,p-tile_check_down,MOVE_WORLDONLY,self);
-    if not (location_isok(trace_endpos,1,0))
-        return 0;
-
-    // Forward-left
-    p = where + f - r;
-    traceline(p+tile_check_up,p-tile_check_down,MOVE_WORLDONLY,self);
-    if not (location_isok(trace_endpos,1,0))
-        return 0;
-
-    // Back-right
-    p = where - f + r;
-    traceline(p+tile_check_up,p-tile_check_down,MOVE_WORLDONLY,self);
-    if not (location_isok(trace_endpos,1,0))
-        return 0;
-
-    //Back-left
-    p = where - f - r;
-    traceline(p+tile_check_up,p-tile_check_down,MOVE_WORLDONLY,self);
-    if not (location_isok(trace_endpos,1,0))
-        return 0;
-
-    return 1;
-}
-
-float tile_check_plus(vector where)
-{
-    vector p,f,r;
-
-    f = PLIB_FORWARD * tile_check_size;
-    r = PLIB_RIGHT   * tile_check_size;
-
-    // forward
-    p = where + f;
-    traceline(p+tile_check_up,p-tile_check_down,MOVE_WORLDONLY,self);
-    if not (location_isok(trace_endpos,1,0))
-        return 0;
-
-    //left
-    p = where - r;
-    traceline(p+tile_check_up,p-tile_check_down,MOVE_WORLDONLY,self);
-    if not (location_isok(trace_endpos,1,0))
-        return 0;
-
-
-    // Right
-    p = where + r;
-    traceline(p+tile_check_up,p-tile_check_down,MOVE_WORLDONLY,self);
-    if not (location_isok(trace_endpos,1,0))
-        return 0;
-
-    //Back
-    p = where - f;
-    traceline(p+tile_check_up,p-tile_check_down,MOVE_WORLDONLY,self);
-    if not (location_isok(trace_endpos,1,0))
-        return 0;
-
-    return 1;
-}
-
-float tile_check_star(vector where)
-{
-    if(tile_check_plus(where))
-        return tile_check_cross(where);
-
-    return 0;
-}
-
+float fsnap(float val,float fsize)
+{
+    return rint(val / fsize) * fsize;
+}
+
+vector vsnap(vector point,float fsize)
+{
+    vector vret;
+
+    vret_x = rint(point_x / fsize) * fsize;
+    vret_y = rint(point_y / fsize) * fsize;
+    vret_z = ceil(point_z / fsize) * fsize;
+
+    return vret;
+}
+
+float location_isok(vector point, float water_isok, float air_isok)
+{
+    float pc,pc2;
+
+    if(trace_dphitq3surfaceflags & Q3SURFACEFLAG_SKY)
+        return 0;
+
+    pc  = pointcontents(point);
+    pc2 = pointcontents(point - '0 0 1');
+
+    switch(pc)
+    {
+        case CONTENT_SOLID:
+            break;
+
+        case CONTENT_SLIME:
+            break;
+
+        case CONTENT_LAVA:
+            break;
+
+        case CONTENT_SKY:
+            break;
+
+        case CONTENT_EMPTY:
+            if (pc2 == CONTENT_SOLID)
+                return 1;
+
+            if (pc2 == CONTENT_EMPTY)
+                if(air_isok)
+                    return 1;
+
+            if (pc2 == CONTENT_WATER)
+                if(water_isok)
+                    return 1;
+
+            break;
+
+        case CONTENT_WATER:
+            if (water_isok)
+                return 1;
+
+            break;
+    }
+
+    return 0;
+}
+
+entity pathlib_nodeatpoint(vector where)
+{
+    entity node;
+
+    ++pathlib_searched_cnt;
+
+    where_x = fsnap(where_x,pathlib_gridsize);
+    where_y = fsnap(where_y,pathlib_gridsize);
+
+    node = findradius(where,pathlib_gridsize * 0.5);
+    while(node)
+    {
+        if(node.is_path_node == TRUE)
+            return node;
+
+        node = node.chain;
+    }
+
+    return world;
+}
+
+float tile_check_cross(vector where)
+{
+    vector p,f,r;
+
+    f = PLIB_FORWARD * tile_check_size;
+    r = PLIB_RIGHT   * tile_check_size;
+
+    // forward-right
+    p = where + f + r;
+    traceline(p+tile_check_up,p-tile_check_down,MOVE_WORLDONLY,self);
+    if not (location_isok(trace_endpos,1,0))
+        return 0;
+
+    // Forward-left
+    p = where + f - r;
+    traceline(p+tile_check_up,p-tile_check_down,MOVE_WORLDONLY,self);
+    if not (location_isok(trace_endpos,1,0))
+        return 0;
+
+    // Back-right
+    p = where - f + r;
+    traceline(p+tile_check_up,p-tile_check_down,MOVE_WORLDONLY,self);
+    if not (location_isok(trace_endpos,1,0))
+        return 0;
+
+    //Back-left
+    p = where - f - r;
+    traceline(p+tile_check_up,p-tile_check_down,MOVE_WORLDONLY,self);
+    if not (location_isok(trace_endpos,1,0))
+        return 0;
+
+    return 1;
+}
+
+float tile_check_plus(vector where)
+{
+    vector p,f,r;
+
+    f = PLIB_FORWARD * tile_check_size;
+    r = PLIB_RIGHT   * tile_check_size;
+
+    // forward
+    p = where + f;
+    traceline(p+tile_check_up,p-tile_check_down,MOVE_WORLDONLY,self);
+    if not (location_isok(trace_endpos,1,0))
+        return 0;
+
+    //left
+    p = where - r;
+    traceline(p+tile_check_up,p-tile_check_down,MOVE_WORLDONLY,self);
+    if not (location_isok(trace_endpos,1,0))
+        return 0;
+
+
+    // Right
+    p = where + r;
+    traceline(p+tile_check_up,p-tile_check_down,MOVE_WORLDONLY,self);
+    if not (location_isok(trace_endpos,1,0))
+        return 0;
+
+    //Back
+    p = where - f;
+    traceline(p+tile_check_up,p-tile_check_down,MOVE_WORLDONLY,self);
+    if not (location_isok(trace_endpos,1,0))
+        return 0;
+
+    return 1;
+}
+
+float tile_check_star(vector where)
+{
+    if(tile_check_plus(where))
+        return tile_check_cross(where);
+
+    return 0;
+}
+


Property changes on: branches/nexuiz-2.0/data/qcsrc/server/pathlib/utility.qc
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: branches/nexuiz-2.0/data/qcsrc/server/pathlib.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/pathlib.qc	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/qcsrc/server/pathlib.qc	2009-07-11 14:59:28 UTC (rev 7191)
@@ -1,1047 +1,1047 @@
-//#define PATHLIB_RDFIELDS
-#ifdef PATHLIB_RDFIELDS
-    #define path_next swampslug
-    #define path_prev lasertarget
-#else
-    .entity path_next;
-    .entity path_prev;
-#endif
-
-#define medium spawnshieldtime
-
-//#define DEBUGPATHING
-
-entity openlist;
-entity closedlist;
-entity scraplist;
-
-.float pathlib_node_g;
-.float pathlib_node_h;
-.float pathlib_node_f;
-
-float pathlib_open_cnt;
-float pathlib_closed_cnt;
-float pathlib_made_cnt;
-float pathlib_merge_cnt;
-float pathlib_recycle_cnt;
-float pathlib_searched_cnt;
-
-#ifdef DEBUGPATHING
-
-#endif
-
-float pathlib_bestopen_seached;
-float pathlib_bestcash_hits;
-float pathlib_bestcash_saved;
-
-float pathlib_gridsize;
-
-float pathlib_movecost;
-float pathlib_movecost_diag;
-float pathlib_movecost_waterfactor;
-
-float pathlib_edge_check_size;
-
-float pathlib_foundgoal;
-entity goal_node;
-
-entity best_open_node;
-.float is_path_node;
-
-
-#ifdef DEBUGPATHING
-float edge_show(vector point,float fsize);
-void mark_error(vector where,float lifetime);
-void mark_info(vector where,float lifetime);
-entity mark_misc(vector where,float lifetime);
-
-void pathlib_showpath(entity start)
-{
-    entity e;
-    e = start;
-    while(e.path_next)
-    {
-        te_lightning1(e,e.origin,e.path_next.origin);
-        e = e.path_next;
-    }
-}
-
-void path_dbg_think()
-{
-    pathlib_showpath(self);
-    self.nextthink = time + 1;
-}
-
-void __showpath2_think()
-{
-    mark_info(self.origin,1);
-    if(self.path_next)
-    {
-        self.path_next.think     = __showpath2_think;
-        self.path_next.nextthink = time + 0.15;
-    }
-    else
-    {
-        self.owner.think     = __showpath2_think;
-        self.owner.nextthink = time + 0.15;
-    }
-}
-
-void pathlib_showpath2(entity path)
-{
-    path.think     = __showpath2_think;
-    path.nextthink = time;
-}
-
-#endif
-
-void pathlib_deletepath(entity start)
-{
-    entity e;
-
-    e = findchainentity(owner, start);
-    while(e)
-    {
-        e.think = SUB_Remove;
-        e.nextthink = time;
-        e = e.chain;
-    }
-}
-
-float fsnap(float val,float fsize)
-{
-    return rint(val / fsize) * fsize;
-}
-
-vector vsnap(vector point,float fsize)
-{
-    vector vret;
-
-    vret_x = rint(point_x / fsize) * fsize;
-    vret_y = rint(point_y / fsize) * fsize;
-    vret_z = ceil(point_z / fsize) * fsize;
-
-    return vret;
-}
-
-float  walknode_stepsize;
-vector walknode_stepup;
-vector walknode_maxdrop;
-vector walknode_boxup;
-vector walknode_boxmax;
-vector walknode_boxmin;
-float  pathlib_movenode_goodnode;
-
-float floor_ok(vector point)
-{
-    float pc;
-
-    if(trace_dphitq3surfaceflags & Q3SURFACEFLAG_SKY)
-        return 0;
-
-    pc = pointcontents(point);
-
-    switch(pc)
-    {
-        case CONTENT_SOLID:
-        case CONTENT_SLIME:
-        case CONTENT_LAVA:
-        case CONTENT_SKY:
-            return 0;
-        case CONTENT_EMPTY:
-            if not (pointcontents(point - '0 0 1') == CONTENT_SOLID)
-                return 0;
-            break;
-        case CONTENT_WATER:
-            return 1;
-    }
-    if(pointcontents(point - '0 0 1') == CONTENT_SOLID)
-        return 1;
-
-    return 0;
-}
-
-#define inwater(point) (pointcontents(point) == CONTENT_WATER)
-/*
-float inwater(vector point)
-{
-    if(pointcontents(point) == CONTENT_WATER)
-        return 1;
-    return 0;
-}
-*/
-
-#define _pcheck(p) traceline(p+z_up,p-z_down,MOVE_WORLDONLY,self); if not(floor_ok(trace_endpos)) return 1
-float edge_check(vector point,float fsize)
-{
-    vector z_up,z_down;
-
-    z_up   = '0 0 1' * fsize;
-    z_down = '0 0 1' * fsize;
-
-    _pcheck(point + ('1 1 0'  * fsize));
-    _pcheck(point + ('1 -1 0'  * fsize));
-    _pcheck(point + ('1 0 0' * fsize));
-
-    _pcheck(point + ('0 1 0'  * fsize));
-    _pcheck(point + ('0 -1 0' * fsize));
-
-    _pcheck(point + ('-1 0 0'  * fsize));
-    _pcheck(point + ('-1 1 0'  * fsize));
-    _pcheck(point + ('-1 -1 0' * fsize));
-
-    return 0;
-}
-
-#ifdef DEBUGPATHING
-#define _pshow(p) mark_error(p,10)
-float edge_show(vector point,float fsize)
-{
-
-    _pshow(point + ('1 1 0'  * fsize));
-    _pshow(point + ('1 -1 0' * fsize));
-    _pshow(point + ('1 0 0'  * fsize));
-
-    _pshow(point + ('0 1 0'  * fsize));
-    _pshow(point + ('0 -1 0' * fsize));
-
-    _pshow(point + ('-1 0 0'  * fsize));
-    _pshow(point + ('-1 1 0'  * fsize));
-    _pshow(point + ('-1 -1 0' * fsize));
-
-    return 0;
-}
-#endif
-
-var vector pathlib_movenode(vector start,vector end,float doedge);
-vector pathlib_wateroutnode(vector start,vector end)
-{
-    vector surface;
-
-    pathlib_movenode_goodnode = 0;
-
-    end_x = fsnap(end_x, pathlib_gridsize);
-    end_y = fsnap(end_y, pathlib_gridsize);
-
-    traceline(end + ('0 0 0.25' * pathlib_gridsize),end - ('0 0 1' * pathlib_gridsize),MOVE_WORLDONLY,self);
-    end = trace_endpos;
-
-    if not(pointcontents(end - '0 0 1') == CONTENT_SOLID)
-        return end;
-
-    for(surface = start ; surface_z < (end_z + 32); ++surface_z)
-    {
-        if(pointcontents(surface) == CONTENT_EMPTY)
-            break;
-    }
-
-    if(pointcontents(surface + '0 0 1') != CONTENT_EMPTY)
-        return end;
-
-    tracebox(start + '0 0 64', walknode_boxmin,walknode_boxmax, end + '0 0 64', MOVE_WORLDONLY, self);
-    if(trace_fraction == 1)
-        pathlib_movenode_goodnode = 1;
-
-    if(fabs(surface_z - end_z) > 32)
-        pathlib_movenode_goodnode = 0;
-
-    return end;
-}
-
-vector pathlib_swimnode(vector start,vector end)
-{
-    pathlib_movenode_goodnode = 0;
-
-    if(pointcontents(start) != CONTENT_WATER)
-        return end;
-
-    end_x = fsnap(end_x, pathlib_gridsize);
-    end_y = fsnap(end_y, pathlib_gridsize);
-
-    if(pointcontents(end) == CONTENT_EMPTY)
-        return pathlib_wateroutnode( start, end);
-
-    tracebox(start, walknode_boxmin,walknode_boxmax, end, MOVE_WORLDONLY, self);
-    if(trace_fraction == 1)
-        pathlib_movenode_goodnode = 1;
-
-    return end;
-}
-
-vector pathlib_flynode(vector start,vector end)
-{
-    pathlib_movenode_goodnode = 0;
-
-    end_x = fsnap(end_x, pathlib_gridsize);
-    end_y = fsnap(end_y, pathlib_gridsize);
-
-    tracebox(start, walknode_boxmin,walknode_boxmax, end, MOVE_WORLDONLY, self);
-    if(trace_fraction == 1)
-        pathlib_movenode_goodnode = 1;
-
-    return end;
-}
-
-vector pathlib_walknode(vector start,vector end,float doedge)
-{
-    vector direction,point,last_point,s,e;
-    float steps, distance, i,laststep;
-
-    pathlib_movenode_goodnode = 0;
-
-    s   = start;
-    e   = end;
-    e_z = 0;
-    s_z = 0;
-    direction  = normalize(s - e);
-
-    distance    = vlen(start - end);
-    laststep    = distance / walknode_stepsize;
-    steps       = floor(laststep);
-    laststep    = laststep - steps;
-
-    point = start;
-    s     = point + walknode_stepup;
-    e     = point - walknode_maxdrop;
-
-    traceline(s, e,MOVE_WORLDONLY,self);
-    if(trace_fraction == 1.0)
-        return trace_endpos;
-
-    if (floor_ok(trace_endpos) == 0)
-        return trace_endpos;
-
-    last_point = trace_endpos;
-
-    for(i = 0; i < steps; ++i)
-    {
-        point = last_point + direction * walknode_stepsize;
-
-        s = point + walknode_stepup;
-        e = point - walknode_maxdrop;
-        traceline(s, e,MOVE_WORLDONLY,self);
-        if(trace_fraction == 1.0)
-            return trace_endpos;
-
-        point = trace_endpos;
-        if not(floor_ok(trace_endpos))
-            return trace_endpos;
-
-        tracebox(last_point + walknode_boxup, walknode_boxmin,walknode_boxmax, point + walknode_boxup, MOVE_WORLDONLY, self);
-        if(trace_fraction != 1.0)
-            return trace_endpos;
-
-        if(doedge)
-        if(edge_check(point,pathlib_edge_check_size))
-            return trace_endpos;
-
-        last_point = point;
-    }
-
-    point = last_point + direction * walknode_stepsize * laststep;
-
-    point_x = fsnap(point_x, pathlib_gridsize);
-    point_y = fsnap(point_y, pathlib_gridsize);
-
-    s = point + walknode_stepup;
-    e = point - walknode_maxdrop;
-    traceline(s, e,MOVE_WORLDONLY,self);
-
-    if(trace_fraction == 1.0)
-        return trace_endpos;
-
-    point = trace_endpos;
-
-    if not(floor_ok(trace_endpos))
-        return trace_endpos;
-
-    tracebox(last_point + walknode_boxup, walknode_boxmin,walknode_boxmax, point + walknode_boxup, MOVE_WORLDONLY, self);
-    if(trace_fraction != 1.0)
-        return trace_endpos;
-
-    pathlib_movenode_goodnode = 1;
-    return point;
-}
-
-var float pathlib_cost(entity parent,vector to, float static_cost);
-float pathlib_g_static(entity parent,vector to, float static_cost)
-{
-    if(inwater(to))
-        return parent.pathlib_node_g + static_cost * pathlib_movecost_waterfactor;
-    else
-        return parent.pathlib_node_g + static_cost;
-}
-
-float pathlib_g_static_water(entity parent,vector to, float static_cost)
-{
-    if(inwater(to))
-        return parent.pathlib_node_g + static_cost * pathlib_movecost_waterfactor;
-    else
-        return parent.pathlib_node_g + static_cost;
-}
-
-float pathlib_g_euclidean(entity parent,vector to, float static_cost)
-{
-    return parent.pathlib_node_g + vlen(parent.origin - to);
-}
-float pathlib_g_euclidean_water(entity parent,vector to, float static_cost)
-{
-    if(inwater(to))
-        return parent.pathlib_node_g + vlen(parent.origin - to) * pathlib_movecost_waterfactor;
-    else
-        return parent.pathlib_node_g + vlen(parent.origin - to);
-}
-
-var float(vector from,vector to) pathlib_heuristic;
-
-/**
-    Manhattan Menas we expect to move up,down left or right
-    No diagonal moves espected. (like moving bewteen city blocks)
-**/
-float pathlib_h_manhattan(vector a,vector b)
-{
-    //h(n) = D * (abs(n.x-goal.x) + abs(n.y-goal.y))
-
-    float h;
-    h  = fabs(a_x - b_x);
-    h += fabs(a_y - b_y);
-    h *= pathlib_gridsize;
-
-    return h;
-}
-
-/**
-    This heuristic consider both stright and disagonal moves
-    to have teh same cost.
-**/
-float pathlib_h_diagonal(vector a,vector b)
-{
-    //h(n) = D * max(abs(n.x-goal.x), abs(n.y-goal.y))
-    float h,x,y;
-
-    x = fabs(a_x - b_x);
-    y = fabs(a_y - b_y);
-    h = pathlib_movecost * max(x,y);
-
-    return h;
-}
-
-/**
-    This heuristic only considers the stright line distance.
-    Will usualy mean a lower H then G meaning A* Will speand more
-    and run slower.
-**/
-float pathlib_h_euclidean(vector a,vector b)
-{
-    return vlen(a - b);
-}
-
-/**
-    This heuristic consider both stright and disagonal moves,
-    But has a separate cost for diagonal moves.
-**/
-float pathlib_h_diagonal2(vector a,vector b)
-{
-    float h_diag,h_str,h,x,y;
-
-    /*
-    h_diagonal(n) = min(abs(n.x-goal.x), abs(n.y-goal.y))
-    h_straight(n) = (abs(n.x-goal.x) + abs(n.y-goal.y))
-    h(n) = D2 * h_diagonal(n) + D * (h_straight(n) - 2*h_diagonal(n)))
-    */
-
-    x = fabs(a_x - b_x);
-    y = fabs(a_y - b_y);
-
-    h_diag = min(x,y);
-    h_str = x + y;
-
-    h =  pathlib_movecost_diag * h_diag;
-    h += pathlib_movecost * (h_str - 2 * h_diag);
-
-    return h;
-}
-
-/**
-    This heuristic consider both stright and disagonal moves,
-    But has a separate cost for diagonal moves.
-
-
-**/
-float pathlib_h_diagonal2sdp(vector preprev,vector prev,vector point,vector end)
-{
-    float h_diag,h_str,h,x,y,z;
-
-    //h_diagonal(n) = min(abs(n.x-goal.x), abs(n.y-goal.y))
-    //h_straight(n) = (abs(n.x-goal.x) + abs(n.y-goal.y))
-    //h(n) = D2 * h_diagonal(n) + D * (h_straight(n) - 2*h_diagonal(n)))
-
-    x = fabs(point_x - end_x);
-    y = fabs(point_y - end_y);
-    z = fabs(point_z - end_z);
-
-    h_diag = min3(x,y,z);
-    h_str = x + y + z;
-
-    h =  pathlib_movecost_diag * h_diag;
-    h += pathlib_movecost * (h_str - 2 * h_diag);
-
-    float m;
-    vector d1,d2;
-
-    d1 = normalize(preprev - point);
-    d2 = normalize(prev    - point);
-    m = vlen(d1-d2);
-    //bprint("pathlib_h_diagonal2sdp-M = ",ftos(m),"\n");
-
-    return h * m;
-}
-
-
-float pathlib_h_diagonal3(vector a,vector b)
-{
-    float h_diag,h_str,h,x,y,z;
-
-    //h_diagonal(n) = min(abs(n.x-goal.x), abs(n.y-goal.y))
-    //h_straight(n) = (abs(n.x-goal.x) + abs(n.y-goal.y))
-    //h(n) = D2 * h_diagonal(n) + D * (h_straight(n) - 2*h_diagonal(n)))
-
-    x = fabs(a_x - b_x);
-    y = fabs(a_y - b_y);
-    z = fabs(a_z - b_z);
-
-    h_diag = min3(x,y,z);
-    h_str = x + y + z;
-
-    h =  pathlib_movecost_diag * h_diag;
-    h += pathlib_movecost * (h_str - 2 * h_diag);
-
-    return h;
-}
-
-//#define PATHLIB_USE_NODESCRAP
-#define PATHLIB_NODEEXPIRE 0.05
-float pathlib_scraplist_cnt;
-entity newnode()
-{
-    entity n;
-#ifdef PATHLIB_USE_NODESCRAP
-    if(pathlib_scraplist_cnt)
-    {
-        n = findentity(world,owner,scraplist);
-        if(n)
-        {
-            --pathlib_scraplist_cnt;
-            ++pathlib_recycle_cnt;
-            return n;
-        }
-        else
-            pathlib_scraplist_cnt = 0;
-    }
-#endif
-    ++pathlib_made_cnt;
-    n = spawn();
-#ifdef PATHLIB_NODEEXPIRE
-    n.think      = SUB_Remove;
-    n.nextthink  = time + PATHLIB_NODEEXPIRE;
-    return n;
-}
-
-void dumpnode(entity n)
-{
-#ifdef PATHLIB_USE_NODESCRAP
-    ++pathlib_scraplist_cnt;
-
-    n.path_next    = world;
-    n.path_prev    = world;
-    n.is_path_node = FALSE;
-    n.owner        = scraplist;
-#else
-    //n.is_path_node = FALSE;
-    n.think        = SUB_Remove;
-    n.nextthink    = time;
-#endif
-}
-
-entity pathlib_mknode(vector where,entity parent)
-{
-    entity node;
-
-    node              = newnode();
-    node.is_path_node = TRUE;
-    node.owner        = openlist;
-    node.path_prev    = parent;
-
-    setorigin(node, where);
-
-    ++pathlib_open_cnt;
-
-    node.medium = pointcontents(where);
-
-    return node;
-}
-
-var float pathlib_expandnode(entity node, vector start, vector goal);
-float pathlib_expandnode_star(entity node, vector start, vector goal);
-float pathlib_expandnode_box(entity node, vector start, vector goal);
-
-var float pathlib_makenode(entity parent,vector start, vector to, vector goal,float cost);
-float pathlib_makenode_adaptive(entity parent,vector start, vector to, vector goal,float cost)
-{
-    entity node;
-    float h,g,f,doedge;
-    vector where;
-
-    ++pathlib_searched_cnt;
-
-    if(inwater(parent.origin))
-    {
-        pathlib_expandnode = pathlib_expandnode_box;
-        pathlib_movenode   = pathlib_swimnode;
-    }
-    else
-    {
-        if(inwater(to))
-        {
-            pathlib_expandnode = pathlib_expandnode_box;
-            pathlib_movenode   = pathlib_swimnode;
-        }
-        else
-        {
-
-            pathlib_expandnode = pathlib_expandnode_star;
-            pathlib_movenode   = pathlib_walknode;
-            doedge = 1;
-        }
-    }
-
-    where = pathlib_movenode(parent.origin,to,0);
-    if not(pathlib_movenode_goodnode)
-        return 0;
-
-    if(doedge)
-    if(edge_check(where,pathlib_edge_check_size))
-        return 0;
-
-    if(parent.path_prev)
-        pathlib_h_diagonal2sdp(parent.path_prev.origin,parent.origin,where,goal);
-
-    h = pathlib_heuristic(where,goal);
-    g = pathlib_cost(parent,where,cost);
-    f = g + h;
-
-    node = findradius(where,pathlib_gridsize * 0.75);
-    while(node)
-    {
-        if(node.is_path_node == TRUE)
-        {
-            ++pathlib_merge_cnt;
-            if(node.owner == openlist)
-            {
-                if(node.pathlib_node_g > g)
-                {
-                    node.pathlib_node_h = h;
-                    node.pathlib_node_g = g;
-                    node.pathlib_node_f = f;
-                    node.path_prev = parent;
-                }
-
-                if not (best_open_node)
-                    best_open_node = node;
-                else if(best_open_node.pathlib_node_f > node.pathlib_node_f)
-                    best_open_node = node;
-            }
-
-            return 1;
-        }
-        node = node.chain;
-    }
-
-    node = pathlib_mknode(where,parent);
-    node.pathlib_node_h = h;
-    node.pathlib_node_g = g;
-    node.pathlib_node_f = f;
-
-    if not (best_open_node)
-        best_open_node = node;
-    else if(best_open_node.pathlib_node_f > node.pathlib_node_f)
-        best_open_node = node;
-
-    return 1;
-}
-
-entity pathlib_getbestopen()
-{
-    entity node;
-    entity bestnode;
-
-    if(best_open_node)
-    {
-        ++pathlib_bestcash_hits;
-        pathlib_bestcash_saved += pathlib_open_cnt;
-
-        return best_open_node;
-    }
-
-    node = findchainentity(owner,openlist);
-    if(!node)
-        return world;
-
-    bestnode = node;
-    while(node)
-    {
-        ++pathlib_bestopen_seached;
-        if(node.pathlib_node_f < bestnode.pathlib_node_f)
-            bestnode = node;
-
-        node = node.chain;
-    }
-
-    return bestnode;
-}
-
-void pathlib_close_node(entity node,vector goal)
-{
-
-    if(node.owner == closedlist)
-    {
-        dprint("Pathlib: Tried to close a closed node!\n");
-        return;
-    }
-
-    if(node == best_open_node)
-        best_open_node = world;
-
-    ++pathlib_closed_cnt;
-    --pathlib_open_cnt;
-
-    node.owner = closedlist;
-
-    if(vlen(node.origin - goal) <= pathlib_gridsize)
-    {
-        vector goalmove;
-
-        goalmove = pathlib_walknode(node.origin,goal,1);
-        if(pathlib_movenode_goodnode)
-        {
-            goal_node         = node;
-            pathlib_foundgoal = TRUE;
-        }
-    }
-}
-
-float pathlib_expandnode_star(entity node, vector start, vector goal)
-{
-    vector point;
-    vector where;
-    float nodecnt;
-
-    where = node.origin;
-
-    v_forward = '1 0 0';
-    v_right   = '0 1 0';
-
-    // Forward
-    point = where + v_forward * pathlib_gridsize;
-    nodecnt += pathlib_makenode(node,start,point,goal,pathlib_movecost);
-
-    // Back
-    point = where - v_forward * pathlib_gridsize;
-    nodecnt += pathlib_makenode(node,start,point,goal,pathlib_movecost);
-
-    // Right
-    point = where + v_right * pathlib_gridsize;
-    nodecnt += pathlib_makenode(node,start,point,goal,pathlib_movecost);
-
-    // Left
-    point = where - v_right * pathlib_gridsize;
-    nodecnt += pathlib_makenode(node,start,point,goal,pathlib_movecost);
-
-    // Forward-right
-    point = where + v_forward * pathlib_gridsize + v_right * pathlib_gridsize;
-    nodecnt += pathlib_makenode(node,start,point,goal,pathlib_movecost_diag);
-
-    // Forward-left
-    point = where + v_forward * pathlib_gridsize - v_right * pathlib_gridsize;
-    nodecnt += pathlib_makenode(node,start,point,goal,pathlib_movecost_diag);
-
-    // Back-right
-    point = where - v_forward * pathlib_gridsize + v_right * pathlib_gridsize;
-    nodecnt += pathlib_makenode(node,start,point,goal,pathlib_movecost_diag);
-
-    // Back-left
-    point = where - v_forward * pathlib_gridsize - v_right * pathlib_gridsize;
-    nodecnt += pathlib_makenode(node,start,point,goal,pathlib_movecost_diag);
-
-    return pathlib_open_cnt;
-}
-
-float pathlib_expandnode_box(entity node, vector start, vector goal)
-{
-    vector v;
-
-    for(v_z = node.origin_z - pathlib_gridsize; v_z <= node.origin_z + pathlib_gridsize; v_z += pathlib_gridsize)
-    for(v_y = node.origin_y - pathlib_gridsize; v_y <= node.origin_y + pathlib_gridsize; v_y += pathlib_gridsize)
-    for(v_x = node.origin_x - pathlib_gridsize; v_x <= node.origin_x + pathlib_gridsize; v_x += pathlib_gridsize)
-    {
-        if(vlen(v - node.origin))
-            pathlib_makenode(node,start,v,goal,pathlib_movecost);
-    }
-
-    return pathlib_open_cnt;
-}
-
-void pathlib_cleanup()
-{
-    entity node;
-
-    node = findfloat(world,is_path_node, TRUE);
-    while(node)
-    {
-        dumpnode(node);
-        node = findfloat(node,is_path_node, TRUE);
-    }
-
-    if(openlist)
-        remove(openlist);
-
-    if(closedlist)
-        remove(closedlist);
-
-    best_open_node = world;
-    openlist       = world;
-    closedlist     = world;
-}
-
-var float buildpath_nodefilter(vector n,vector c,vector p);
-float buildpath_nodefilter_directional(vector n,vector c,vector p)
-{
-    vector d1,d2;
-
-    d2 = normalize(p - c);
-    d1 = normalize(c - n);
-
-    if(vlen(d1-d2) < 0.25)
-        return 1;
-
-    return 0;
-}
-
-float buildpath_nodefilter_moveskip(vector n,vector c,vector p)
-{
-    pathlib_walknode(p,n,1);
-    if(pathlib_movenode_goodnode)
-        return 1;
-
-    return 0;
-}
-
-entity path_build(entity next, vector where, entity prev, entity start)
-{
-    entity path;
-
-    if(prev && next)
-        if(buildpath_nodefilter)
-            if(buildpath_nodefilter(next.origin,where,prev.origin))
-                return next;
-
-
-    path           = spawn();
-    path.owner     = start;
-    path.path_next = next;
-
-    setorigin(path,where);
-
-    if(!next)
-        path.classname = "path_end";
-    else
-    {
-        if(!prev)
-            path.classname = "path_start";
-        else
-            path.classname = "path_node";
-    }
-
-    return path;
-}
-
-entity pathlib_astar(vector from,vector to)
-{
-    entity path, start, end, open, n, ln;
-    float ptime, ftime, ctime;
-
-    ptime = gettime(GETTIME_REALTIME);
-
-    pathlib_cleanup();
-
-    // Select water<->land capable node make/link
-    pathlib_makenode     = pathlib_makenode_adaptive;
-    // Select XYZ cost estimate
-    pathlib_heuristic    = pathlib_h_diagonal3;
-    // Select distance + waterfactor cost
-    pathlib_cost         = pathlib_g_euclidean_water;
-    // Select star expander
-    pathlib_expandnode   = pathlib_expandnode_star;
-    // Select walk simulation movement test
-    pathlib_movenode     = pathlib_walknode;
-    // Filter final nodes by direction
-    buildpath_nodefilter = buildpath_nodefilter_directional;
-
-    // If the start is in water we need diffrent settings
-    if(inwater(from))
-    {
-        // Select volumetric node expaner
-        pathlib_expandnode = pathlib_expandnode_box;
-
-        // Water movement test
-        pathlib_movenode   = pathlib_swimnode;
-    }
-
-    if not(openlist)
-        openlist       = spawn();
-
-    if not(closedlist)
-        closedlist     = spawn();
-
-    if not(scraplist)
-        scraplist      = spawn();
-
-    pathlib_closed_cnt       = 0;
-    pathlib_open_cnt         = 0;
-    pathlib_made_cnt         = 0;
-    pathlib_merge_cnt        = 0;
-    pathlib_searched_cnt     = 0;
-    pathlib_bestopen_seached = 0;
-    pathlib_bestcash_hits    = 0;
-    pathlib_bestcash_saved   = 0;
-    pathlib_recycle_cnt      = 0;
-
-    pathlib_gridsize       = 128;
-    pathlib_movecost       = pathlib_gridsize;
-    pathlib_movecost_diag  = vlen(('1 1 0' * pathlib_gridsize));
-    pathlib_movecost_waterfactor = 1.1;
-    pathlib_foundgoal      = 0;
-
-    walknode_boxmax   = self.maxs * 1.5;
-    walknode_boxmin   = self.mins * 1.5;
-
-    pathlib_edge_check_size = (vlen(walknode_boxmin - walknode_boxmax) * 0.5);
-
-    walknode_boxup    = '0 0 2' * self.maxs_z;
-    walknode_stepsize = 32;
-    walknode_stepup   = '0 0 1' * walknode_stepsize;
-    walknode_maxdrop  = '0 0 3' * walknode_stepsize;
-
-    from_x = fsnap(from_x,pathlib_gridsize);
-    from_y = fsnap(from_y,pathlib_gridsize);
-
-    to_x = fsnap(to_x,pathlib_gridsize);
-    to_y = fsnap(to_y,pathlib_gridsize);
-
-    dprint("AStar init. ", ftos(pathlib_scraplist_cnt), " nodes on scrap\n");
-    path = pathlib_mknode(from,world);
-    pathlib_close_node(path,to);
-    if(pathlib_foundgoal)
-    {
-        dprint("AStar: Goal found on first node!\n");
-
-        open           = spawn();
-        open.owner     = open;
-        open.classname = "path_end";
-        setorigin(open,path.origin);
-
-        pathlib_cleanup();
-
-        return open;
-    }
-
-    if(pathlib_expandnode(path,from,to) <= 0)
-    {
-        dprint("AStar path fail.\n");
-        pathlib_cleanup();
-
-        return world;
-    }
-
-    best_open_node = pathlib_getbestopen();
-    n = best_open_node;
-    pathlib_close_node(best_open_node,to);
-    if(inwater(n.origin))
-        pathlib_expandnode_box(n,from,to);
-    else
-        pathlib_expandnode_star(n,from,to);
-
-    while(pathlib_open_cnt)
-    {
-        best_open_node = pathlib_getbestopen();
-        n = best_open_node;
-        pathlib_close_node(best_open_node,to);
-
-        if(inwater(n.origin))
-            pathlib_expandnode_box(n,from,to);
-        else
-            pathlib_expandnode(n,from,to);
-
-        if(pathlib_foundgoal)
-        {
-            dprint("Target found. Rebuilding and filtering path...\n");
-            ftime = gettime(GETTIME_REALTIME);
-            ptime = ftime - ptime;
-
-            start = path_build(world,path.origin,world,world);
-            end   = path_build(world,goal_node.origin,world,start);
-            ln    = end;
-
-            open = goal_node;
-            for(open = goal_node; open.path_prev != path; open = open.path_prev)
-            {
-                n    = path_build(ln,open.origin,open.path_prev,start);
-                ln.path_prev = n;
-                ln = n;
-            }
-            start.path_next = n;
-            n.path_prev = start;
-            ftime = gettime(GETTIME_REALTIME) - ftime;
-
-            ctime = gettime(GETTIME_REALTIME);
-            pathlib_cleanup();
-            ctime = gettime(GETTIME_REALTIME) - ctime;
-
-
-#ifdef DEBUGPATHING
-            pathlib_showpath2(start);
-
-            dprint("Time used -      pathfinding: ", ftos(ptime),"\n");
-            dprint("Time used - rebuild & filter: ", ftos(ftime),"\n");
-            dprint("Time used -          cleanup: ", ftos(ctime),"\n");
-            dprint("Time used -            total: ", ftos(ptime + ftime + ctime),"\n");
-            dprint("Time used -         # frames: ", ftos(ceil((ptime + ftime + ctime) / sys_ticrate)),"\n\n");
-            dprint("Nodes -         created: ", ftos(pathlib_made_cnt),"\n");
-            dprint("Nodes -            open: ", ftos(pathlib_open_cnt),"\n");
-            dprint("Nodes -          merged: ", ftos(pathlib_merge_cnt),"\n");
-            dprint("Nodes -          closed: ", ftos(pathlib_closed_cnt),"\n");
-            dprint("Nodes -        searched: ", ftos(pathlib_searched_cnt),"\n");
-
-        if(pathlib_recycle_cnt)
-            dprint("Nodes -      make/reuse: ", ftos(pathlib_made_cnt / pathlib_recycle_cnt),"\n");
-        if(pathlib_recycle_cnt)
-            dprint("Nodes -          reused: ", ftos(pathlib_recycle_cnt),"\n");
-
-            dprint("Nodes bestopen searched: ", ftos(pathlib_bestopen_seached),"\n");
-            dprint("Nodes bestcash -   hits: ", ftos(pathlib_bestcash_hits),"\n");
-            dprint("Nodes bestcash -   save: ", ftos(pathlib_bestcash_saved),"\n");
-            dprint("AStar done. ", ftos(pathlib_scraplist_cnt), " nodes on scrap\n\n");
-#endif
-            return start;
-        }
-    }
-
-    dprint("A* Faild to find a path! Try a smaller gridsize.\n");
-
-    pathlib_cleanup();
-
-    return world;
-}
-
-
-
+//#define PATHLIB_RDFIELDS
+#ifdef PATHLIB_RDFIELDS
+    #define path_next swampslug
+    #define path_prev lasertarget
+#else
+    .entity path_next;
+    .entity path_prev;
+#endif
+
+#define medium spawnshieldtime
+
+//#define DEBUGPATHING
+
+entity openlist;
+entity closedlist;
+entity scraplist;
+
+.float pathlib_node_g;
+.float pathlib_node_h;
+.float pathlib_node_f;
+
+float pathlib_open_cnt;
+float pathlib_closed_cnt;
+float pathlib_made_cnt;
+float pathlib_merge_cnt;
+float pathlib_recycle_cnt;
+float pathlib_searched_cnt;
+
+#ifdef DEBUGPATHING
+
+#endif
+
+float pathlib_bestopen_seached;
+float pathlib_bestcash_hits;
+float pathlib_bestcash_saved;
+
+float pathlib_gridsize;
+
+float pathlib_movecost;
+float pathlib_movecost_diag;
+float pathlib_movecost_waterfactor;
+
+float pathlib_edge_check_size;
+
+float pathlib_foundgoal;
+entity goal_node;
+
+entity best_open_node;
+.float is_path_node;
+
+
+#ifdef DEBUGPATHING
+float edge_show(vector point,float fsize);
+void mark_error(vector where,float lifetime);
+void mark_info(vector where,float lifetime);
+entity mark_misc(vector where,float lifetime);
+
+void pathlib_showpath(entity start)
+{
+    entity e;
+    e = start;
+    while(e.path_next)
+    {
+        te_lightning1(e,e.origin,e.path_next.origin);
+        e = e.path_next;
+    }
+}
+
+void path_dbg_think()
+{
+    pathlib_showpath(self);
+    self.nextthink = time + 1;
+}
+
+void __showpath2_think()
+{
+    mark_info(self.origin,1);
+    if(self.path_next)
+    {
+        self.path_next.think     = __showpath2_think;
+        self.path_next.nextthink = time + 0.15;
+    }
+    else
+    {
+        self.owner.think     = __showpath2_think;
+        self.owner.nextthink = time + 0.15;
+    }
+}
+
+void pathlib_showpath2(entity path)
+{
+    path.think     = __showpath2_think;
+    path.nextthink = time;
+}
+
+#endif
+
+void pathlib_deletepath(entity start)
+{
+    entity e;
+
+    e = findchainentity(owner, start);
+    while(e)
+    {
+        e.think = SUB_Remove;
+        e.nextthink = time;
+        e = e.chain;
+    }
+}
+
+float fsnap(float val,float fsize)
+{
+    return rint(val / fsize) * fsize;
+}
+
+vector vsnap(vector point,float fsize)
+{
+    vector vret;
+
+    vret_x = rint(point_x / fsize) * fsize;
+    vret_y = rint(point_y / fsize) * fsize;
+    vret_z = ceil(point_z / fsize) * fsize;
+
+    return vret;
+}
+
+float  walknode_stepsize;
+vector walknode_stepup;
+vector walknode_maxdrop;
+vector walknode_boxup;
+vector walknode_boxmax;
+vector walknode_boxmin;
+float  pathlib_movenode_goodnode;
+
+float floor_ok(vector point)
+{
+    float pc;
+
+    if(trace_dphitq3surfaceflags & Q3SURFACEFLAG_SKY)
+        return 0;
+
+    pc = pointcontents(point);
+
+    switch(pc)
+    {
+        case CONTENT_SOLID:
+        case CONTENT_SLIME:
+        case CONTENT_LAVA:
+        case CONTENT_SKY:
+            return 0;
+        case CONTENT_EMPTY:
+            if not (pointcontents(point - '0 0 1') == CONTENT_SOLID)
+                return 0;
+            break;
+        case CONTENT_WATER:
+            return 1;
+    }
+    if(pointcontents(point - '0 0 1') == CONTENT_SOLID)
+        return 1;
+
+    return 0;
+}
+
+#define inwater(point) (pointcontents(point) == CONTENT_WATER)
+/*
+float inwater(vector point)
+{
+    if(pointcontents(point) == CONTENT_WATER)
+        return 1;
+    return 0;
+}
+*/
+
+#define _pcheck(p) traceline(p+z_up,p-z_down,MOVE_WORLDONLY,self); if not(floor_ok(trace_endpos)) return 1
+float edge_check(vector point,float fsize)
+{
+    vector z_up,z_down;
+
+    z_up   = '0 0 1' * fsize;
+    z_down = '0 0 1' * fsize;
+
+    _pcheck(point + ('1 1 0'  * fsize));
+    _pcheck(point + ('1 -1 0'  * fsize));
+    _pcheck(point + ('1 0 0' * fsize));
+
+    _pcheck(point + ('0 1 0'  * fsize));
+    _pcheck(point + ('0 -1 0' * fsize));
+
+    _pcheck(point + ('-1 0 0'  * fsize));
+    _pcheck(point + ('-1 1 0'  * fsize));
+    _pcheck(point + ('-1 -1 0' * fsize));
+
+    return 0;
+}
+
+#ifdef DEBUGPATHING
+#define _pshow(p) mark_error(p,10)
+float edge_show(vector point,float fsize)
+{
+
+    _pshow(point + ('1 1 0'  * fsize));
+    _pshow(point + ('1 -1 0' * fsize));
+    _pshow(point + ('1 0 0'  * fsize));
+
+    _pshow(point + ('0 1 0'  * fsize));
+    _pshow(point + ('0 -1 0' * fsize));
+
+    _pshow(point + ('-1 0 0'  * fsize));
+    _pshow(point + ('-1 1 0'  * fsize));
+    _pshow(point + ('-1 -1 0' * fsize));
+
+    return 0;
+}
+#endif
+
+var vector pathlib_movenode(vector start,vector end,float doedge);
+vector pathlib_wateroutnode(vector start,vector end)
+{
+    vector surface;
+
+    pathlib_movenode_goodnode = 0;
+
+    end_x = fsnap(end_x, pathlib_gridsize);
+    end_y = fsnap(end_y, pathlib_gridsize);
+
+    traceline(end + ('0 0 0.25' * pathlib_gridsize),end - ('0 0 1' * pathlib_gridsize),MOVE_WORLDONLY,self);
+    end = trace_endpos;
+
+    if not(pointcontents(end - '0 0 1') == CONTENT_SOLID)
+        return end;
+
+    for(surface = start ; surface_z < (end_z + 32); ++surface_z)
+    {
+        if(pointcontents(surface) == CONTENT_EMPTY)
+            break;
+    }
+
+    if(pointcontents(surface + '0 0 1') != CONTENT_EMPTY)
+        return end;
+
+    tracebox(start + '0 0 64', walknode_boxmin,walknode_boxmax, end + '0 0 64', MOVE_WORLDONLY, self);
+    if(trace_fraction == 1)
+        pathlib_movenode_goodnode = 1;
+
+    if(fabs(surface_z - end_z) > 32)
+        pathlib_movenode_goodnode = 0;
+
+    return end;
+}
+
+vector pathlib_swimnode(vector start,vector end)
+{
+    pathlib_movenode_goodnode = 0;
+
+    if(pointcontents(start) != CONTENT_WATER)
+        return end;
+
+    end_x = fsnap(end_x, pathlib_gridsize);
+    end_y = fsnap(end_y, pathlib_gridsize);
+
+    if(pointcontents(end) == CONTENT_EMPTY)
+        return pathlib_wateroutnode( start, end);
+
+    tracebox(start, walknode_boxmin,walknode_boxmax, end, MOVE_WORLDONLY, self);
+    if(trace_fraction == 1)
+        pathlib_movenode_goodnode = 1;
+
+    return end;
+}
+
+vector pathlib_flynode(vector start,vector end)
+{
+    pathlib_movenode_goodnode = 0;
+
+    end_x = fsnap(end_x, pathlib_gridsize);
+    end_y = fsnap(end_y, pathlib_gridsize);
+
+    tracebox(start, walknode_boxmin,walknode_boxmax, end, MOVE_WORLDONLY, self);
+    if(trace_fraction == 1)
+        pathlib_movenode_goodnode = 1;
+
+    return end;
+}
+
+vector pathlib_walknode(vector start,vector end,float doedge)
+{
+    vector direction,point,last_point,s,e;
+    float steps, distance, i,laststep;
+
+    pathlib_movenode_goodnode = 0;
+
+    s   = start;
+    e   = end;
+    e_z = 0;
+    s_z = 0;
+    direction  = normalize(s - e);
+
+    distance    = vlen(start - end);
+    laststep    = distance / walknode_stepsize;
+    steps       = floor(laststep);
+    laststep    = laststep - steps;
+
+    point = start;
+    s     = point + walknode_stepup;
+    e     = point - walknode_maxdrop;
+
+    traceline(s, e,MOVE_WORLDONLY,self);
+    if(trace_fraction == 1.0)
+        return trace_endpos;
+
+    if (floor_ok(trace_endpos) == 0)
+        return trace_endpos;
+
+    last_point = trace_endpos;
+
+    for(i = 0; i < steps; ++i)
+    {
+        point = last_point + direction * walknode_stepsize;
+
+        s = point + walknode_stepup;
+        e = point - walknode_maxdrop;
+        traceline(s, e,MOVE_WORLDONLY,self);
+        if(trace_fraction == 1.0)
+            return trace_endpos;
+
+        point = trace_endpos;
+        if not(floor_ok(trace_endpos))
+            return trace_endpos;
+
+        tracebox(last_point + walknode_boxup, walknode_boxmin,walknode_boxmax, point + walknode_boxup, MOVE_WORLDONLY, self);
+        if(trace_fraction != 1.0)
+            return trace_endpos;
+
+        if(doedge)
+        if(edge_check(point,pathlib_edge_check_size))
+            return trace_endpos;
+
+        last_point = point;
+    }
+
+    point = last_point + direction * walknode_stepsize * laststep;
+
+    point_x = fsnap(point_x, pathlib_gridsize);
+    point_y = fsnap(point_y, pathlib_gridsize);
+
+    s = point + walknode_stepup;
+    e = point - walknode_maxdrop;
+    traceline(s, e,MOVE_WORLDONLY,self);
+
+    if(trace_fraction == 1.0)
+        return trace_endpos;
+
+    point = trace_endpos;
+
+    if not(floor_ok(trace_endpos))
+        return trace_endpos;
+
+    tracebox(last_point + walknode_boxup, walknode_boxmin,walknode_boxmax, point + walknode_boxup, MOVE_WORLDONLY, self);
+    if(trace_fraction != 1.0)
+        return trace_endpos;
+
+    pathlib_movenode_goodnode = 1;
+    return point;
+}
+
+var float pathlib_cost(entity parent,vector to, float static_cost);
+float pathlib_g_static(entity parent,vector to, float static_cost)
+{
+    if(inwater(to))
+        return parent.pathlib_node_g + static_cost * pathlib_movecost_waterfactor;
+    else
+        return parent.pathlib_node_g + static_cost;
+}
+
+float pathlib_g_static_water(entity parent,vector to, float static_cost)
+{
+    if(inwater(to))
+        return parent.pathlib_node_g + static_cost * pathlib_movecost_waterfactor;
+    else
+        return parent.pathlib_node_g + static_cost;
+}
+
+float pathlib_g_euclidean(entity parent,vector to, float static_cost)
+{
+    return parent.pathlib_node_g + vlen(parent.origin - to);
+}
+float pathlib_g_euclidean_water(entity parent,vector to, float static_cost)
+{
+    if(inwater(to))
+        return parent.pathlib_node_g + vlen(parent.origin - to) * pathlib_movecost_waterfactor;
+    else
+        return parent.pathlib_node_g + vlen(parent.origin - to);
+}
+
+var float(vector from,vector to) pathlib_heuristic;
+
+/**
+    Manhattan Menas we expect to move up,down left or right
+    No diagonal moves espected. (like moving bewteen city blocks)
+**/
+float pathlib_h_manhattan(vector a,vector b)
+{
+    //h(n) = D * (abs(n.x-goal.x) + abs(n.y-goal.y))
+
+    float h;
+    h  = fabs(a_x - b_x);
+    h += fabs(a_y - b_y);
+    h *= pathlib_gridsize;
+
+    return h;
+}
+
+/**
+    This heuristic consider both stright and disagonal moves
+    to have teh same cost.
+**/
+float pathlib_h_diagonal(vector a,vector b)
+{
+    //h(n) = D * max(abs(n.x-goal.x), abs(n.y-goal.y))
+    float h,x,y;
+
+    x = fabs(a_x - b_x);
+    y = fabs(a_y - b_y);
+    h = pathlib_movecost * max(x,y);
+
+    return h;
+}
+
+/**
+    This heuristic only considers the stright line distance.
+    Will usualy mean a lower H then G meaning A* Will speand more
+    and run slower.
+**/
+float pathlib_h_euclidean(vector a,vector b)
+{
+    return vlen(a - b);
+}
+
+/**
+    This heuristic consider both stright and disagonal moves,
+    But has a separate cost for diagonal moves.
+**/
+float pathlib_h_diagonal2(vector a,vector b)
+{
+    float h_diag,h_str,h,x,y;
+
+    /*
+    h_diagonal(n) = min(abs(n.x-goal.x), abs(n.y-goal.y))
+    h_straight(n) = (abs(n.x-goal.x) + abs(n.y-goal.y))
+    h(n) = D2 * h_diagonal(n) + D * (h_straight(n) - 2*h_diagonal(n)))
+    */
+
+    x = fabs(a_x - b_x);
+    y = fabs(a_y - b_y);
+
+    h_diag = min(x,y);
+    h_str = x + y;
+
+    h =  pathlib_movecost_diag * h_diag;
+    h += pathlib_movecost * (h_str - 2 * h_diag);
+
+    return h;
+}
+
+/**
+    This heuristic consider both stright and disagonal moves,
+    But has a separate cost for diagonal moves.
+
+
+**/
+float pathlib_h_diagonal2sdp(vector preprev,vector prev,vector point,vector end)
+{
+    float h_diag,h_str,h,x,y,z;
+
+    //h_diagonal(n) = min(abs(n.x-goal.x), abs(n.y-goal.y))
+    //h_straight(n) = (abs(n.x-goal.x) + abs(n.y-goal.y))
+    //h(n) = D2 * h_diagonal(n) + D * (h_straight(n) - 2*h_diagonal(n)))
+
+    x = fabs(point_x - end_x);
+    y = fabs(point_y - end_y);
+    z = fabs(point_z - end_z);
+
+    h_diag = min3(x,y,z);
+    h_str = x + y + z;
+
+    h =  pathlib_movecost_diag * h_diag;
+    h += pathlib_movecost * (h_str - 2 * h_diag);
+
+    float m;
+    vector d1,d2;
+
+    d1 = normalize(preprev - point);
+    d2 = normalize(prev    - point);
+    m = vlen(d1-d2);
+    //bprint("pathlib_h_diagonal2sdp-M = ",ftos(m),"\n");
+
+    return h * m;
+}
+
+
+float pathlib_h_diagonal3(vector a,vector b)
+{
+    float h_diag,h_str,h,x,y,z;
+
+    //h_diagonal(n) = min(abs(n.x-goal.x), abs(n.y-goal.y))
+    //h_straight(n) = (abs(n.x-goal.x) + abs(n.y-goal.y))
+    //h(n) = D2 * h_diagonal(n) + D * (h_straight(n) - 2*h_diagonal(n)))
+
+    x = fabs(a_x - b_x);
+    y = fabs(a_y - b_y);
+    z = fabs(a_z - b_z);
+
+    h_diag = min3(x,y,z);
+    h_str = x + y + z;
+
+    h =  pathlib_movecost_diag * h_diag;
+    h += pathlib_movecost * (h_str - 2 * h_diag);
+
+    return h;
+}
+
+//#define PATHLIB_USE_NODESCRAP
+#define PATHLIB_NODEEXPIRE 0.05
+float pathlib_scraplist_cnt;
+entity newnode()
+{
+    entity n;
+#ifdef PATHLIB_USE_NODESCRAP
+    if(pathlib_scraplist_cnt)
+    {
+        n = findentity(world,owner,scraplist);
+        if(n)
+        {
+            --pathlib_scraplist_cnt;
+            ++pathlib_recycle_cnt;
+            return n;
+        }
+        else
+            pathlib_scraplist_cnt = 0;
+    }
+#endif
+    ++pathlib_made_cnt;
+    n = spawn();
+#ifdef PATHLIB_NODEEXPIRE
+    n.think      = SUB_Remove;
+    n.nextthink  = time + PATHLIB_NODEEXPIRE;
+    return n;
+}
+
+void dumpnode(entity n)
+{
+#ifdef PATHLIB_USE_NODESCRAP
+    ++pathlib_scraplist_cnt;
+
+    n.path_next    = world;
+    n.path_prev    = world;
+    n.is_path_node = FALSE;
+    n.owner        = scraplist;
+#else
+    //n.is_path_node = FALSE;
+    n.think        = SUB_Remove;
+    n.nextthink    = time;
+#endif
+}
+
+entity pathlib_mknode(vector where,entity parent)
+{
+    entity node;
+
+    node              = newnode();
+    node.is_path_node = TRUE;
+    node.owner        = openlist;
+    node.path_prev    = parent;
+
+    setorigin(node, where);
+
+    ++pathlib_open_cnt;
+
+    node.medium = pointcontents(where);
+
+    return node;
+}
+
+var float pathlib_expandnode(entity node, vector start, vector goal);
+float pathlib_expandnode_star(entity node, vector start, vector goal);
+float pathlib_expandnode_box(entity node, vector start, vector goal);
+
+var float pathlib_makenode(entity parent,vector start, vector to, vector goal,float cost);
+float pathlib_makenode_adaptive(entity parent,vector start, vector to, vector goal,float cost)
+{
+    entity node;
+    float h,g,f,doedge;
+    vector where;
+
+    ++pathlib_searched_cnt;
+
+    if(inwater(parent.origin))
+    {
+        pathlib_expandnode = pathlib_expandnode_box;
+        pathlib_movenode   = pathlib_swimnode;
+    }
+    else
+    {
+        if(inwater(to))
+        {
+            pathlib_expandnode = pathlib_expandnode_box;
+            pathlib_movenode   = pathlib_swimnode;
+        }
+        else
+        {
+
+            pathlib_expandnode = pathlib_expandnode_star;
+            pathlib_movenode   = pathlib_walknode;
+            doedge = 1;
+        }
+    }
+
+    where = pathlib_movenode(parent.origin,to,0);
+    if not(pathlib_movenode_goodnode)
+        return 0;
+
+    if(doedge)
+    if(edge_check(where,pathlib_edge_check_size))
+        return 0;
+
+    if(parent.path_prev)
+        pathlib_h_diagonal2sdp(parent.path_prev.origin,parent.origin,where,goal);
+
+    h = pathlib_heuristic(where,goal);
+    g = pathlib_cost(parent,where,cost);
+    f = g + h;
+
+    node = findradius(where,pathlib_gridsize * 0.75);
+    while(node)
+    {
+        if(node.is_path_node == TRUE)
+        {
+            ++pathlib_merge_cnt;
+            if(node.owner == openlist)
+            {
+                if(node.pathlib_node_g > g)
+                {
+                    node.pathlib_node_h = h;
+                    node.pathlib_node_g = g;
+                    node.pathlib_node_f = f;
+                    node.path_prev = parent;
+                }
+
+                if not (best_open_node)
+                    best_open_node = node;
+                else if(best_open_node.pathlib_node_f > node.pathlib_node_f)
+                    best_open_node = node;
+            }
+
+            return 1;
+        }
+        node = node.chain;
+    }
+
+    node = pathlib_mknode(where,parent);
+    node.pathlib_node_h = h;
+    node.pathlib_node_g = g;
+    node.pathlib_node_f = f;
+
+    if not (best_open_node)
+        best_open_node = node;
+    else if(best_open_node.pathlib_node_f > node.pathlib_node_f)
+        best_open_node = node;
+
+    return 1;
+}
+
+entity pathlib_getbestopen()
+{
+    entity node;
+    entity bestnode;
+
+    if(best_open_node)
+    {
+        ++pathlib_bestcash_hits;
+        pathlib_bestcash_saved += pathlib_open_cnt;
+
+        return best_open_node;
+    }
+
+    node = findchainentity(owner,openlist);
+    if(!node)
+        return world;
+
+    bestnode = node;
+    while(node)
+    {
+        ++pathlib_bestopen_seached;
+        if(node.pathlib_node_f < bestnode.pathlib_node_f)
+            bestnode = node;
+
+        node = node.chain;
+    }
+
+    return bestnode;
+}
+
+void pathlib_close_node(entity node,vector goal)
+{
+
+    if(node.owner == closedlist)
+    {
+        dprint("Pathlib: Tried to close a closed node!\n");
+        return;
+    }
+
+    if(node == best_open_node)
+        best_open_node = world;
+
+    ++pathlib_closed_cnt;
+    --pathlib_open_cnt;
+
+    node.owner = closedlist;
+
+    if(vlen(node.origin - goal) <= pathlib_gridsize)
+    {
+        vector goalmove;
+
+        goalmove = pathlib_walknode(node.origin,goal,1);
+        if(pathlib_movenode_goodnode)
+        {
+            goal_node         = node;
+            pathlib_foundgoal = TRUE;
+        }
+    }
+}
+
+float pathlib_expandnode_star(entity node, vector start, vector goal)
+{
+    vector point;
+    vector where;
+    float nodecnt;
+
+    where = node.origin;
+
+    v_forward = '1 0 0';
+    v_right   = '0 1 0';
+
+    // Forward
+    point = where + v_forward * pathlib_gridsize;
+    nodecnt += pathlib_makenode(node,start,point,goal,pathlib_movecost);
+
+    // Back
+    point = where - v_forward * pathlib_gridsize;
+    nodecnt += pathlib_makenode(node,start,point,goal,pathlib_movecost);
+
+    // Right
+    point = where + v_right * pathlib_gridsize;
+    nodecnt += pathlib_makenode(node,start,point,goal,pathlib_movecost);
+
+    // Left
+    point = where - v_right * pathlib_gridsize;
+    nodecnt += pathlib_makenode(node,start,point,goal,pathlib_movecost);
+
+    // Forward-right
+    point = where + v_forward * pathlib_gridsize + v_right * pathlib_gridsize;
+    nodecnt += pathlib_makenode(node,start,point,goal,pathlib_movecost_diag);
+
+    // Forward-left
+    point = where + v_forward * pathlib_gridsize - v_right * pathlib_gridsize;
+    nodecnt += pathlib_makenode(node,start,point,goal,pathlib_movecost_diag);
+
+    // Back-right
+    point = where - v_forward * pathlib_gridsize + v_right * pathlib_gridsize;
+    nodecnt += pathlib_makenode(node,start,point,goal,pathlib_movecost_diag);
+
+    // Back-left
+    point = where - v_forward * pathlib_gridsize - v_right * pathlib_gridsize;
+    nodecnt += pathlib_makenode(node,start,point,goal,pathlib_movecost_diag);
+
+    return pathlib_open_cnt;
+}
+
+float pathlib_expandnode_box(entity node, vector start, vector goal)
+{
+    vector v;
+
+    for(v_z = node.origin_z - pathlib_gridsize; v_z <= node.origin_z + pathlib_gridsize; v_z += pathlib_gridsize)
+    for(v_y = node.origin_y - pathlib_gridsize; v_y <= node.origin_y + pathlib_gridsize; v_y += pathlib_gridsize)
+    for(v_x = node.origin_x - pathlib_gridsize; v_x <= node.origin_x + pathlib_gridsize; v_x += pathlib_gridsize)
+    {
+        if(vlen(v - node.origin))
+            pathlib_makenode(node,start,v,goal,pathlib_movecost);
+    }
+
+    return pathlib_open_cnt;
+}
+
+void pathlib_cleanup()
+{
+    entity node;
+
+    node = findfloat(world,is_path_node, TRUE);
+    while(node)
+    {
+        dumpnode(node);
+        node = findfloat(node,is_path_node, TRUE);
+    }
+
+    if(openlist)
+        remove(openlist);
+
+    if(closedlist)
+        remove(closedlist);
+
+    best_open_node = world;
+    openlist       = world;
+    closedlist     = world;
+}
+
+var float buildpath_nodefilter(vector n,vector c,vector p);
+float buildpath_nodefilter_directional(vector n,vector c,vector p)
+{
+    vector d1,d2;
+
+    d2 = normalize(p - c);
+    d1 = normalize(c - n);
+
+    if(vlen(d1-d2) < 0.25)
+        return 1;
+
+    return 0;
+}
+
+float buildpath_nodefilter_moveskip(vector n,vector c,vector p)
+{
+    pathlib_walknode(p,n,1);
+    if(pathlib_movenode_goodnode)
+        return 1;
+
+    return 0;
+}
+
+entity path_build(entity next, vector where, entity prev, entity start)
+{
+    entity path;
+
+    if(prev && next)
+        if(buildpath_nodefilter)
+            if(buildpath_nodefilter(next.origin,where,prev.origin))
+                return next;
+
+
+    path           = spawn();
+    path.owner     = start;
+    path.path_next = next;
+
+    setorigin(path,where);
+
+    if(!next)
+        path.classname = "path_end";
+    else
+    {
+        if(!prev)
+            path.classname = "path_start";
+        else
+            path.classname = "path_node";
+    }
+
+    return path;
+}
+
+entity pathlib_astar(vector from,vector to)
+{
+    entity path, start, end, open, n, ln;
+    float ptime, ftime, ctime;
+
+    ptime = gettime(GETTIME_REALTIME);
+
+    pathlib_cleanup();
+
+    // Select water<->land capable node make/link
+    pathlib_makenode     = pathlib_makenode_adaptive;
+    // Select XYZ cost estimate
+    pathlib_heuristic    = pathlib_h_diagonal3;
+    // Select distance + waterfactor cost
+    pathlib_cost         = pathlib_g_euclidean_water;
+    // Select star expander
+    pathlib_expandnode   = pathlib_expandnode_star;
+    // Select walk simulation movement test
+    pathlib_movenode     = pathlib_walknode;
+    // Filter final nodes by direction
+    buildpath_nodefilter = buildpath_nodefilter_directional;
+
+    // If the start is in water we need diffrent settings
+    if(inwater(from))
+    {
+        // Select volumetric node expaner
+        pathlib_expandnode = pathlib_expandnode_box;
+
+        // Water movement test
+        pathlib_movenode   = pathlib_swimnode;
+    }
+
+    if not(openlist)
+        openlist       = spawn();
+
+    if not(closedlist)
+        closedlist     = spawn();
+
+    if not(scraplist)
+        scraplist      = spawn();
+
+    pathlib_closed_cnt       = 0;
+    pathlib_open_cnt         = 0;
+    pathlib_made_cnt         = 0;
+    pathlib_merge_cnt        = 0;
+    pathlib_searched_cnt     = 0;
+    pathlib_bestopen_seached = 0;
+    pathlib_bestcash_hits    = 0;
+    pathlib_bestcash_saved   = 0;
+    pathlib_recycle_cnt      = 0;
+
+    pathlib_gridsize       = 128;
+    pathlib_movecost       = pathlib_gridsize;
+    pathlib_movecost_diag  = vlen(('1 1 0' * pathlib_gridsize));
+    pathlib_movecost_waterfactor = 1.1;
+    pathlib_foundgoal      = 0;
+
+    walknode_boxmax   = self.maxs * 1.5;
+    walknode_boxmin   = self.mins * 1.5;
+
+    pathlib_edge_check_size = (vlen(walknode_boxmin - walknode_boxmax) * 0.5);
+
+    walknode_boxup    = '0 0 2' * self.maxs_z;
+    walknode_stepsize = 32;
+    walknode_stepup   = '0 0 1' * walknode_stepsize;
+    walknode_maxdrop  = '0 0 3' * walknode_stepsize;
+
+    from_x = fsnap(from_x,pathlib_gridsize);
+    from_y = fsnap(from_y,pathlib_gridsize);
+
+    to_x = fsnap(to_x,pathlib_gridsize);
+    to_y = fsnap(to_y,pathlib_gridsize);
+
+    dprint("AStar init. ", ftos(pathlib_scraplist_cnt), " nodes on scrap\n");
+    path = pathlib_mknode(from,world);
+    pathlib_close_node(path,to);
+    if(pathlib_foundgoal)
+    {
+        dprint("AStar: Goal found on first node!\n");
+
+        open           = spawn();
+        open.owner     = open;
+        open.classname = "path_end";
+        setorigin(open,path.origin);
+
+        pathlib_cleanup();
+
+        return open;
+    }
+
+    if(pathlib_expandnode(path,from,to) <= 0)
+    {
+        dprint("AStar path fail.\n");
+        pathlib_cleanup();
+
+        return world;
+    }
+
+    best_open_node = pathlib_getbestopen();
+    n = best_open_node;
+    pathlib_close_node(best_open_node,to);
+    if(inwater(n.origin))
+        pathlib_expandnode_box(n,from,to);
+    else
+        pathlib_expandnode_star(n,from,to);
+
+    while(pathlib_open_cnt)
+    {
+        best_open_node = pathlib_getbestopen();
+        n = best_open_node;
+        pathlib_close_node(best_open_node,to);
+
+        if(inwater(n.origin))
+            pathlib_expandnode_box(n,from,to);
+        else
+            pathlib_expandnode(n,from,to);
+
+        if(pathlib_foundgoal)
+        {
+            dprint("Target found. Rebuilding and filtering path...\n");
+            ftime = gettime(GETTIME_REALTIME);
+            ptime = ftime - ptime;
+
+            start = path_build(world,path.origin,world,world);
+            end   = path_build(world,goal_node.origin,world,start);
+            ln    = end;
+
+            open = goal_node;
+            for(open = goal_node; open.path_prev != path; open = open.path_prev)
+            {
+                n    = path_build(ln,open.origin,open.path_prev,start);
+                ln.path_prev = n;
+                ln = n;
+            }
+            start.path_next = n;
+            n.path_prev = start;
+            ftime = gettime(GETTIME_REALTIME) - ftime;
+
+            ctime = gettime(GETTIME_REALTIME);
+            pathlib_cleanup();
+            ctime = gettime(GETTIME_REALTIME) - ctime;
+
+
+#ifdef DEBUGPATHING
+            pathlib_showpath2(start);
+
+            dprint("Time used -      pathfinding: ", ftos(ptime),"\n");
+            dprint("Time used - rebuild & filter: ", ftos(ftime),"\n");
+            dprint("Time used -          cleanup: ", ftos(ctime),"\n");
+            dprint("Time used -            total: ", ftos(ptime + ftime + ctime),"\n");
+            dprint("Time used -         # frames: ", ftos(ceil((ptime + ftime + ctime) / sys_ticrate)),"\n\n");
+            dprint("Nodes -         created: ", ftos(pathlib_made_cnt),"\n");
+            dprint("Nodes -            open: ", ftos(pathlib_open_cnt),"\n");
+            dprint("Nodes -          merged: ", ftos(pathlib_merge_cnt),"\n");
+            dprint("Nodes -          closed: ", ftos(pathlib_closed_cnt),"\n");
+            dprint("Nodes -        searched: ", ftos(pathlib_searched_cnt),"\n");
+
+        if(pathlib_recycle_cnt)
+            dprint("Nodes -      make/reuse: ", ftos(pathlib_made_cnt / pathlib_recycle_cnt),"\n");
+        if(pathlib_recycle_cnt)
+            dprint("Nodes -          reused: ", ftos(pathlib_recycle_cnt),"\n");
+
+            dprint("Nodes bestopen searched: ", ftos(pathlib_bestopen_seached),"\n");
+            dprint("Nodes bestcash -   hits: ", ftos(pathlib_bestcash_hits),"\n");
+            dprint("Nodes bestcash -   save: ", ftos(pathlib_bestcash_saved),"\n");
+            dprint("AStar done. ", ftos(pathlib_scraplist_cnt), " nodes on scrap\n\n");
+#endif
+            return start;
+        }
+    }
+
+    dprint("A* Faild to find a path! Try a smaller gridsize.\n");
+
+    pathlib_cleanup();
+
+    return world;
+}
+
+
+


Property changes on: branches/nexuiz-2.0/data/qcsrc/server/pathlib.qc
___________________________________________________________________
Name: svn:eol-style
   + native


Property changes on: branches/nexuiz-2.0/data/qcsrc/server/portals.qc
___________________________________________________________________
Name: svn:eol-style
   + native


Property changes on: branches/nexuiz-2.0/data/qcsrc/server/portals.qh
___________________________________________________________________
Name: svn:eol-style
   + native


Property changes on: branches/nexuiz-2.0/data/qcsrc/server/post-builtins.qh
___________________________________________________________________
Name: svn:eol-style
   + native


Property changes on: branches/nexuiz-2.0/data/qcsrc/server/pre-builtins.qh
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: branches/nexuiz-2.0/data/qcsrc/server/race.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/race.qc	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/qcsrc/server/race.qc	2009-07-11 14:59:28 UTC (rev 7191)
@@ -1,7 +1,11 @@
 #define MAX_CHECKPOINTS 255
 
+.float race_penalty;
+.float race_penalty_accumulator;
+.string race_penalty_reason;
 .float race_checkpoint; // player: next checkpoint that has to be reached
 .float race_laptime;
+.entity race_lastpenalty;
 
 .entity sprite;
 
@@ -12,6 +16,7 @@
 entity race_checkpoint_lastplayers[MAX_CHECKPOINTS];
 
 float race_highest_checkpoint;
+float race_timed_checkpoint;
 
 float race_NextCheckpoint(float f)
 {
@@ -31,6 +36,22 @@
 		return f - 1;
 }
 
+// encode as:
+//   0 = common start/finish
+// 254 = start
+// 255 = finish
+float race_CheckpointNetworkID(float f)
+{
+	if(race_timed_checkpoint)
+	{
+		if(f == 0)
+			return 254; // start
+		else if(f == race_timed_checkpoint)
+			return 255; // finish
+	}
+	return f;
+}
+
 void race_SendNextCheckpoint(entity e, float spec)
 {
 	float recordtime;
@@ -58,11 +79,11 @@
 		if(spec)
 		{
 			WriteByte(MSG_ONE, RACE_NET_CHECKPOINT_NEXT_SPEC_QUALIFYING);
-			WriteCoord(MSG_ONE, e.race_laptime);
+			WriteCoord(MSG_ONE, e.race_laptime - e.race_penalty_accumulator);
 		}
 		else
 			WriteByte(MSG_ONE, RACE_NET_CHECKPOINT_NEXT_QUALIFYING);
-		WriteByte(MSG_ONE, cp); // checkpoint the player will be at next
+		WriteByte(MSG_ONE, race_CheckpointNetworkID(cp)); // checkpoint the player will be at next
 		WriteShort(MSG_ONE, recordtime);
 		WriteString(MSG_ONE, recordholder);
 	});
@@ -80,11 +101,14 @@
 	float snew, l;
 	entity p;
 
+	if(g_race_qualifying)
+		t += e.race_penalty_accumulator;
+
 	t = floor(0.4 + 10 * t); // make integer
 	// adding just 0.4 so it rounds down in the .5 case (matching the timer display)
 
 	if(tvalid)
-	if(cp == 0) // finish line
+	if(cp == race_timed_checkpoint) // finish line
 	if not(e.race_completed)
 	{
 		float s;
@@ -97,7 +121,7 @@
 		else
 		{
 			s = PlayerScore_Add(e, SP_RACE_TIME, 0);
-			snew = floor(0.5 + 10 * (time - game_starttime));
+			snew = floor(0.4 + 10 * (time - game_starttime));
 			PlayerScore_Add(e, SP_RACE_TIME, snew - s);
 			l = PlayerTeamScore_Add(e, SP_RACE_LAPS, ST_RACE_LAPS, 1);
 
@@ -139,7 +163,7 @@
 				if(race_checkpoint_recordholders[cp])
 					strunzone(race_checkpoint_recordholders[cp]);
 				race_checkpoint_recordholders[cp] = strzone(e.netname);
-				if(cp == 0)
+				if(cp == race_timed_checkpoint)
 				{
 					float grecordtime;
 					string grecordholder;
@@ -196,7 +220,7 @@
 				WriteByte(MSG_ONE, SVC_TEMPENTITY);
 				WriteByte(MSG_ONE, TE_CSQC_RACE);
 				WriteByte(MSG_ONE, RACE_NET_CHECKPOINT_HIT_QUALIFYING);
-				WriteByte(MSG_ONE, cp); // checkpoint the player now is at
+				WriteByte(MSG_ONE, race_CheckpointNetworkID(cp)); // checkpoint the player now is at
 				WriteShort(MSG_ONE, t); // time to that intermediate
 				WriteShort(MSG_ONE, recordtime); // previously best time
 				WriteString(MSG_ONE, recordholder); // record holder
@@ -222,7 +246,7 @@
 			WriteByte(MSG_ONE, SVC_TEMPENTITY);
 			WriteByte(MSG_ONE, TE_CSQC_RACE);
 			WriteByte(MSG_ONE, RACE_NET_CHECKPOINT_HIT_RACE);
-			WriteByte(MSG_ONE, cp); // checkpoint the player now is at
+			WriteByte(MSG_ONE, race_CheckpointNetworkID(cp)); // checkpoint the player now is at
 			if(e == oth)
 			{
 				WriteShort(MSG_ONE, 0);
@@ -246,7 +270,7 @@
 			WriteByte(MSG_ONE, SVC_TEMPENTITY);
 			WriteByte(MSG_ONE, TE_CSQC_RACE);
 			WriteByte(MSG_ONE, RACE_NET_CHECKPOINT_HIT_RACE_BY_OPPONENT);
-			WriteByte(MSG_ONE, cp); // checkpoint the player now is at
+			WriteByte(MSG_ONE, race_CheckpointNetworkID(cp)); // checkpoint the player now is at
 			if(e == oth)
 			{
 				WriteShort(MSG_ONE, 0);
@@ -267,6 +291,8 @@
 {
 	e.race_checkpoint = -1;
 	e.race_laptime = 0;
+	e.race_penalty_accumulator = 0;
+	e.race_lastpenalty = world;
 
 	msg_entity = e;
 	WRITESPECTATABLE_MSG_ONE({
@@ -349,12 +375,18 @@
 			self.message = oldmsg;
 		}
 
+		race_ImposePenaltyTime(other, self.race_penalty, self.race_penalty_reason);
+
 		other.race_checkpoint = race_NextCheckpoint(self.race_checkpoint);
 
 		race_SendTime(other, self.race_checkpoint, time - other.race_laptime, !!other.race_laptime);
 
-		if(!self.race_checkpoint) // finish line
+		if(!self.race_checkpoint) // start line
+		{
 			other.race_laptime = time;
+			other.race_penalty_accumulator = 0;
+			other.race_lastpenalty = world;
+		}
 
 		if(g_race_qualifying)
 			race_SendNextCheckpoint(other, 0);
@@ -398,7 +430,7 @@
 float have_verified;
 void trigger_race_checkpoint_verify()
 {
-	entity oldself;
+	entity oldself, cp;
 	float i, p;
 	float qual;
 
@@ -443,6 +475,16 @@
 
 	g_race_qualifying = qual;
 
+	if(race_timed_checkpoint)
+		for(cp = world; (cp = find(cp, classname, "trigger_race_checkpoint")); )
+			if(cp.sprite)
+			{
+				if(cp.race_checkpoint == 0)
+					WaypointSprite_UpdateSprites(cp.sprite, "race-start", "", "");
+				else if(cp.race_checkpoint == race_timed_checkpoint)
+					WaypointSprite_UpdateSprites(cp.sprite, "race-finish", "", "");
+			}
+
 	remove(self);
 	self = oldself;
 }
@@ -471,20 +513,28 @@
 		self.message = "went backwards";
 	if (!self.message2)
 		self.message2 = "was pushed backwards by";
+	if (!self.race_penalty_reason)
+		self.race_penalty_reason = "missing a checkpoint";
 	
 	self.race_checkpoint = self.cnt;
 
 	if(self.race_checkpoint > race_highest_checkpoint)
+	{
 		race_highest_checkpoint = self.race_checkpoint;
+		if(self.spawnflags & 8)
+			race_timed_checkpoint = self.race_checkpoint;
+		else
+			race_timed_checkpoint = 0;
+	}
 
-	if(self.race_checkpoint)
+	if(!self.race_penalty)
 	{
-		WaypointSprite_SpawnFixed("race-checkpoint", o, self, sprite);
+		if(self.race_checkpoint)
+			WaypointSprite_SpawnFixed("race-checkpoint", o, self, sprite);
+		else
+			WaypointSprite_SpawnFixed("race-finish", o, self, sprite);
 	}
-	else
-	{
-		WaypointSprite_SpawnFixed("race-finish", o, self, sprite);
-	}
+
 	self.sprite.waypointsprite_visible_for_player = race_waypointsprite_visible_for_player;
 
 	InitializeEntity(self, trigger_race_checkpoint_verify, INITPRIO_FINDTARGET);
@@ -616,3 +666,61 @@
 		ScoreRules_race();
 	}
 }
+
+void race_ImposePenaltyTime(entity pl, float penalty, string reason)
+{
+	if(g_race_qualifying)
+	{
+		pl.race_penalty_accumulator += penalty;
+		msg_entity = pl;
+		WRITESPECTATABLE_MSG_ONE({
+			WriteByte(MSG_ONE, SVC_TEMPENTITY);
+			WriteByte(MSG_ONE, TE_CSQC_RACE);
+			WriteByte(MSG_ONE, RACE_NET_PENALTY_QUALIFYING);
+			WriteByte(MSG_ONE, floor(0.4 + 10 * penalty));
+			WriteString(MSG_ONE, reason);
+		});
+	}
+	else
+	{
+		pl.race_penalty = time + penalty;
+		msg_entity = pl;
+		WRITESPECTATABLE_MSG_ONE_VARNAME(dummy, {
+			WriteByte(MSG_ONE, SVC_TEMPENTITY);
+			WriteByte(MSG_ONE, TE_CSQC_RACE);
+			WriteByte(MSG_ONE, RACE_NET_PENALTY_RACE);
+			WriteByte(MSG_ONE, floor(0.4 + 10 * penalty));
+			WriteString(MSG_ONE, reason);
+		});
+	}
+}
+
+void penalty_touch()
+{
+	EXACTTRIGGER_TOUCH;
+	race_ImposePenaltyTime(other, self.race_penalty, self.race_penalty_reason);
+}
+
+void penalty_use()
+{
+	other = activator;
+	if(other.race_lastpenalty != self)
+	{
+		other.race_lastpenalty = self;
+		race_ImposePenaltyTime(other, self.race_penalty, self.race_penalty_reason);
+	}
+}
+
+void spawnfunc_trigger_race_penalty()
+{
+	EXACTTRIGGER_INIT;
+
+	self.use = penalty_use;
+	if not(self.spawnflags & 1)
+		self.touch = penalty_touch;
+
+	if (!self.race_penalty_reason)
+		self.race_penalty_reason = "missing a checkpoint";
+	if (!self.race_penalty)
+		self.race_penalty = 5;
+}


Property changes on: branches/nexuiz-2.0/data/qcsrc/server/race.qc
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: branches/nexuiz-2.0/data/qcsrc/server/race.qh
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/race.qh	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/qcsrc/server/race.qh	2009-07-11 14:59:28 UTC (rev 7191)
@@ -16,3 +16,4 @@
 .float race_place;
 .float race_completed;
 float race_completing;
+void race_ImposePenaltyTime(entity pl, float penalty, string reason);


Property changes on: branches/nexuiz-2.0/data/qcsrc/server/race.qh
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: branches/nexuiz-2.0/data/qcsrc/server/scores.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/scores.qc	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/qcsrc/server/scores.qc	2009-07-11 14:59:28 UTC (rev 7191)
@@ -92,10 +92,18 @@
 
 	if(!scores_initialized) return 0; // FIXME remove this when everything uses this system
 	if(t <= 0 || t >= 16)
+	{
+		if(gameover)
+			return 0;
 		error("Adding score to invalid team!");
+	}
 	s = teamscorekeepers[t - 1];
 	if(!s)
+	{
+		if(gameover)
+			return 0;
 		error("Adding score to unknown team!");
+	}
 	if(score)
 		if(teamscores_label[scorefield] != "")
 			s.SendFlags |= pow(2, scorefield);
@@ -299,7 +307,11 @@
 	if(!scores_initialized) return 0; // FIXME remove this when everything uses this system
 	s = player.scorekeeper;
 	if(!s)
+	{
+		if(gameover)
+			return 0;
 		error("Adding score to unknown player!");
+	}
 	if(score)
 		if(scores_label[scorefield] != "")
 			s.SendFlags |= pow(2, scorefield);
@@ -688,7 +700,11 @@
 	entity sk;
 
 	if(t <= 0 || t >= 16)
+	{
+		if(gameover)
+			return 0;
 		error("Reading score of invalid team!");
+	}
 
 	sk = teamscorekeepers[t - 1];
 	if not(sk)


Property changes on: branches/nexuiz-2.0/data/qcsrc/server/scores.qc
___________________________________________________________________
Name: svn:eol-style
   + native


Property changes on: branches/nexuiz-2.0/data/qcsrc/server/scores.qh
___________________________________________________________________
Name: svn:eol-style
   + native


Property changes on: branches/nexuiz-2.0/data/qcsrc/server/scores_rules.qc
___________________________________________________________________
Name: svn:eol-style
   + native


Property changes on: branches/nexuiz-2.0/data/qcsrc/server/steerlib.qc
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: branches/nexuiz-2.0/data/qcsrc/server/sv_main.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/sv_main.qc	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/qcsrc/server/sv_main.qc	2009-07-11 14:59:28 UTC (rev 7191)
@@ -138,6 +138,30 @@
 	servertime = time;
 	serverframetime = frametime;
 
+#ifdef PROFILING
+	if(time > client_cefc_accumulatortime + 1)
+	{
+		float t, pp, c_seeing, c_seen;
+		entity cl;
+		t = client_cefc_accumulator / (time - client_cefc_accumulatortime);
+		print("CEFC time: ", ftos(t * 1000), "ms; ");
+		c_seeing = 0;
+		c_seen = 0;
+		FOR_EACH_CLIENT(cl)
+		{
+			if(clienttype(cl) == CLIENTTYPE_REAL)
+				++c_seeing;
+			if(cl.classname == "player")
+				++c_seen;
+		}
+		print("CEFC calls per second: ", ftos(c_seeing * (c_seen - 1) / t), "; ");
+		print("CEFC 100% load at: ", ftos(solve_quadratic(t, -t, -1) * '0 1 0'), "\n");
+
+		client_cefc_accumulatortime = time;
+		client_cefc_accumulator = 0;
+	}
+#endif
+
 	dprint_load(); // load dprint status from cvar
 
 	entity e;
@@ -169,6 +193,8 @@
 	sv_warsowbunny_turnaccel = cvar("sv_warsowbunny_turnaccel");
 	sv_warsowbunny_backtosideratio = cvar("sv_warsowbunny_backtosideratio");
 	teamplay = cvar ("teamplay");
+	sys_ticrate = cvar("sys_ticrate");
+	orig_slowmo = cvar("slowmo");
 
 	if(teams_matter && !teamplay)
 		teamplay = 3;

Modified: branches/nexuiz-2.0/data/qcsrc/server/t_items.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/t_items.qc	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/qcsrc/server/t_items.qc	2009-07-11 14:59:28 UTC (rev 7191)
@@ -102,7 +102,8 @@
 				if(self.waypointsprite_attached)
 				{
 					WaypointSprite_UpdateTeamRadar(self.waypointsprite_attached, RADARICON_POWERUP, rgb);
-					WaypointSprite_UpdateMaxHealth(self.waypointsprite_attached, ITEM_RESPAWN_TICKS + 1);
+					//WaypointSprite_UpdateMaxHealth(self.waypointsprite_attached, ITEM_RESPAWN_TICKS + 1);
+					WaypointSprite_UpdateBuildFinished(self.waypointsprite_attached, time + ITEM_RESPAWN_TICKS);
 				}
 			}
 		}
@@ -110,7 +111,7 @@
 		if(self.waypointsprite_attached)
 		{
 			WaypointSprite_Ping(self.waypointsprite_attached);
-			WaypointSprite_UpdateHealth(self.waypointsprite_attached, self.count);
+			//WaypointSprite_UpdateHealth(self.waypointsprite_attached, self.count);
 		}
 	}
 }
@@ -645,8 +646,37 @@
 				return;
 			}
 		}
-		else if ((!cvar("g_pickup_items") || g_nixnex) && itemid != IT_STRENGTH && itemid != IT_INVINCIBLE && itemid != IT_HEALTH)
+		else if (g_nixnex)
 		{
+			local float rm;
+
+			rm = 1;
+			switch (itemid)
+			{
+				case IT_HEALTH:
+				case IT_5HP:
+				case IT_25HP:
+				case IT_ARMOR:
+				case IT_ARMOR_SHARD:
+					if (cvar("g_nixnex_with_healtharmor"))
+						rm = 0;
+					break;
+				case IT_STRENGTH:
+				case IT_INVINCIBLE:
+					if (cvar("g_nixnex_with_powerups"))
+						rm = 0;
+					break;
+			}
+
+			if(rm)
+			{
+				startitem_failed = TRUE;
+				remove (self);
+				return;
+			}
+		}
+		else if (!cvar("g_pickup_items") && itemid != IT_STRENGTH && itemid != IT_INVINCIBLE && itemid != IT_HEALTH)
+		{
 			startitem_failed = TRUE;
 			remove (self);
 			return;

Modified: branches/nexuiz-2.0/data/qcsrc/server/t_teleporters.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/t_teleporters.qc	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/qcsrc/server/t_teleporters.qc	2009-07-11 14:59:28 UTC (rev 7191)
@@ -122,7 +122,7 @@
 
 	if (other.health < 1)
 		return;
-	if (!other.flags & FL_CLIENT)	// FIXME: Make missiles firable through the teleport too
+	if not(other.flags & FL_CLIENT)	// FIXME: Make missiles firable through the teleport too
 		return;
 
 	if(self.team)
@@ -158,6 +158,10 @@
 		sprint(other, "Teleport destination vanished. Sorry... please complain to the mapper.\n");
 	}
 
+	if(e.speed)
+		if(vlen(other.velocity) > e.speed)
+			other.velocity = normalize(other.velocity) * max(0, e.speed);
+
 	TeleportPlayer(self, other, e.origin + '0 0 1' * (1 - other.mins_z - 24), e.mangle, v_forward * vlen(other.velocity), '0 0 0', '0 0 0');
 
 	if(e.target)


Property changes on: branches/nexuiz-2.0/data/qcsrc/server/target_spawn.qc
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: branches/nexuiz-2.0/data/qcsrc/server/tturrets/include/turrets.qh
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/tturrets/include/turrets.qh	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/qcsrc/server/tturrets/include/turrets.qh	2009-07-11 14:59:28 UTC (rev 7191)
@@ -1,29 +1,29 @@
-#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?
-
-// Non combat units
-#include "../units/unit_fusionreactor.qc"  /// Supply unites that need it with power
-#include "../units/unit_targettrigger.qc"  /// Hit me!
-#include "../units/unit_checkpoint.qc"     /// Halfsmart pathing.
-
-// 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"     /// Moving minigun-rocket-meele err thing
-#include "../units/unit_ewheel.qc"     /// A evil wheel. with guns on.
-//#include "../units/unit_repulsor.qc" /// Fires a wave that knocks foes back
-//#include "../units/unit_hive.qc"     /// Swarm AI
-
-#endif // TTURRETS_ENABLED
+#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?
+
+// Non combat units
+#include "../units/unit_fusionreactor.qc"  /// Supply unites that need it with power
+#include "../units/unit_targettrigger.qc"  /// Hit me!
+#include "../units/unit_checkpoint.qc"     /// Halfsmart pathing.
+
+// 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"     /// Moving minigun-rocket-meele err thing
+#include "../units/unit_ewheel.qc"     /// A evil wheel. with guns on.
+//#include "../units/unit_repulsor.qc" /// Fires a wave that knocks foes back
+//#include "../units/unit_hive.qc"     /// Swarm AI
+
+#endif // TTURRETS_ENABLED


Property changes on: branches/nexuiz-2.0/data/qcsrc/server/tturrets/include/turrets.qh
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: branches/nexuiz-2.0/data/qcsrc/server/tturrets/include/turrets_early.qh
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/tturrets/include/turrets_early.qh	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/qcsrc/server/tturrets/include/turrets_early.qh	2009-07-11 14:59:28 UTC (rev 7191)
@@ -1,533 +1,533 @@
-// Comment out below to skip turrets
-#define TTURRETS_ENABLED
-
-#ifdef TTURRETS_ENABLED
-
-#message "with tZork turrets"
-
-vector real_origin(entity ent);
-
-/// Map time control over pain inflicted
-.float turret_scale_damage;
-/// Map time control targetting range
-.float turret_scale_range;
-/// Map time control refire
-.float turret_scale_refire;
-/// Map time control ammo held and recharged
-.float turret_scale_ammo;
-/// Map time control aim speed
-.float turret_scale_aim;
-/// Map time control health
-.float turret_scale_health;
-/// Map time control respawn time
-.float turret_scale_respawn;
-
-/// Used for cvar reloading
-.string cvar_basename;
-
-//.float spawnflags
-/// Spawn a pillar model under the turret to make it look ok on uneven ground surfaces
-#define TSF_TERRAINBASE   2
-/// Disable builtin ammo regeneration
-#define TSF_NO_AMMO_REGEN 4
-/// Dont break path to chase enemys. will still fire at them if possible.
-#define TSF_NO_PATHBREAK  8
-/// Dont respawn
-#define TSL_NO_RESPAWN    16
-
-/// target selection flags
-.float target_select_flags;
-/// target validatoin flags
-.float target_validate_flags;
-/// Dont select a target on its own.
-#define TFL_TARGETSELECT_NO            2
-/// Need line of sight
-#define TFL_TARGETSELECT_LOS           4
-/// Players are valid targets
-#define TFL_TARGETSELECT_PLAYERS       8
-/// Missiles are valid targets
-#define TFL_TARGETSELECT_MISSILES      16
-/// Responds to turret_trigger_target events
-#define TFL_TARGETSELECT_TRIGGERTARGET 32
-/// Angular limitations of turret head limits target selection
-#define TFL_TARGETSELECT_ANGLELIMITS   64
-/// Range limits apply in targetselection
-#define TFL_TARGETSELECT_RANGELIMTS    128
-/// DOnt select targets with a .team matching its own
-#define TFL_TARGETSELECT_TEAMCHECK     256
-/// Cant select targets on its own. needs to be triggerd or slaved.
-#define TFL_TARGETSELECT_NOBUILTIN     512
-/// TFL_TARGETSELECT_TEAMCHECK is inverted (selects only mebers of own .team)
-#define TFL_TARGETSELECT_OWNTEAM       1024
-/// Turrets aren't valid targets
-#define TFL_TARGETSELECT_NOTURRETS     2048
-/// Use feild of view
-#define TFL_TARGETSELECT_FOV           4096
-
-/// 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, but only if target is on ground.
-#define TFL_AIM_GROUND2             4
-/// Use balistic aim. FIXME: 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            512
-/// Simply aim at target's current location
-#define TFL_AIM_SIMPLE              1024
-
-/// 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 really bad 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 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
-/// Move the acctual target to aimspot before tracing impact (and back after)
-#define TFL_FIRECHECK_VERIFIED   8192
-/// Dont do any chekcs
-#define TFL_FIRECHECK_NO         16384
-
-/// 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_HEADATTACHED 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 (pointless atm, aim gets recalculated to fast). not implemented.
-#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
-/// Supress std turret gibs on death
-#define  TFL_DMG_DEATH_NOGIBS    512
-
-// Spawnflags
-/// Spawn in teambased modes
-#define TFL_SPAWN_TEAM      2
-/// Spawn in FFA modes
-#define TFL_SPAWN_FFA       4
-
-
-/*
-* Fields used by turrets
-*/
-/// Turrets internal ai speed
-.float      ticrate;
-
-/// Where to point the 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. (can 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; // unused
-
-/// What entity the aimtrace hit, if any.
-.entity     tur_impactent;
-
-/// Distance to enemy
-.float      tur_dist_enemy;
-
-/// Distance to aimspot
-.float      tur_dist_aimpos;
-
-/// Distance impact<->aim
-.float      tur_dist_impact_to_aimpos;
-
-/// 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 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; // no practical use aymore, work with target_range insted.
-/// 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;
-/// Field of view
-//.float target_select_fov;
-/// Last thimestamp this surret aquierd a valid target
-.float target_select_time;
-
-/*
-* 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
-.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
-*/
-// noting uses the following atm.
-// "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; // creates to much aim issues. using tur_shotorg_updated insted.
-//.vector tur_shotorg_updated; // DP8815 fixes gettaginfo, no longer needed.
-.vector tur_shotdir_updated;
-
-void turrets_precash();
-
-
-
-#endif // TTURRETS_ENABLED
-
-
+// Comment out below to skip turrets
+#define TTURRETS_ENABLED
+
+#ifdef TTURRETS_ENABLED
+
+#message "with tZork turrets"
+
+vector real_origin(entity ent);
+
+/// Map time control over pain inflicted
+.float turret_scale_damage;
+/// Map time control targetting range
+.float turret_scale_range;
+/// Map time control refire
+.float turret_scale_refire;
+/// Map time control ammo held and recharged
+.float turret_scale_ammo;
+/// Map time control aim speed
+.float turret_scale_aim;
+/// Map time control health
+.float turret_scale_health;
+/// Map time control respawn time
+.float turret_scale_respawn;
+
+/// Used for cvar reloading
+.string cvar_basename;
+
+//.float spawnflags
+/// Spawn a pillar model under the turret to make it look ok on uneven ground surfaces
+#define TSF_TERRAINBASE   2
+/// Disable builtin ammo regeneration
+#define TSF_NO_AMMO_REGEN 4
+/// Dont break path to chase enemys. will still fire at them if possible.
+#define TSF_NO_PATHBREAK  8
+/// Dont respawn
+#define TSL_NO_RESPAWN    16
+
+/// target selection flags
+.float target_select_flags;
+/// target validatoin flags
+.float target_validate_flags;
+/// Dont select a target on its own.
+#define TFL_TARGETSELECT_NO            2
+/// Need line of sight
+#define TFL_TARGETSELECT_LOS           4
+/// Players are valid targets
+#define TFL_TARGETSELECT_PLAYERS       8
+/// Missiles are valid targets
+#define TFL_TARGETSELECT_MISSILES      16
+/// Responds to turret_trigger_target events
+#define TFL_TARGETSELECT_TRIGGERTARGET 32
+/// Angular limitations of turret head limits target selection
+#define TFL_TARGETSELECT_ANGLELIMITS   64
+/// Range limits apply in targetselection
+#define TFL_TARGETSELECT_RANGELIMTS    128
+/// DOnt select targets with a .team matching its own
+#define TFL_TARGETSELECT_TEAMCHECK     256
+/// Cant select targets on its own. needs to be triggerd or slaved.
+#define TFL_TARGETSELECT_NOBUILTIN     512
+/// TFL_TARGETSELECT_TEAMCHECK is inverted (selects only mebers of own .team)
+#define TFL_TARGETSELECT_OWNTEAM       1024
+/// Turrets aren't valid targets
+#define TFL_TARGETSELECT_NOTURRETS     2048
+/// Use feild of view
+#define TFL_TARGETSELECT_FOV           4096
+
+/// 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, but only if target is on ground.
+#define TFL_AIM_GROUND2             4
+/// Use balistic aim. FIXME: 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            512
+/// Simply aim at target's current location
+#define TFL_AIM_SIMPLE              1024
+
+/// 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 really bad 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 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
+/// Move the acctual target to aimspot before tracing impact (and back after)
+#define TFL_FIRECHECK_VERIFIED   8192
+/// Dont do any chekcs
+#define TFL_FIRECHECK_NO         16384
+
+/// 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_HEADATTACHED 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 (pointless atm, aim gets recalculated to fast). not implemented.
+#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
+/// Supress std turret gibs on death
+#define  TFL_DMG_DEATH_NOGIBS    512
+
+// Spawnflags
+/// Spawn in teambased modes
+#define TFL_SPAWN_TEAM      2
+/// Spawn in FFA modes
+#define TFL_SPAWN_FFA       4
+
+
+/*
+* Fields used by turrets
+*/
+/// Turrets internal ai speed
+.float      ticrate;
+
+/// Where to point the 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. (can 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; // unused
+
+/// What entity the aimtrace hit, if any.
+.entity     tur_impactent;
+
+/// Distance to enemy
+.float      tur_dist_enemy;
+
+/// Distance to aimspot
+.float      tur_dist_aimpos;
+
+/// Distance impact<->aim
+.float      tur_dist_impact_to_aimpos;
+
+/// 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 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; // no practical use aymore, work with target_range insted.
+/// 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;
+/// Field of view
+//.float target_select_fov;
+/// Last thimestamp this surret aquierd a valid target
+.float target_select_time;
+
+/*
+* 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
+.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
+*/
+// noting uses the following atm.
+// "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; // creates to much aim issues. using tur_shotorg_updated insted.
+//.vector tur_shotorg_updated; // DP8815 fixes gettaginfo, no longer needed.
+.vector tur_shotdir_updated;
+
+void turrets_precash();
+
+
+
+#endif // TTURRETS_ENABLED
+
+


Property changes on: branches/nexuiz-2.0/data/qcsrc/server/tturrets/include/turrets_early.qh
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: branches/nexuiz-2.0/data/qcsrc/server/tturrets/system/system_aimprocs.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/tturrets/system/system_aimprocs.qc	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/qcsrc/server/tturrets/system/system_aimprocs.qc	2009-07-11 14:59:28 UTC (rev 7191)
@@ -1,122 +1,122 @@
-/*
-* 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,prep;
-    float distance,impact_time,i,mintime;
-
-    turret_tag_fire_update();
-
-    if(self.aim_flags & TFL_AIM_SIMPLE)
-        return real_origin(self.enemy);
-
-    // Keep track of when we can shoot the next time and
-    // try to predict where the target will be then, so we can put our aimpoint there.
-    // + sys_ticrate for non hitscan, becouse spawned
-    // projectiles dont move during the first tic of their life.
-    if (self.turrcaps_flags & TFL_TURRCAPS_HITSCAN)
-        mintime = max(self.attack_finished_single - time,0);
-    else
-        mintime = max(self.attack_finished_single - time,0) + sys_ticrate;
-
-    // Baseline
-    pre_pos = real_origin(self.enemy);// + (self.enemy.velocity * mintime);
-
-    if (self.aim_flags & TFL_AIM_INFRONT)   // Aim a bit in front of the target
-        pre_pos = pre_pos + (normalize(self.enemy.velocity) * 64);
-
-    if (self.aim_flags & TFL_AIM_BEHIND)    // Aim a bit behind the target
-        pre_pos = pre_pos - (normalize(self.enemy.velocity) * 32);
-
-    // Lead?
-    if (self.aim_flags & TFL_AIM_LEAD)
-    if (self.aim_flags & TFL_AIM_SHOTTIMECOMPENSATE)       // Need to conpensate for shot traveltime
-    {
-        // FIXME: this cant be the best way to do this..
-
-
-        prep = pre_pos;
-        for(i = 0; i < 4; ++i)
-        {
-            distance = vlen(prep - self.tur_shotorg);
-            impact_time = distance / self.shot_speed;
-            prep = pre_pos + self.enemy.velocity * impact_time;
-        }
-
-
-        // tnx to Rudolf "div0" Polzer for this solution.
-        // hmm tobad it dont work.
-        /*
-        vector q;
-        q = solve_quadratic(self.enemy.velocity*self.enemy.velocity - self.shot_speed*self.shot_speed, 2*(pre_pos*self.enemy.velocity), pre_pos * pre_pos);
-        if(q_x > 0)
-            impact_time = q_x;
-        else
-            impact_time = q_y;
-        */
-
-        prep = pre_pos + (self.enemy.velocity * (impact_time + mintime));
-
-        if(self.aim_flags & TFL_AIM_ZPREDICT)
-        if not(self.enemy.flags & FL_ONGROUND)
-        if(self.enemy.movetype == MOVETYPE_WALK || self.enemy.movetype == MOVETYPE_TOSS || self.enemy.movetype == MOVETYPE_BOUNCE)
-        {
-            float vz;
-            prep_z = pre_pos_z;
-            vz = self.enemy.velocity_z;
-            for(i = 0; i < impact_time; i += sys_ticrate)
-            {
-                vz = vz - (sv_gravity * sys_ticrate);
-                prep_z = prep_z + vz * sys_ticrate;
-            }
-        }
-
-
-        pre_pos = prep;
-    }
-    else
-        pre_pos = pre_pos + self.enemy.velocity * mintime;
-
-    // Smooth out predict-Z?
-    /*
-    if (self.aim_flags & TFL_AIM_ZEASE)
-    if (self.enemy.flags & FL_CLIENT)
-    {
-        vector v;
-        v = real_origin(self.enemy);
-        pre_pos_z = (pre_pos_z + v_z) * 0.5;
-    }
-    */
-
-    if(self.aim_flags & TFL_AIM_GROUND2)
-    {
-        tracebox(pre_pos + '0 0 32',self.enemy.mins,self.enemy.maxs,pre_pos -'0 0 64',MOVE_WORLDONLY,self.enemy);
-        if(trace_fraction != 1.0)
-            pre_pos = trace_endpos;
-    }
-
-    /*
-    // This turret should hit the ground neer a target rather the do a direct hit
-    if (self.aim_flags & TFL_AIM_GROUND)
-    {
-        traceline(pre_pos + '0 0 8',pre_pos - '0 0 10000',MOVE_WORLDONLY,self.enemy);
-        pre_pos = trace_endpos;
-    }
-    */
-
-    return pre_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,prep;
+    float distance,impact_time,i,mintime;
+
+    turret_tag_fire_update();
+
+    if(self.aim_flags & TFL_AIM_SIMPLE)
+        return real_origin(self.enemy);
+
+    // Keep track of when we can shoot the next time and
+    // try to predict where the target will be then, so we can put our aimpoint there.
+    // + sys_ticrate for non hitscan, becouse spawned
+    // projectiles dont move during the first tic of their life.
+    if (self.turrcaps_flags & TFL_TURRCAPS_HITSCAN)
+        mintime = max(self.attack_finished_single - time,0);
+    else
+        mintime = max(self.attack_finished_single - time,0) + sys_ticrate;
+
+    // Baseline
+    pre_pos = real_origin(self.enemy);// + (self.enemy.velocity * mintime);
+
+    if (self.aim_flags & TFL_AIM_INFRONT)   // Aim a bit in front of the target
+        pre_pos = pre_pos + (normalize(self.enemy.velocity) * 64);
+
+    if (self.aim_flags & TFL_AIM_BEHIND)    // Aim a bit behind the target
+        pre_pos = pre_pos - (normalize(self.enemy.velocity) * 32);
+
+    // Lead?
+    if (self.aim_flags & TFL_AIM_LEAD)
+    if (self.aim_flags & TFL_AIM_SHOTTIMECOMPENSATE)       // Need to conpensate for shot traveltime
+    {
+        // FIXME: this cant be the best way to do this..
+
+
+        prep = pre_pos;
+        for(i = 0; i < 4; ++i)
+        {
+            distance = vlen(prep - self.tur_shotorg);
+            impact_time = distance / self.shot_speed;
+            prep = pre_pos + self.enemy.velocity * impact_time;
+        }
+
+
+        // tnx to Rudolf "div0" Polzer for this solution.
+        // hmm tobad it dont work.
+        /*
+        vector q;
+        q = solve_quadratic(self.enemy.velocity*self.enemy.velocity - self.shot_speed*self.shot_speed, 2*(pre_pos*self.enemy.velocity), pre_pos * pre_pos);
+        if(q_x > 0)
+            impact_time = q_x;
+        else
+            impact_time = q_y;
+        */
+
+        prep = pre_pos + (self.enemy.velocity * (impact_time + mintime));
+
+        if(self.aim_flags & TFL_AIM_ZPREDICT)
+        if not(self.enemy.flags & FL_ONGROUND)
+        if(self.enemy.movetype == MOVETYPE_WALK || self.enemy.movetype == MOVETYPE_TOSS || self.enemy.movetype == MOVETYPE_BOUNCE)
+        {
+            float vz;
+            prep_z = pre_pos_z;
+            vz = self.enemy.velocity_z;
+            for(i = 0; i < impact_time; i += sys_ticrate)
+            {
+                vz = vz - (sv_gravity * sys_ticrate);
+                prep_z = prep_z + vz * sys_ticrate;
+            }
+        }
+
+
+        pre_pos = prep;
+    }
+    else
+        pre_pos = pre_pos + self.enemy.velocity * mintime;
+
+    // Smooth out predict-Z?
+    /*
+    if (self.aim_flags & TFL_AIM_ZEASE)
+    if (self.enemy.flags & FL_CLIENT)
+    {
+        vector v;
+        v = real_origin(self.enemy);
+        pre_pos_z = (pre_pos_z + v_z) * 0.5;
+    }
+    */
+
+    if(self.aim_flags & TFL_AIM_GROUND2)
+    {
+        tracebox(pre_pos + '0 0 32',self.enemy.mins,self.enemy.maxs,pre_pos -'0 0 64',MOVE_WORLDONLY,self.enemy);
+        if(trace_fraction != 1.0)
+            pre_pos = trace_endpos;
+    }
+
+    /*
+    // This turret should hit the ground neer a target rather the do a direct hit
+    if (self.aim_flags & TFL_AIM_GROUND)
+    {
+        traceline(pre_pos + '0 0 8',pre_pos - '0 0 10000',MOVE_WORLDONLY,self.enemy);
+        pre_pos = trace_endpos;
+    }
+    */
+
+    return pre_pos;
+}


Property changes on: branches/nexuiz-2.0/data/qcsrc/server/tturrets/system/system_aimprocs.qc
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: branches/nexuiz-2.0/data/qcsrc/server/tturrets/system/system_damage.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/tturrets/system/system_damage.qc	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/qcsrc/server/tturrets/system/system_damage.qc	2009-07-11 14:59:28 UTC (rev 7191)
@@ -1,343 +1,343 @@
-/*
-* 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.deadflag           = DEAD_DEAD;
-    self.tur_head.deadflag  = self.deadflag;
-
-    sound (self, CHAN_PLAYER, "weapons/rocket_impact.wav", VOL_BASE, 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    = self.alpha;
+/*
+* 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.deadflag           = DEAD_DEAD;
+    self.tur_head.deadflag  = self.deadflag;
+
+    sound (self, CHAN_PLAYER, "weapons/rocket_impact.wav", VOL_BASE, 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    = self.alpha;
     self.customizeentityforclient = SUB_False;
     self.tur_head.customizeentityforclient = SUB_False;
-
-    self.event_damage           = SUB_Null;
-    self.tur_head.event_damage  = SUB_Null;
-    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
-    if not(self.damage_flags & TFL_DMG_DEATH_NOGIBS)
-    {
-        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,DEATH_TURRET,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()
-{
-    // Make sure all parts belong to the same team since
-    // this function doubles as "teamchange" function.
-
-    self.tur_head.team = self.team;
-
-    /*
-    COLOR_TEAM1       = 4;  // red
-    COLOR_TEAM2       = 13; // blue
-    COLOR_TEAM3       = 12; // yellow
-    COLOR_TEAM4       = 9; // pink
-    */
-
-	self.colormod = '0 0 0';
-
-	switch(self.team)
-	{
-        case COLOR_TEAM1: // Red
-            self.colormod = '1.4 0.8 0.8';
-            break;
-
-        case COLOR_TEAM2: // Blue
-            self.colormod = '0.8 0.8 1.4';
-            break;
-
-        case COLOR_TEAM3: // Yellow
-            self.colormod = '1.4 1.4 0.6';
-            break;
-
-        case COLOR_TEAM4: // Pink
-            self.colormod = '1.4 0.6 1.4';
-            break;
-	}
-
-    self.deadflag           = DEAD_NO;
-    self.tur_head.deadflag  = self.deadflag;
-    self.effects            = 0;
-    self.tur_head.effects   = self.effects;
-
-    self.solid              = SOLID_BBOX;
-    self.tur_head.solid     = self.solid;
-
-    self.alpha = 1;
+
+    self.event_damage           = SUB_Null;
+    self.tur_head.event_damage  = SUB_Null;
+    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
+    if not(self.damage_flags & TFL_DMG_DEATH_NOGIBS)
+    {
+        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,DEATH_TURRET,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()
+{
+    // Make sure all parts belong to the same team since
+    // this function doubles as "teamchange" function.
+
+    self.tur_head.team = self.team;
+
+    /*
+    COLOR_TEAM1       = 4;  // red
+    COLOR_TEAM2       = 13; // blue
+    COLOR_TEAM3       = 12; // yellow
+    COLOR_TEAM4       = 9; // pink
+    */
+
+	self.colormod = '0 0 0';
+
+	switch(self.team)
+	{
+        case COLOR_TEAM1: // Red
+            self.colormod = '1.4 0.8 0.8';
+            break;
+
+        case COLOR_TEAM2: // Blue
+            self.colormod = '0.8 0.8 1.4';
+            break;
+
+        case COLOR_TEAM3: // Yellow
+            self.colormod = '1.4 1.4 0.6';
+            break;
+
+        case COLOR_TEAM4: // Pink
+            self.colormod = '1.4 0.6 1.4';
+            break;
+	}
+
+    self.deadflag           = DEAD_NO;
+    self.tur_head.deadflag  = self.deadflag;
+    self.effects            = 0;
+    self.tur_head.effects   = self.effects;
+
+    self.solid              = SOLID_BBOX;
+    self.tur_head.solid     = self.solid;
+
+    self.alpha = 1;
     self.tur_head.alpha     = self.alpha;
     self.customizeentityforclient = SUB_True;
     self.tur_head.customizeentityforclient = SUB_True;
-
-
-    self.takedamage = DAMAGE_AIM;
-    self.tur_head.takedamage    = self.takedamage;
-
-    self.event_damage           = turret_stdproc_damage;
-    self.tur_head.event_damage  = self.event_damage;
-
-    self.avelocity              = '0 0 0';
-    self.tur_head.avelocity     = self.avelocity;
-    self.tur_head.angles        = self.idle_aim;
-    self.health                 = self.tur_health;
-    self.tur_head.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;
-
-    if (self.owner)
-        baseent = self.owner;
-    else
-        baseent = self;
-
-    // Enougth allready!
-    if (self.health <= 0)
-        return;
-
-    // Inactive turrets take no damage. (hm..)
-    if not (baseent.tur_active)
-        return;
-
-    if (teamplay != 0)
-    if (self.team == attacker.team)
-    {
-        // This does not happen anymore. Re-enable if you fix that.
-        //if(attacker.flags & FL_CLIENT)
-        if(clienttype(attacker) == CLIENTTYPE_REAL)
-            sprint(attacker, "\{1}Turret tells you: I'm on your team!\n");
-
-        if(cvar("g_friendlyfire"))
-            damage = damage * cvar("g_friendlyfire");
-        else
-            return;
-    }
-
-    self.health = self.health - damage;
-
-    // thorw head slightly off aim when hit?
-    if (self.classname == "turret_head")
-        if (baseent.damage_flags & TFL_DMG_HEADSHAKE)
-        {
-            //baseent.tur_aimoff_x += (random() * damage);
-            //baseent.tur_aimoff_y += ((random()*0.75) * damage);
-            self.angles_x = self.angles_x + (-0.5 + random()) * damage;
-            self.angles_y = self.angles_y + (-0.5 + random()) * damage;
-        }
-
-    if (baseent.turrcaps_flags & TFL_TURRCAPS_MOVE)
-        baseent.velocity = baseent.velocity + vforce;
-
-    // FIXME: Better damage feedback
-    // 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)
-    {
-        baseent.event_damage           = SUB_Null;
-        baseent.tur_head.event_damage  = SUB_Null;
-        baseent.takedamage             = DAMAGE_NO;
-        baseent.tur_head.takedamage    = baseent.takedamage;
-        baseent.nextthink = time;
-        baseent.think = turret_stdproc_die;
-    }
-}
+
+
+    self.takedamage = DAMAGE_AIM;
+    self.tur_head.takedamage    = self.takedamage;
+
+    self.event_damage           = turret_stdproc_damage;
+    self.tur_head.event_damage  = self.event_damage;
+
+    self.avelocity              = '0 0 0';
+    self.tur_head.avelocity     = self.avelocity;
+    self.tur_head.angles        = self.idle_aim;
+    self.health                 = self.tur_health;
+    self.tur_head.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;
+
+    if (self.owner)
+        baseent = self.owner;
+    else
+        baseent = self;
+
+    // Enougth allready!
+    if (self.health <= 0)
+        return;
+
+    // Inactive turrets take no damage. (hm..)
+    if not (baseent.tur_active)
+        return;
+
+    if (teamplay != 0)
+    if (self.team == attacker.team)
+    {
+        // This does not happen anymore. Re-enable if you fix that.
+        //if(attacker.flags & FL_CLIENT)
+        if(clienttype(attacker) == CLIENTTYPE_REAL)
+            sprint(attacker, "\{1}Turret tells you: I'm on your team!\n");
+
+        if(cvar("g_friendlyfire"))
+            damage = damage * cvar("g_friendlyfire");
+        else
+            return;
+    }
+
+    self.health = self.health - damage;
+
+    // thorw head slightly off aim when hit?
+    if (self.classname == "turret_head")
+        if (baseent.damage_flags & TFL_DMG_HEADSHAKE)
+        {
+            //baseent.tur_aimoff_x += (random() * damage);
+            //baseent.tur_aimoff_y += ((random()*0.75) * damage);
+            self.angles_x = self.angles_x + (-0.5 + random()) * damage;
+            self.angles_y = self.angles_y + (-0.5 + random()) * damage;
+        }
+
+    if (baseent.turrcaps_flags & TFL_TURRCAPS_MOVE)
+        baseent.velocity = baseent.velocity + vforce;
+
+    // FIXME: Better damage feedback
+    // 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)
+    {
+        baseent.event_damage           = SUB_Null;
+        baseent.tur_head.event_damage  = SUB_Null;
+        baseent.takedamage             = DAMAGE_NO;
+        baseent.tur_head.takedamage    = baseent.takedamage;
+        baseent.nextthink = time;
+        baseent.think = turret_stdproc_die;
+    }
+}


Property changes on: branches/nexuiz-2.0/data/qcsrc/server/tturrets/system/system_damage.qc
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: branches/nexuiz-2.0/data/qcsrc/server/tturrets/system/system_main.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/tturrets/system/system_main.qc	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/qcsrc/server/tturrets/system/system_main.qc	2009-07-11 14:59:28 UTC (rev 7191)
@@ -1,1258 +1,1258 @@
-#define cvar_base "g_turrets_unit_"
-
-/*
-float turret_customizeentityforclient()
-{
-}
-
-float Turret_SendEntity(entity to, float sf)
-{
-
-	WriteByte(MSG_ENTITY, ENT_CLIENT_TURRET);
-	WriteCoord(MSG_ENTITY, self.tur_head.angles_x);
-	WriteCoord(MSG_ENTITY, self.tur_head.angles_y);
-    WriteByte(MSG_ENTITY, self.tur_head.frame);
-
-	//WriteCoord(MSG_ENTITY, self.tur_head.angles_z);
-
-	return TRUE;
-}
-*/
-
-void load_unit_settings(entity ent,string unitname,float is_reload)
-{
-    string sbase;
-
-    // dprint("Reloading turret ",e_turret.netname,"\n");
-
-    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';
-
-        if (ent.turrcaps_flags & TFL_TURRCAPS_HEADATTACHED)
-            ent.tur_head.angles = '0 0 0';
-        else
-            ent.tur_head.angles = ent.angles;
-    }
-
-    ent.health      = cvar(strcat(sbase,"_health")) * ent.turret_scale_health;
-    ent.respawntime = cvar(strcat(sbase,"_respawntime")) * ent.turret_scale_respawn;
-
-    ent.shot_dmg          = cvar(strcat(sbase,"_shot_dmg")) * ent.turret_scale_damage;
-    ent.shot_refire       = cvar(strcat(sbase,"_shot_refire")) * ent.turret_scale_refire;
-    ent.shot_radius       = cvar(strcat(sbase,"_shot_radius")) * ent.turret_scale_damage;
-    ent.shot_speed        = cvar(strcat(sbase,"_shot_speed"));
-    ent.shot_spread       = cvar(strcat(sbase,"_shot_spread"));
-    ent.shot_force        = cvar(strcat(sbase,"_shot_force")) * ent.turret_scale_damage;
-    ent.shot_volly        = cvar(strcat(sbase,"_shot_volly"));
-    ent.shot_volly_refire = cvar(strcat(sbase,"_shot_volly_refire")) * ent.turret_scale_refire;
-
-    ent.target_range         = cvar(strcat(sbase,"_target_range")) * ent.turret_scale_range;
-    ent.target_range_min     = cvar(strcat(sbase,"_target_range_min")) * ent.turret_scale_range;
-    //ent.target_range_fire    = cvar(strcat(sbase,"_target_range_fire")) * ent.turret_scale_range;
-    ent.target_range_optimal = cvar(strcat(sbase,"_target_range_optimal")) * ent.turret_scale_range;
-
-    ent.target_select_rangebias  = cvar(strcat(sbase,"_target_select_rangebias"));
-    ent.target_select_samebias   = cvar(strcat(sbase,"_target_select_samebias"));
-    ent.target_select_anglebias  = cvar(strcat(sbase,"_target_select_anglebias"));
-    ent.target_select_playerbias = cvar(strcat(sbase,"_target_select_playerbias"));
-    //ent.target_select_fov = cvar(cvar_gets(sbase,"_target_select_fov"));
-
-    ent.ammo_max      = cvar(strcat(sbase,"_ammo_max")) * ent.turret_scale_ammo;
-    ent.ammo_recharge = cvar(strcat(sbase,"_ammo_recharge")) * ent.turret_scale_ammo;
-
-    ent.aim_firetolerance_dist = cvar(strcat(sbase,"_aim_firetolerance_dist"));
-    ent.aim_speed    = cvar(strcat(sbase,"_aim_speed")) * ent.turret_scale_aim;
-    ent.aim_maxrot   = cvar(strcat(sbase,"_aim_maxrot"));
-    ent.aim_maxpitch = cvar(strcat(sbase,"_aim_maxpitch"));
-
-    ent.track_type        = cvar(strcat(sbase,"_track_type"));
-    ent.track_accel_pitch = cvar(strcat(sbase,"_track_accel_pitch"));
-    ent.track_accel_rot   = cvar(strcat(sbase,"_track_accel_rot"));
-    ent.track_blendrate   = cvar(strcat(sbase,"_track_blendrate"));
-
-    if(is_reload)
-        if(ent.turret_respawnhook)
-            ent.turret_respawnhook();
-
-}
-
-/*
-float turret_stdproc_true()
-{
-    return 1;
-}
-
-float turret_stdproc_false()
-{
-    return 0;
-}
-
-
-void turret_stdproc_nothing()
-{
-    return;
-}
-*/
-
-/**
-** updates enemy distances, predicted impact point/time
-** and updated aim<->predict impact distance.
-**/
-void turret_do_updates(entity t_turret)
-{
-    vector enemy_pos,oldpos;
-    entity oldself;
-
-    oldself = self;
-    self = t_turret;
-
-    enemy_pos = real_origin(self.enemy);
-
-    turret_tag_fire_update();
-
-    self.tur_shotdir_updated = normalize(v_forward);
-
-    self.tur_dist_enemy  = vlen(self.tur_shotorg - enemy_pos);
-    self.tur_dist_aimpos = vlen(self.tur_shotorg - self.tur_aimpos);
-
-    if(self.firecheck_flags & TFL_FIRECHECK_VERIFIED)
-    if(self.enemy)
-    {
-        oldpos = self.enemy.origin;
-        setorigin(self.enemy,self.tur_aimpos);
-    }
-
-    //dprint("NN: ", self.netname," THVN: ",self.tur_head.classname," frame:",ftos(self.tur_head.frame),"\n");
-    //dprint("self.tur_shotorg: ",vtos(self.tur_shotorg),"\n");
-    tracebox(self.tur_shotorg, '-1 -1 -1','1 1 1',self.tur_shotorg + (self.tur_shotdir_updated * self.tur_dist_aimpos),MOVE_NORMAL,self);
-
-    if(self.firecheck_flags & TFL_FIRECHECK_VERIFIED)
-        if(self.enemy)
-            setorigin(self.enemy,oldpos);
-
-    //self.tur_impactpoint           = trace_endpos;
-    self.tur_impactent             = trace_ent;
-    self.tur_dist_impact_to_aimpos = vlen(trace_endpos - self.tur_aimpos) - (vlen(self.enemy.maxs - self.enemy.mins)*0.5);
-    self.tur_impacttime            = vlen(self.tur_shotorg - trace_endpos) / self.shot_speed;
-
-    self = oldself;
-}
-
-/*
-vector turret_fovsearch_pingpong()
-{
-    vector wish_angle;
-    if(self.phase < time)
-    {
-        if( self.tur_head.phase )
-            self.tur_head.phase = 0;
-        else
-            self.tur_head.phase = 1;
-        self.phase = time + 5;
-    }
-
-    if( self.tur_head.phase)
-        wish_angle = self.idle_aim + '0 1 0' * (self.aim_maxrot * (self.target_select_fov / 360));
-    else
-        wish_angle = self.idle_aim - '0 1 0' * (self.aim_maxrot * (self.target_select_fov / 360));
-
-    return wish_angle;
-}
-
-vector turret_fovsearch_steprot()
-{
-    vector wish_angle;
-    //float rot_add;
-
-    wish_angle   = self.tur_head.angles;
-    wish_angle_x = self.idle_aim_x;
-
-    if (self.phase < time)
-    {
-        //rot_add = self.aim_maxrot / self.target_select_fov;
-        wish_angle_y += (self.target_select_fov * 2);
-
-        if(wish_angle_y > 360)
-            wish_angle_y = wish_angle_y - 360;
-
-         self.phase = time + 1.5;
-    }
-
-    return wish_angle;
-}
-
-vector turret_fovsearch_random()
-{
-    vector wish_angle;
-
-    if (self.phase < time)
-    {
-        wish_angle_y = random() * self.aim_maxrot;
-        if(random() < 0.5)
-            wish_angle_y *= -1;
-
-        wish_angle_x = random() * self.aim_maxpitch;
-        if(random() < 0.5)
-            wish_angle_x *= -1;
-
-        self.phase = time + 5;
-
-        self.tur_aimpos = wish_angle;
-    }
-
-    return self.idle_aim + self.tur_aimpos;
-}
-*/
-
-/**
-** Handles head rotation according to
-** the units .track_type and .track_flags
-**/
-//.entity aim_mark;
-void turret_stdproc_track()
-{
-    vector target_angle; // This is where we want to aim
-    vector move_angle;   // This is where we can aim
-    float f_tmp;
-
-    if (self.track_flags == TFL_TRACK_NO)
-        return;
-
-    if(!self.tur_active)
-        target_angle = self.idle_aim - ('1 0 0' * self.aim_maxpitch);
-    else if (self.enemy == world)
-    {
-        if(time > self.lip)
-            if (self.turrcaps_flags & TFL_TURRCAPS_HEADATTACHED)
-                target_angle = self.idle_aim + self.angles;
-            else
-                target_angle = self.idle_aim;
-        else
-            target_angle = vectoangles(normalize(self.tur_aimpos - self.tur_shotorg));
-    }
-    else
-    {
-        // Find the direction
-        target_angle = normalize(self.tur_aimpos - self.tur_shotorg);
-        target_angle = vectoangles(target_angle); // And make a angle
-    }
-
-    self.tur_head.angles_x = safeangle(self.tur_head.angles_x);
-    self.tur_head.angles_y = safeangle(self.tur_head.angles_y);
-
-    // Find the diffrence between where we currently aim and where we want to aim
-    vector a_off;
-
-
-    if (self.turrcaps_flags & TFL_TURRCAPS_HEADATTACHED)
-    {
-        move_angle = target_angle - (self.angles + self.tur_head.angles);
-        move_angle = shortangle_vxy(move_angle,(self.angles + self.tur_head.angles));
-        a_off = '0 0 0';
-
-    }
-    else
-    {
-        move_angle = target_angle - self.tur_head.angles;
-        move_angle = shortangle_vxy(move_angle,self.tur_head.angles);
-        a_off = self.angles;
-    }
-
-    switch(self.track_type)
-    {
-        case TFL_TRACKTYPE_STEPMOTOR:
-            f_tmp = self.aim_speed * self.ticrate; // dgr/sec -> dgr/tic
-            if (self.track_flags & TFL_TRACK_PITCH)
-            {
-                self.tur_head.angles_x += bound(-f_tmp,move_angle_x, f_tmp);
-                if(self.tur_head.angles_x + a_off_x > self.aim_maxpitch)
-                    self.tur_head.angles_x = a_off_x + self.aim_maxpitch;
-
-                if(self.tur_head.angles_x + a_off_x < -self.aim_maxpitch)
-                    self.tur_head.angles_x = a_off_x - self.aim_maxpitch;
-            }
-
-            if (self.track_flags & TFL_TRACK_ROT)
-            {
-                self.tur_head.angles_y += bound(-f_tmp, move_angle_y, f_tmp);
-                if((self.tur_head.angles_y - a_off_y) > self.aim_maxrot)
-                    self.tur_head.angles_y = a_off_y + self.aim_maxrot;
-
-                if((self.tur_head.angles_y - a_off_y) < -self.aim_maxrot)
-                    self.tur_head.angles_y = a_off_y - self.aim_maxrot;
-            }
-
-            return;
-
-        case TFL_TRACKTYPE_FLUIDINERTIA:
-            f_tmp = self.aim_speed * self.ticrate; // dgr/sec -> dgr/tic
-            move_angle_x = bound(-self.aim_speed, move_angle_x * self.track_accel_pitch * f_tmp,self.aim_speed);
-            move_angle_y = bound(-self.aim_speed, move_angle_y * self.track_accel_rot * f_tmp,self.aim_speed);
-            move_angle = (self.tur_head.avelocity * self.track_blendrate) + (move_angle * (1 - self.track_blendrate));
-            break;
-
-        case TFL_TRACKTYPE_FLUIDPRECISE:
-
-            move_angle_y = bound(-self.aim_speed, move_angle_y, self.aim_speed);
-            move_angle_x = bound(-self.aim_speed, move_angle_x, self.aim_speed);
-
-            break;
-    }
-
-    //  pitch
-    if (self.track_flags & TFL_TRACK_PITCH)
-    {
-        self.tur_head.avelocity_x = move_angle_x;
-        if((self.tur_head.angles_x + self.tur_head.avelocity_x * self.ticrate) + a_off_x > self.aim_maxpitch)
-        {
-            self.tur_head.avelocity_x = 0;
-            self.tur_head.angles_x = a_off_x + self.aim_maxpitch;
-        }
-        if((self.tur_head.angles_x + self.tur_head.avelocity_x * self.ticrate) + a_off_x < -self.aim_maxpitch)
-        {
-            self.tur_head.avelocity_x = 0;
-            self.tur_head.angles_x = a_off_x - self.aim_maxpitch;
-        }
-
-    }
-
-    //  rot
-    if (self.track_flags & TFL_TRACK_ROT)
-    {
-        self.tur_head.avelocity_y = move_angle_y;
-
-        if(((self.tur_head.angles_y + self.tur_head.avelocity_y * self.ticrate)- a_off_y) > self.aim_maxrot)
-        {
-            self.tur_head.avelocity_y = 0;
-            self.tur_head.angles_y = a_off_y + self.aim_maxrot;
-        }
-
-        if(((self.tur_head.angles_y + self.tur_head.avelocity_y * self.ticrate) - a_off_y) < -self.aim_maxrot)
-        {
-            self.tur_head.avelocity_y = 0;
-            self.tur_head.angles_y = a_off_y - self.aim_maxrot;
-        }
-
-    }
-
-}
-
-
-/*
- + = 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;
-
-    // Special case: volly fire turret that has to fire a full volly if a shot was fired.
-    if((self.shoot_flags & TFL_SHOOT_VOLLYALWAYS) && (self.volly_counter != self.shot_volly))
-        return 1;
-
-    // Lack of zombies makes shooting dead things unnecessary :P
-    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? (support-supply units)
-    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_aimpos > self.target_range_fire) return 0;
-
-        // To close?
-        if (self.tur_dist_aimpos < 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_impact_to_aimpos  > self.aim_firetolerance_dist)
-            if (self.tur_impactent != self.enemy)
-                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.firecheck_flags & TFL_FIRECHECK_VERIFIED)
-        if(self.tur_impactent != self.enemy)
-            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.owner == e_turret)
-        return -0.5;
-
-    if not(checkpvs(e_target.origin, e_turret))
-        return -1;
-
-    if (!e_target)// == world)
-        return -2;
-
-	if(g_onslaught)
-		if (substring(e_target.classname, 0, 10) == "onslaught_") // don't attack onslaught targets, that's the player's job!
-			return - 3;
-
-    if (validate_flags & TFL_TARGETSELECT_NO)
-        return -4;
-
-    // If only this was used more..
-    if (e_target.flags & FL_NOTARGET)
-        return -5;
-
-    // Cant touch this
-    if ((e_target.takedamage == DAMAGE_NO) || (e_target.health < 0))
-        return -6;
-
-    // player
-    if (e_target.flags & FL_CLIENT)
-    {
-        if not (validate_flags & TFL_TARGETSELECT_PLAYERS)
-            return -7;
-
-        if (e_target.deadflag != DEAD_NO)
-            return -8;
-    }
-
-	// enemy turrets
-	if (validate_flags & TFL_TARGETSELECT_NOTURRETS)
-        if (e_target.turret_firefunc || e_target.owner.tur_head == e_target)
-            if(e_target.team != e_turret.team) // Dont break support units.
-                return -9;
-
-    // Missile
-    if (e_target.flags & FL_PROJECTILE)
-        if not (validate_flags & TFL_TARGETSELECT_MISSILES)
-            return -10;
-
-    // Team check
-    if (validate_flags & TFL_TARGETSELECT_TEAMCHECK)
-    {
-        if (validate_flags & TFL_TARGETSELECT_OWNTEAM)
-        {
-            if (e_target.team != e_turret.team)
-                return -11;
-
-            if (e_turret.team != e_target.owner.team)
-                return -12;
-        }
-        else
-        {
-            if (e_target.team == e_turret.team)
-                return -13;
-
-            if (e_turret.team == e_target.owner.team)
-                return -14;
-        }
-    }
-
-    // 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 -15;
-
-        if (tvt_dist > e_turret.target_range)
-            return -16;
-    }
-
-    // Can we even aim this thing?
-    if(e_turret.turrcaps_flags & TFL_TURRCAPS_HEADATTACHED)
-    {
-        tvt_thadv = angleofs3(e_turret.tur_head.origin,e_turret.angles + e_turret.tur_head.angles ,e_target);
-        //tvt_thadv = angleofs(e_turret.angles,e_target);
-    }
-    else
-    {
-        tvt_thadv = angleofs(e_turret.tur_head,e_target);
-    }
-
-    tvt_tadv  = shortangle_vxy(angleofs(e_turret,e_target),e_turret.angles);
-    tvt_thadf = vlen(tvt_thadv);
-    tvt_tadf  = vlen(tvt_tadv);
-
-    /*
-    if(validate_flags & TFL_TARGETSELECT_FOV)
-    {
-        if(e_turret.target_select_fov < tvt_thadf)
-            return -21;
-    }
-    */
-
-    if (validate_flags & TFL_TARGETSELECT_ANGLELIMITS)
-    {
-        if (fabs(tvt_tadv_x) > e_turret.aim_maxpitch)
-            return -17;
-
-        if (fabs(tvt_tadv_y) > e_turret.aim_maxrot)
-            return -18;
-    }
-
-    // Line of sight?
-    if (validate_flags & TFL_TARGETSELECT_LOS)
-    {
-        v_tmp = real_origin(e_target) + ((e_target.mins + e_target.maxs) * 0.5);
-        traceline(e_turret.tur_shotorg,v_tmp,0,e_turret);
-
-        if (e_turret.aim_firetolerance_dist < vlen(v_tmp - trace_endpos))
-            return -19;
-    }
-
-    if (e_target.classname == "grapplinghook")
-        return -20;
-
-#ifdef TURRET_DEBUG_TARGETSELECT
-    dprint("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
-    float  score;    // target looper entity score
-    entity e_enemy;  // currently best scoreing target
-    float  m_score;  // currently best scoreing target's score
-    float f;
-
-    m_score = 0;
-    if(self.enemy)
-    if(turret_validate_target(self,self.enemy,self.target_validate_flags) > 0)
-    {
-        e_enemy = self.enemy;
-        m_score = self.turret_score_target(self,e_enemy) * self.target_select_samebias;
-    }
-
-    e = findradius(self.origin,self.target_range);
-
-    // Nothing to aim at?
-    if (!e) return world;
-
-    while (e)
-    {
-        f = turret_validate_target(self,e,self.target_select_flags);
-        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;
-    }
-
-    return e_enemy;
-}
-
-void turret_think()
-{
-    entity e;
-
-    self.nextthink = time + self.ticrate;
-
-    // ONS uses somewhat backwards linking.
-    if (teamplay)
-    {
-        if not (g_onslaught)
-            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);
-                if(e.turret_postthink)
-                    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
-
-    // Handle ammo
-    if not (self.spawnflags & TSF_NO_AMMO_REGEN)
-    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,
-    // So they can handle animation and wake up if need be.
-    if not (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");
-        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 if(self.shoot_flags & TFL_SHOOT_CUSTOM)
-    {
-        // This one is doing something.. oddball. assume its handles what needs to be handled.
-
-        // Predict?
-        if not((self.aim_flags & TFL_AIM_NO))
-            self.tur_aimpos = turret_stdproc_aim_generic();
-
-        // Turn & pitch?
-        if (!self.track_flags & TFL_TRACK_NO)
-            turret_stdproc_track();
-
-        turret_do_updates(self);
-
-        // Fire?
-        if (self.turret_firecheckfunc())
-            turret_fire();
-    }
-    else
-    {
-        // Special case for volly always. if it fired once it must compleate the volly.
-        if(self.shoot_flags & TFL_SHOOT_VOLLYALWAYS)
-            if(self.volly_counter != self.shot_volly)
-            {
-                // Predict or whatnot
-                if not((self.aim_flags & TFL_AIM_NO))
-                    self.tur_aimpos = turret_stdproc_aim_generic();
-
-                // Turn & pitch
-                if (!self.track_flags & TFL_TRACK_NO)
-                    turret_stdproc_track();
-
-                turret_do_updates(self);
-
-                // Fire!
-                if (self.turret_firecheckfunc() != 0)
-                    turret_fire();
-
-                if(self.turret_postthink)
-                    self.turret_postthink();
-
-                return;
-            }
-
-        // Check if we have a vailid enemy, and try to find one if we dont.
-        if( ((self.target_select_time + cvar("g_turrets_targetscan_maxdelay")) < time)
-          || (turret_validate_target(self,self.enemy,self.target_validate_flags) <= 0) )
-        if not (self.target_select_time + cvar("g_turrets_targetscan_mindelay") > time)
-        {
-            self.enemy = turret_select_target();
-            //if(self.enemy)
-                self.target_select_time = time;
-
-        }
-
-
-        // 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
-            if(self.turret_postthink)
-                self.turret_postthink();
-
-            // And bail.
-            return;
-        }
-        else
-            self.lip = time + cvar("g_turrets_aimidle_delay"); // Keep track of the last time we had a target.
-
-        // Predict?
-        if not((self.aim_flags & TFL_AIM_NO))
-            self.tur_aimpos = turret_stdproc_aim_generic();
-
-        // Turn & pitch?
-        if (!self.track_flags & TFL_TRACK_NO)
-            turret_stdproc_track();
-
-        turret_do_updates(self);
-        // Fire?
-        if (self.turret_firecheckfunc())
-            turret_fire();
-    }
-
-    // do any per-turret stuff
-    if(self.turret_postthink)
-        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");
-}
-
-/*
-    When .used a turret switch team to activator.team.
-    If activator is world, the turrets goes inactive.
-*/
-void turret_stdproc_use()
-{
-    dprint("Turret ",self.netname, " used by ",activator.classname,"\n");
-
-    self.team = activator.team;
-
-    if(self.team == 0)
-        self.tur_active = 0;
-    else
-        self.tur_active = 1;
-
-}
-
-void turret_link()
-{
-    //Net_LinkEntity(self, FALSE, 0, Turret_SendEntity);
-    self.think      = turret_think;
-    self.nextthink  = time;
-}
-
-/*
-* Standard turret initialization. use this!
-* (unless you have a very good reason not to)
-* if the return value is 0, the turret should be removed.
-*/
-float turret_stdproc_init (string cvar_base_name, float csqc_shared)
-{
-	entity e,ee;
-
-    if(csqc_shared)
-    {
-        dprint("turrets: csqc_shared requested but not implemented. expect strange things to happen.\n");
-        csqc_shared = 0;
-    }
-
-    // Are turrets allowed atm?
-    if (cvar("g_turrets") == 0)
-        return 0;
-
-    // Better more then once then never.
-    // turret_gibs_precash();
-
-    // Terrainbase spawnflag. This puts a enlongated model
-    // under the turret, so it looks ok on uneaven surfaces.
-    if (self.spawnflags & TSF_TERRAINBASE)
-    {
-        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);
-
-    // Handle turret teams.
-    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; // Group all turrets into the same team iso they dont kill eachother.
-	else if(g_onslaught && self.targetname)
-	{
-		e = find(world,target,self.targetname);
-		if(e != world)
-		{
-			self.team = e.team;
-			ee = e;
-		}
-	}
-	else if(!self.team)
-		self.team = MAX_SHOT_DISTANCE; // Group all turrets into the same team iso they dont kill eachother.
-
-
-
-    /*
-    * 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)
-        if (!self.ticrate) self.ticrate = 0.2;     // Support units generaly dont need to have a high speed ai-loop
-    else
-        if (!self.ticrate) self.ticrate = 0.1;     // 10 fps for normal turrets
-
-    self.ticrate = bound(sys_ticrate,self.ticrate,60);  // keep it sane
-
-// General stuff
-    if (self.netname == "")
-        self.netname = self.classname;
-
-    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 * 0.5;
-    self.target_range_optimal = bound(0,self.target_range_optimal,MAX_SHOT_DISTANCE);
-
-
-// Aim stuff.
-    if (!self.aim_maxrot)
-        self.aim_maxrot = 90;
-    self.aim_maxrot = bound(0,self.aim_maxrot,360);
-
-    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_flags)
-    {
-        self.aim_flags = TFL_AIM_LEAD | TFL_AIM_SHOTTIMECOMPENSATE;
-        if(self.turrcaps_flags & TFL_TURRCAPS_RADIUSDMG)
-            self.aim_flags |= TFL_AIM_GROUND2;
-    }
-
-    // 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.5;
-
-        if (!self.track_accel_rot)
-            self.track_accel_rot   = 0.5;
-
-        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)
-    {
-            self.target_select_flags = TFL_TARGETSELECT_LOS | TFL_TARGETSELECT_TEAMCHECK
-                                     | TFL_TARGETSELECT_RANGELIMTS | TFL_TARGETSELECT_ANGLELIMITS;
-
-        if (self.turrcaps_flags & TFL_TURRCAPS_MISSILEKILL)
-            self.target_select_flags |= TFL_TARGETSELECT_MISSILES;
-
-        if (self.turrcaps_flags & TFL_TURRCAPS_PLAYERKILL)
-            self.target_select_flags |= TFL_TARGETSELECT_PLAYERS;
-        //else
-        //    self.target_select_flags = TFL_TARGETSELECT_NO;
-    }
-
-    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 * 0.5;
-    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;
-
-// Damage stuff
-    if(self.spawnflags & TSL_NO_RESPAWN)
-        if not (self.damage_flags & TFL_DMG_DEATH_NORESPAWN)
-            self.damage_flags |= TFL_DMG_DEATH_NORESPAWN;
-
-// Offsets & origins
-    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;
-    self.tur_head.owner   = self;
-
-    // Defend mode?
-    if(!self.tur_defend)
-    if (self.target != "")
-    {
-        self.tur_defend = find(world, targetname, self.target);
-        if (self.tur_defend == world)
-        {
-            self.target = "";
-            dprint("Turret has invalid defendpoint!\n");
-        }
-    }
-
-// Put pices in place
-    if not (self.turrcaps_flags & TFL_TURRCAPS_HEADATTACHED)
-        setorigin(self.tur_head,self.origin);
-
-    // In target defend mode, aim on the spot to defend when idle.
-    if(self.turrcaps_flags & TFL_TURRCAPS_HEADATTACHED)
-    {
-        if (self.tur_defend)
-            self.idle_aim  = self.tur_head.angles + angleofs(self.tur_head,self.tur_defend);
-        else
-            self.idle_aim  = '0 0 0';
-    }
-    else
-    {
-        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 not (self.turrcaps_flags & TFL_TURRCAPS_HEADATTACHED)
-        self.tur_head.angles    = self.idle_aim;
-
-    if (!self.health)
-        self.health = 150;
-
-    self.tur_health      = self.health;
-    self.tur_head.health = self.health;
-
-    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 color
-    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_score_target    = turret_stdproc_targetscore_support;
-        self.turret_firecheckfunc   = turret_stdproc_firecheck;
-        self.turret_firefunc        = turret_stdproc_fire;
-        //self.turret_postthink       = turret_stdproc_nothing;
-        self.event_damage           = turret_stdproc_damage;
-        self.tur_head.event_damage  = turret_stdproc_damage;
-    }
-    else
-    {
-        self.turret_score_target    = turret_stdproc_targetscore_generic;
-        self.turret_firecheckfunc   = turret_stdproc_firecheck;
-        self.turret_firefunc        = turret_stdproc_fire;
-        //self.turret_postthink       = turret_stdproc_nothing;
-        self.event_damage           = turret_stdproc_damage;
-        self.tur_head.event_damage  = turret_stdproc_damage;
-        //self.turret_addtarget       = turret_stdproc_false;
-    }
-
-    self.use = turret_stdproc_use;
-    self.bot_attack = TRUE;
-
-    // Initiate the main AI loop
-    if(csqc_shared)
-        self.think     = turret_link;
-    else
-        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;
-
-    // In ONS mode, and linked to a ONS ent. need to call the use to set team.
-    if (g_onslaught && ee)
-    {
-        activator = ee;
-        self.use();
-    }
-
-    return 1;
-}
-
-
+#define cvar_base "g_turrets_unit_"
+
+/*
+float turret_customizeentityforclient()
+{
+}
+
+float Turret_SendEntity(entity to, float sf)
+{
+
+	WriteByte(MSG_ENTITY, ENT_CLIENT_TURRET);
+	WriteCoord(MSG_ENTITY, self.tur_head.angles_x);
+	WriteCoord(MSG_ENTITY, self.tur_head.angles_y);
+    WriteByte(MSG_ENTITY, self.tur_head.frame);
+
+	//WriteCoord(MSG_ENTITY, self.tur_head.angles_z);
+
+	return TRUE;
+}
+*/
+
+void load_unit_settings(entity ent,string unitname,float is_reload)
+{
+    string sbase;
+
+    // dprint("Reloading turret ",e_turret.netname,"\n");
+
+    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';
+
+        if (ent.turrcaps_flags & TFL_TURRCAPS_HEADATTACHED)
+            ent.tur_head.angles = '0 0 0';
+        else
+            ent.tur_head.angles = ent.angles;
+    }
+
+    ent.health      = cvar(strcat(sbase,"_health")) * ent.turret_scale_health;
+    ent.respawntime = cvar(strcat(sbase,"_respawntime")) * ent.turret_scale_respawn;
+
+    ent.shot_dmg          = cvar(strcat(sbase,"_shot_dmg")) * ent.turret_scale_damage;
+    ent.shot_refire       = cvar(strcat(sbase,"_shot_refire")) * ent.turret_scale_refire;
+    ent.shot_radius       = cvar(strcat(sbase,"_shot_radius")) * ent.turret_scale_damage;
+    ent.shot_speed        = cvar(strcat(sbase,"_shot_speed"));
+    ent.shot_spread       = cvar(strcat(sbase,"_shot_spread"));
+    ent.shot_force        = cvar(strcat(sbase,"_shot_force")) * ent.turret_scale_damage;
+    ent.shot_volly        = cvar(strcat(sbase,"_shot_volly"));
+    ent.shot_volly_refire = cvar(strcat(sbase,"_shot_volly_refire")) * ent.turret_scale_refire;
+
+    ent.target_range         = cvar(strcat(sbase,"_target_range")) * ent.turret_scale_range;
+    ent.target_range_min     = cvar(strcat(sbase,"_target_range_min")) * ent.turret_scale_range;
+    //ent.target_range_fire    = cvar(strcat(sbase,"_target_range_fire")) * ent.turret_scale_range;
+    ent.target_range_optimal = cvar(strcat(sbase,"_target_range_optimal")) * ent.turret_scale_range;
+
+    ent.target_select_rangebias  = cvar(strcat(sbase,"_target_select_rangebias"));
+    ent.target_select_samebias   = cvar(strcat(sbase,"_target_select_samebias"));
+    ent.target_select_anglebias  = cvar(strcat(sbase,"_target_select_anglebias"));
+    ent.target_select_playerbias = cvar(strcat(sbase,"_target_select_playerbias"));
+    //ent.target_select_fov = cvar(cvar_gets(sbase,"_target_select_fov"));
+
+    ent.ammo_max      = cvar(strcat(sbase,"_ammo_max")) * ent.turret_scale_ammo;
+    ent.ammo_recharge = cvar(strcat(sbase,"_ammo_recharge")) * ent.turret_scale_ammo;
+
+    ent.aim_firetolerance_dist = cvar(strcat(sbase,"_aim_firetolerance_dist"));
+    ent.aim_speed    = cvar(strcat(sbase,"_aim_speed")) * ent.turret_scale_aim;
+    ent.aim_maxrot   = cvar(strcat(sbase,"_aim_maxrot"));
+    ent.aim_maxpitch = cvar(strcat(sbase,"_aim_maxpitch"));
+
+    ent.track_type        = cvar(strcat(sbase,"_track_type"));
+    ent.track_accel_pitch = cvar(strcat(sbase,"_track_accel_pitch"));
+    ent.track_accel_rot   = cvar(strcat(sbase,"_track_accel_rot"));
+    ent.track_blendrate   = cvar(strcat(sbase,"_track_blendrate"));
+
+    if(is_reload)
+        if(ent.turret_respawnhook)
+            ent.turret_respawnhook();
+
+}
+
+/*
+float turret_stdproc_true()
+{
+    return 1;
+}
+
+float turret_stdproc_false()
+{
+    return 0;
+}
+
+
+void turret_stdproc_nothing()
+{
+    return;
+}
+*/
+
+/**
+** updates enemy distances, predicted impact point/time
+** and updated aim<->predict impact distance.
+**/
+void turret_do_updates(entity t_turret)
+{
+    vector enemy_pos,oldpos;
+    entity oldself;
+
+    oldself = self;
+    self = t_turret;
+
+    enemy_pos = real_origin(self.enemy);
+
+    turret_tag_fire_update();
+
+    self.tur_shotdir_updated = normalize(v_forward);
+
+    self.tur_dist_enemy  = vlen(self.tur_shotorg - enemy_pos);
+    self.tur_dist_aimpos = vlen(self.tur_shotorg - self.tur_aimpos);
+
+    if(self.firecheck_flags & TFL_FIRECHECK_VERIFIED)
+    if(self.enemy)
+    {
+        oldpos = self.enemy.origin;
+        setorigin(self.enemy,self.tur_aimpos);
+    }
+
+    //dprint("NN: ", self.netname," THVN: ",self.tur_head.classname," frame:",ftos(self.tur_head.frame),"\n");
+    //dprint("self.tur_shotorg: ",vtos(self.tur_shotorg),"\n");
+    tracebox(self.tur_shotorg, '-1 -1 -1','1 1 1',self.tur_shotorg + (self.tur_shotdir_updated * self.tur_dist_aimpos),MOVE_NORMAL,self);
+
+    if(self.firecheck_flags & TFL_FIRECHECK_VERIFIED)
+        if(self.enemy)
+            setorigin(self.enemy,oldpos);
+
+    //self.tur_impactpoint           = trace_endpos;
+    self.tur_impactent             = trace_ent;
+    self.tur_dist_impact_to_aimpos = vlen(trace_endpos - self.tur_aimpos) - (vlen(self.enemy.maxs - self.enemy.mins)*0.5);
+    self.tur_impacttime            = vlen(self.tur_shotorg - trace_endpos) / self.shot_speed;
+
+    self = oldself;
+}
+
+/*
+vector turret_fovsearch_pingpong()
+{
+    vector wish_angle;
+    if(self.phase < time)
+    {
+        if( self.tur_head.phase )
+            self.tur_head.phase = 0;
+        else
+            self.tur_head.phase = 1;
+        self.phase = time + 5;
+    }
+
+    if( self.tur_head.phase)
+        wish_angle = self.idle_aim + '0 1 0' * (self.aim_maxrot * (self.target_select_fov / 360));
+    else
+        wish_angle = self.idle_aim - '0 1 0' * (self.aim_maxrot * (self.target_select_fov / 360));
+
+    return wish_angle;
+}
+
+vector turret_fovsearch_steprot()
+{
+    vector wish_angle;
+    //float rot_add;
+
+    wish_angle   = self.tur_head.angles;
+    wish_angle_x = self.idle_aim_x;
+
+    if (self.phase < time)
+    {
+        //rot_add = self.aim_maxrot / self.target_select_fov;
+        wish_angle_y += (self.target_select_fov * 2);
+
+        if(wish_angle_y > 360)
+            wish_angle_y = wish_angle_y - 360;
+
+         self.phase = time + 1.5;
+    }
+
+    return wish_angle;
+}
+
+vector turret_fovsearch_random()
+{
+    vector wish_angle;
+
+    if (self.phase < time)
+    {
+        wish_angle_y = random() * self.aim_maxrot;
+        if(random() < 0.5)
+            wish_angle_y *= -1;
+
+        wish_angle_x = random() * self.aim_maxpitch;
+        if(random() < 0.5)
+            wish_angle_x *= -1;
+
+        self.phase = time + 5;
+
+        self.tur_aimpos = wish_angle;
+    }
+
+    return self.idle_aim + self.tur_aimpos;
+}
+*/
+
+/**
+** Handles head rotation according to
+** the units .track_type and .track_flags
+**/
+//.entity aim_mark;
+void turret_stdproc_track()
+{
+    vector target_angle; // This is where we want to aim
+    vector move_angle;   // This is where we can aim
+    float f_tmp;
+
+    if (self.track_flags == TFL_TRACK_NO)
+        return;
+
+    if(!self.tur_active)
+        target_angle = self.idle_aim - ('1 0 0' * self.aim_maxpitch);
+    else if (self.enemy == world)
+    {
+        if(time > self.lip)
+            if (self.turrcaps_flags & TFL_TURRCAPS_HEADATTACHED)
+                target_angle = self.idle_aim + self.angles;
+            else
+                target_angle = self.idle_aim;
+        else
+            target_angle = vectoangles(normalize(self.tur_aimpos - self.tur_shotorg));
+    }
+    else
+    {
+        // Find the direction
+        target_angle = normalize(self.tur_aimpos - self.tur_shotorg);
+        target_angle = vectoangles(target_angle); // And make a angle
+    }
+
+    self.tur_head.angles_x = safeangle(self.tur_head.angles_x);
+    self.tur_head.angles_y = safeangle(self.tur_head.angles_y);
+
+    // Find the diffrence between where we currently aim and where we want to aim
+    vector a_off;
+
+
+    if (self.turrcaps_flags & TFL_TURRCAPS_HEADATTACHED)
+    {
+        move_angle = target_angle - (self.angles + self.tur_head.angles);
+        move_angle = shortangle_vxy(move_angle,(self.angles + self.tur_head.angles));
+        a_off = '0 0 0';
+
+    }
+    else
+    {
+        move_angle = target_angle - self.tur_head.angles;
+        move_angle = shortangle_vxy(move_angle,self.tur_head.angles);
+        a_off = self.angles;
+    }
+
+    switch(self.track_type)
+    {
+        case TFL_TRACKTYPE_STEPMOTOR:
+            f_tmp = self.aim_speed * self.ticrate; // dgr/sec -> dgr/tic
+            if (self.track_flags & TFL_TRACK_PITCH)
+            {
+                self.tur_head.angles_x += bound(-f_tmp,move_angle_x, f_tmp);
+                if(self.tur_head.angles_x + a_off_x > self.aim_maxpitch)
+                    self.tur_head.angles_x = a_off_x + self.aim_maxpitch;
+
+                if(self.tur_head.angles_x + a_off_x < -self.aim_maxpitch)
+                    self.tur_head.angles_x = a_off_x - self.aim_maxpitch;
+            }
+
+            if (self.track_flags & TFL_TRACK_ROT)
+            {
+                self.tur_head.angles_y += bound(-f_tmp, move_angle_y, f_tmp);
+                if((self.tur_head.angles_y - a_off_y) > self.aim_maxrot)
+                    self.tur_head.angles_y = a_off_y + self.aim_maxrot;
+
+                if((self.tur_head.angles_y - a_off_y) < -self.aim_maxrot)
+                    self.tur_head.angles_y = a_off_y - self.aim_maxrot;
+            }
+
+            return;
+
+        case TFL_TRACKTYPE_FLUIDINERTIA:
+            f_tmp = self.aim_speed * self.ticrate; // dgr/sec -> dgr/tic
+            move_angle_x = bound(-self.aim_speed, move_angle_x * self.track_accel_pitch * f_tmp,self.aim_speed);
+            move_angle_y = bound(-self.aim_speed, move_angle_y * self.track_accel_rot * f_tmp,self.aim_speed);
+            move_angle = (self.tur_head.avelocity * self.track_blendrate) + (move_angle * (1 - self.track_blendrate));
+            break;
+
+        case TFL_TRACKTYPE_FLUIDPRECISE:
+
+            move_angle_y = bound(-self.aim_speed, move_angle_y, self.aim_speed);
+            move_angle_x = bound(-self.aim_speed, move_angle_x, self.aim_speed);
+
+            break;
+    }
+
+    //  pitch
+    if (self.track_flags & TFL_TRACK_PITCH)
+    {
+        self.tur_head.avelocity_x = move_angle_x;
+        if((self.tur_head.angles_x + self.tur_head.avelocity_x * self.ticrate) + a_off_x > self.aim_maxpitch)
+        {
+            self.tur_head.avelocity_x = 0;
+            self.tur_head.angles_x = a_off_x + self.aim_maxpitch;
+        }
+        if((self.tur_head.angles_x + self.tur_head.avelocity_x * self.ticrate) + a_off_x < -self.aim_maxpitch)
+        {
+            self.tur_head.avelocity_x = 0;
+            self.tur_head.angles_x = a_off_x - self.aim_maxpitch;
+        }
+
+    }
+
+    //  rot
+    if (self.track_flags & TFL_TRACK_ROT)
+    {
+        self.tur_head.avelocity_y = move_angle_y;
+
+        if(((self.tur_head.angles_y + self.tur_head.avelocity_y * self.ticrate)- a_off_y) > self.aim_maxrot)
+        {
+            self.tur_head.avelocity_y = 0;
+            self.tur_head.angles_y = a_off_y + self.aim_maxrot;
+        }
+
+        if(((self.tur_head.angles_y + self.tur_head.avelocity_y * self.ticrate) - a_off_y) < -self.aim_maxrot)
+        {
+            self.tur_head.avelocity_y = 0;
+            self.tur_head.angles_y = a_off_y - self.aim_maxrot;
+        }
+
+    }
+
+}
+
+
+/*
+ + = 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;
+
+    // Special case: volly fire turret that has to fire a full volly if a shot was fired.
+    if((self.shoot_flags & TFL_SHOOT_VOLLYALWAYS) && (self.volly_counter != self.shot_volly))
+        return 1;
+
+    // Lack of zombies makes shooting dead things unnecessary :P
+    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? (support-supply units)
+    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_aimpos > self.target_range_fire) return 0;
+
+        // To close?
+        if (self.tur_dist_aimpos < 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_impact_to_aimpos  > self.aim_firetolerance_dist)
+            if (self.tur_impactent != self.enemy)
+                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.firecheck_flags & TFL_FIRECHECK_VERIFIED)
+        if(self.tur_impactent != self.enemy)
+            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.owner == e_turret)
+        return -0.5;
+
+    if not(checkpvs(e_target.origin, e_turret))
+        return -1;
+
+    if (!e_target)// == world)
+        return -2;
+
+	if(g_onslaught)
+		if (substring(e_target.classname, 0, 10) == "onslaught_") // don't attack onslaught targets, that's the player's job!
+			return - 3;
+
+    if (validate_flags & TFL_TARGETSELECT_NO)
+        return -4;
+
+    // If only this was used more..
+    if (e_target.flags & FL_NOTARGET)
+        return -5;
+
+    // Cant touch this
+    if ((e_target.takedamage == DAMAGE_NO) || (e_target.health < 0))
+        return -6;
+
+    // player
+    if (e_target.flags & FL_CLIENT)
+    {
+        if not (validate_flags & TFL_TARGETSELECT_PLAYERS)
+            return -7;
+
+        if (e_target.deadflag != DEAD_NO)
+            return -8;
+    }
+
+	// enemy turrets
+	if (validate_flags & TFL_TARGETSELECT_NOTURRETS)
+        if (e_target.turret_firefunc || e_target.owner.tur_head == e_target)
+            if(e_target.team != e_turret.team) // Dont break support units.
+                return -9;
+
+    // Missile
+    if (e_target.flags & FL_PROJECTILE)
+        if not (validate_flags & TFL_TARGETSELECT_MISSILES)
+            return -10;
+
+    // Team check
+    if (validate_flags & TFL_TARGETSELECT_TEAMCHECK)
+    {
+        if (validate_flags & TFL_TARGETSELECT_OWNTEAM)
+        {
+            if (e_target.team != e_turret.team)
+                return -11;
+
+            if (e_turret.team != e_target.owner.team)
+                return -12;
+        }
+        else
+        {
+            if (e_target.team == e_turret.team)
+                return -13;
+
+            if (e_turret.team == e_target.owner.team)
+                return -14;
+        }
+    }
+
+    // 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 -15;
+
+        if (tvt_dist > e_turret.target_range)
+            return -16;
+    }
+
+    // Can we even aim this thing?
+    if(e_turret.turrcaps_flags & TFL_TURRCAPS_HEADATTACHED)
+    {
+        tvt_thadv = angleofs3(e_turret.tur_head.origin,e_turret.angles + e_turret.tur_head.angles ,e_target);
+        //tvt_thadv = angleofs(e_turret.angles,e_target);
+    }
+    else
+    {
+        tvt_thadv = angleofs(e_turret.tur_head,e_target);
+    }
+
+    tvt_tadv  = shortangle_vxy(angleofs(e_turret,e_target),e_turret.angles);
+    tvt_thadf = vlen(tvt_thadv);
+    tvt_tadf  = vlen(tvt_tadv);
+
+    /*
+    if(validate_flags & TFL_TARGETSELECT_FOV)
+    {
+        if(e_turret.target_select_fov < tvt_thadf)
+            return -21;
+    }
+    */
+
+    if (validate_flags & TFL_TARGETSELECT_ANGLELIMITS)
+    {
+        if (fabs(tvt_tadv_x) > e_turret.aim_maxpitch)
+            return -17;
+
+        if (fabs(tvt_tadv_y) > e_turret.aim_maxrot)
+            return -18;
+    }
+
+    // Line of sight?
+    if (validate_flags & TFL_TARGETSELECT_LOS)
+    {
+        v_tmp = real_origin(e_target) + ((e_target.mins + e_target.maxs) * 0.5);
+        traceline(e_turret.tur_shotorg,v_tmp,0,e_turret);
+
+        if (e_turret.aim_firetolerance_dist < vlen(v_tmp - trace_endpos))
+            return -19;
+    }
+
+    if (e_target.classname == "grapplinghook")
+        return -20;
+
+#ifdef TURRET_DEBUG_TARGETSELECT
+    dprint("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
+    float  score;    // target looper entity score
+    entity e_enemy;  // currently best scoreing target
+    float  m_score;  // currently best scoreing target's score
+    float f;
+
+    m_score = 0;
+    if(self.enemy)
+    if(turret_validate_target(self,self.enemy,self.target_validate_flags) > 0)
+    {
+        e_enemy = self.enemy;
+        m_score = self.turret_score_target(self,e_enemy) * self.target_select_samebias;
+    }
+
+    e = findradius(self.origin,self.target_range);
+
+    // Nothing to aim at?
+    if (!e) return world;
+
+    while (e)
+    {
+        f = turret_validate_target(self,e,self.target_select_flags);
+        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;
+    }
+
+    return e_enemy;
+}
+
+void turret_think()
+{
+    entity e;
+
+    self.nextthink = time + self.ticrate;
+
+    // ONS uses somewhat backwards linking.
+    if (teamplay)
+    {
+        if not (g_onslaught)
+            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);
+                if(e.turret_postthink)
+                    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
+
+    // Handle ammo
+    if not (self.spawnflags & TSF_NO_AMMO_REGEN)
+    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,
+    // So they can handle animation and wake up if need be.
+    if not (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");
+        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 if(self.shoot_flags & TFL_SHOOT_CUSTOM)
+    {
+        // This one is doing something.. oddball. assume its handles what needs to be handled.
+
+        // Predict?
+        if not(self.aim_flags & TFL_AIM_NO)
+            self.tur_aimpos = turret_stdproc_aim_generic();
+
+        // Turn & pitch?
+        if not(self.track_flags & TFL_TRACK_NO)
+            turret_stdproc_track();
+
+        turret_do_updates(self);
+
+        // Fire?
+        if (self.turret_firecheckfunc())
+            turret_fire();
+    }
+    else
+    {
+        // Special case for volly always. if it fired once it must compleate the volly.
+        if(self.shoot_flags & TFL_SHOOT_VOLLYALWAYS)
+            if(self.volly_counter != self.shot_volly)
+            {
+                // Predict or whatnot
+                if not(self.aim_flags & TFL_AIM_NO)
+                    self.tur_aimpos = turret_stdproc_aim_generic();
+
+                // Turn & pitch
+                if not(self.track_flags & TFL_TRACK_NO)
+                    turret_stdproc_track();
+
+                turret_do_updates(self);
+
+                // Fire!
+                if (self.turret_firecheckfunc() != 0)
+                    turret_fire();
+
+                if(self.turret_postthink)
+                    self.turret_postthink();
+
+                return;
+            }
+
+        // Check if we have a vailid enemy, and try to find one if we dont.
+        if( ((self.target_select_time + cvar("g_turrets_targetscan_maxdelay")) < time)
+          || (turret_validate_target(self,self.enemy,self.target_validate_flags) <= 0) )
+        if not (self.target_select_time + cvar("g_turrets_targetscan_mindelay") > time)
+        {
+            self.enemy = turret_select_target();
+            //if(self.enemy)
+                self.target_select_time = time;
+
+        }
+
+
+        // No target, just go to idle, do any custom stuff and bail.
+        if (self.enemy == world)
+        {
+            // Turn & pitch
+            if not(self.track_flags & TFL_TRACK_NO)
+                turret_stdproc_track();
+
+            // do any per-turret stuff
+            if(self.turret_postthink)
+                self.turret_postthink();
+
+            // And bail.
+            return;
+        }
+        else
+            self.lip = time + cvar("g_turrets_aimidle_delay"); // Keep track of the last time we had a target.
+
+        // Predict?
+        if not(self.aim_flags & TFL_AIM_NO)
+            self.tur_aimpos = turret_stdproc_aim_generic();
+
+        // Turn & pitch?
+        if not(self.track_flags & TFL_TRACK_NO)
+            turret_stdproc_track();
+
+        turret_do_updates(self);
+        // Fire?
+        if (self.turret_firecheckfunc())
+            turret_fire();
+    }
+
+    // do any per-turret stuff
+    if(self.turret_postthink)
+        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");
+}
+
+/*
+    When .used a turret switch team to activator.team.
+    If activator is world, the turrets goes inactive.
+*/
+void turret_stdproc_use()
+{
+    dprint("Turret ",self.netname, " used by ",activator.classname,"\n");
+
+    self.team = activator.team;
+
+    if(self.team == 0)
+        self.tur_active = 0;
+    else
+        self.tur_active = 1;
+
+}
+
+void turret_link()
+{
+    //Net_LinkEntity(self, FALSE, 0, Turret_SendEntity);
+    self.think      = turret_think;
+    self.nextthink  = time;
+}
+
+/*
+* Standard turret initialization. use this!
+* (unless you have a very good reason not to)
+* if the return value is 0, the turret should be removed.
+*/
+float turret_stdproc_init (string cvar_base_name, float csqc_shared)
+{
+	entity e,ee;
+
+    if(csqc_shared)
+    {
+        dprint("turrets: csqc_shared requested but not implemented. expect strange things to happen.\n");
+        csqc_shared = 0;
+    }
+
+    // Are turrets allowed atm?
+    if (cvar("g_turrets") == 0)
+        return 0;
+
+    // Better more then once then never.
+    // turret_gibs_precash();
+
+    // Terrainbase spawnflag. This puts a enlongated model
+    // under the turret, so it looks ok on uneaven surfaces.
+    if (self.spawnflags & TSF_TERRAINBASE)
+    {
+        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);
+
+    // Handle turret teams.
+    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; // Group all turrets into the same team iso they dont kill eachother.
+	else if(g_onslaught && self.targetname)
+	{
+		e = find(world,target,self.targetname);
+		if(e != world)
+		{
+			self.team = e.team;
+			ee = e;
+		}
+	}
+	else if(!self.team)
+		self.team = MAX_SHOT_DISTANCE; // Group all turrets into the same team iso they dont kill eachother.
+
+
+
+    /*
+    * 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)
+        if (!self.ticrate) self.ticrate = 0.2;     // Support units generaly dont need to have a high speed ai-loop
+    else
+        if (!self.ticrate) self.ticrate = 0.1;     // 10 fps for normal turrets
+
+    self.ticrate = bound(sys_ticrate,self.ticrate,60);  // keep it sane
+
+// General stuff
+    if (self.netname == "")
+        self.netname = self.classname;
+
+    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 * 0.5;
+    self.target_range_optimal = bound(0,self.target_range_optimal,MAX_SHOT_DISTANCE);
+
+
+// Aim stuff.
+    if (!self.aim_maxrot)
+        self.aim_maxrot = 90;
+    self.aim_maxrot = bound(0,self.aim_maxrot,360);
+
+    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_flags)
+    {
+        self.aim_flags = TFL_AIM_LEAD | TFL_AIM_SHOTTIMECOMPENSATE;
+        if(self.turrcaps_flags & TFL_TURRCAPS_RADIUSDMG)
+            self.aim_flags |= TFL_AIM_GROUND2;
+    }
+
+    // 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.5;
+
+        if (!self.track_accel_rot)
+            self.track_accel_rot   = 0.5;
+
+        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)
+    {
+            self.target_select_flags = TFL_TARGETSELECT_LOS | TFL_TARGETSELECT_TEAMCHECK
+                                     | TFL_TARGETSELECT_RANGELIMTS | TFL_TARGETSELECT_ANGLELIMITS;
+
+        if (self.turrcaps_flags & TFL_TURRCAPS_MISSILEKILL)
+            self.target_select_flags |= TFL_TARGETSELECT_MISSILES;
+
+        if (self.turrcaps_flags & TFL_TURRCAPS_PLAYERKILL)
+            self.target_select_flags |= TFL_TARGETSELECT_PLAYERS;
+        //else
+        //    self.target_select_flags = TFL_TARGETSELECT_NO;
+    }
+
+    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 * 0.5;
+    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;
+
+// Damage stuff
+    if(self.spawnflags & TSL_NO_RESPAWN)
+        if not (self.damage_flags & TFL_DMG_DEATH_NORESPAWN)
+            self.damage_flags |= TFL_DMG_DEATH_NORESPAWN;
+
+// Offsets & origins
+    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;
+    self.tur_head.owner   = self;
+
+    // Defend mode?
+    if(!self.tur_defend)
+    if (self.target != "")
+    {
+        self.tur_defend = find(world, targetname, self.target);
+        if (self.tur_defend == world)
+        {
+            self.target = "";
+            dprint("Turret has invalid defendpoint!\n");
+        }
+    }
+
+// Put pices in place
+    if not (self.turrcaps_flags & TFL_TURRCAPS_HEADATTACHED)
+        setorigin(self.tur_head,self.origin);
+
+    // In target defend mode, aim on the spot to defend when idle.
+    if(self.turrcaps_flags & TFL_TURRCAPS_HEADATTACHED)
+    {
+        if (self.tur_defend)
+            self.idle_aim  = self.tur_head.angles + angleofs(self.tur_head,self.tur_defend);
+        else
+            self.idle_aim  = '0 0 0';
+    }
+    else
+    {
+        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 not (self.turrcaps_flags & TFL_TURRCAPS_HEADATTACHED)
+        self.tur_head.angles    = self.idle_aim;
+
+    if (!self.health)
+        self.health = 150;
+
+    self.tur_health      = self.health;
+    self.tur_head.health = self.health;
+
+    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 color
+    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_score_target    = turret_stdproc_targetscore_support;
+        self.turret_firecheckfunc   = turret_stdproc_firecheck;
+        self.turret_firefunc        = turret_stdproc_fire;
+        //self.turret_postthink       = turret_stdproc_nothing;
+        self.event_damage           = turret_stdproc_damage;
+        self.tur_head.event_damage  = turret_stdproc_damage;
+    }
+    else
+    {
+        self.turret_score_target    = turret_stdproc_targetscore_generic;
+        self.turret_firecheckfunc   = turret_stdproc_firecheck;
+        self.turret_firefunc        = turret_stdproc_fire;
+        //self.turret_postthink       = turret_stdproc_nothing;
+        self.event_damage           = turret_stdproc_damage;
+        self.tur_head.event_damage  = turret_stdproc_damage;
+        //self.turret_addtarget       = turret_stdproc_false;
+    }
+
+    self.use = turret_stdproc_use;
+    self.bot_attack = TRUE;
+
+    // Initiate the main AI loop
+    if(csqc_shared)
+        self.think     = turret_link;
+    else
+        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;
+
+    // In ONS mode, and linked to a ONS ent. need to call the use to set team.
+    if (g_onslaught && ee)
+    {
+        activator = ee;
+        self.use();
+    }
+
+    return 1;
+}
+
+


Property changes on: branches/nexuiz-2.0/data/qcsrc/server/tturrets/system/system_main.qc
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: branches/nexuiz-2.0/data/qcsrc/server/tturrets/system/system_misc.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/tturrets/system/system_misc.qc	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/qcsrc/server/tturrets/system/system_misc.qc	2009-07-11 14:59:28 UTC (rev 7191)
@@ -1,406 +1,408 @@
-//--// Some support routines //--//
-
-#define anglemodss(a) (a - floor(a / 360) * 360)
-float(float v) anglemods =
-{
-	v = v - 360 * floor(v / 360);
-	return v;
-};
-float safeangle(float a)
-{
-    if((a > -361) && (a < 361))
-        return a;
-
-    a -= (360 * floor(a / 360));
-
-    return a;
-}
-
-float shortangle_f(float ang1,float ang2)
-{
-    if(ang1 > ang2)
-    {
-        if(ang1 > 180)
-            return ang1 - 360;
-    }
-    else
-    {
-        if(ang1 < -180)
-            return ang1 + 360;
-    }
-
-    return ang1;
-}
-
-vector shortangle_v(vector ang1,vector ang2)
-{
-    vector vtmp;
-
-    vtmp_x = shortangle_f(ang1_x,ang2_x);
-    vtmp_y = shortangle_f(ang1_y,ang2_y);
-    vtmp_z = shortangle_f(ang1_z,ang2_z);
-
-    return vtmp;
-}
-
-vector shortangle_vxy(vector ang1,vector ang2)
-{
-    vector vtmp;
-
-    vtmp_x = shortangle_f(ang1_x,ang2_x);
-    vtmp_y = shortangle_f(ang1_y,ang2_y);
-
-    return vtmp;
-}
-
-// 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 precache is done.
-void g_turrets_common_precash()
-{
-    precache_model ("models/turrets/c512.md3");
-    precache_model ("models/marker.md3");
-}
-
-void SUB_Remove();
-void marker_think()
-{
-    if(self.cnt)
-    if(self.cnt < time)
-    {
-        self.think = SUB_Remove;
-        self.nextthink = time;
-        return;
-    }
-
-    self.frame += 1;
-    if(self.frame > 29)
-        self.frame = 0;
-
-    self.nextthink = time;
-}
-
-void mark_error(vector where,float lifetime)
-{
-    entity err;
-
-    err = spawn();
-    err.classname = "error_marker";
-    setmodel(err,"models/marker.md3");
-    setorigin(err,where);
-    err.movetype = MOVETYPE_NONE;
-    err.think = marker_think;
-    err.nextthink = time;
-    err.skin = 0;
-    if(lifetime)
-        err.cnt = lifetime + time;
-}
-
-void mark_info(vector where,float lifetime)
-{
-    entity err;
-
-    err = spawn();
-    err.classname = "info_marker";
-    setmodel(err,"models/marker.md3");
-    setorigin(err,where);
-    err.movetype = MOVETYPE_NONE;
-    err.think = marker_think;
-    err.nextthink = time;
-    err.skin = 1;
-    if(lifetime)
-        err.cnt = lifetime + time;
-}
-
-entity mark_misc(vector where,float lifetime)
-{
-    entity err;
-
-    err = spawn();
-    err.classname = "mark_misc";
-    setmodel(err,"models/marker.md3");
-    setorigin(err,where);
-    err.movetype = MOVETYPE_NONE;
-    err.think = marker_think;
-    err.nextthink = time;
-    err.skin = 3;
-    if(lifetime)
-        err.cnt = lifetime + time;
-    return err;
-}
-
-/*
-* 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;
-}
-
-vector angleofs3(vector from,vector from_a, entity to)
-{
-    vector v_res;
-
-    // makevectors(from.angles);
-    v_res = normalize(to.origin - from);
-    v_res = vectoangles(v_res);
-    v_res = v_res - from_a;
-
-    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;
-}
-
-float turret_tag_setup()
-{
-    if(!self.tur_head)
-    {
-        dprint("Call to turret_tag_setup with self.tur_head missing!\n");
-        self.tur_shotorg = '0 0 0';
-        return 0;
-    }
-
-    setorigin(self.tur_head,gettaginfo(self,gettagindex(self,"tag_head")));
-    self.tur_shotorg = gettaginfo(self.tur_head,gettagindex(self.tur_head,"tag_fire"));
-
-    v_forward = normalize(v_forward);
-
-    return 1;
-}
-
-float turret_tag_fire_update()
-{
-    if(!self.tur_head)
-    {
-        dprint("Call to turret_tag_fire_update with self.tur_head missing!\n");
-        self.tur_shotorg = '0 0 0';
-        return 0;
-    }
-
-    self.tur_shotorg = gettaginfo(self.tur_head,gettagindex(self.tur_head,"tag_fire"));
-    v_forward = normalize(v_forward);
-
-    //dprint("update: tur_shotorg: ",vtos(self.tur_shotorg)," origin:", vtos(self.tur_head.origin), " angels: ", vtos(self.tur_head.angles),"\n");
-
-    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/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/terrainbase.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");
-
-#if 0
-    precache_model ("models/turrets/c512.md3");
-    precache_model ("models/pathlib/goodsquare.md3");
-    precache_model ("models/pathlib/badsquare.md3");
-    precache_model ("models/pathlib/square.md3");
-    precache_model ("models/pathlib/edge.md3");
-#endif
-}
+//--// Some support routines //--//
+
+#define anglemodss(a) (a - floor(a / 360) * 360)
+float(float v) anglemods =
+{
+	v = v - 360 * floor(v / 360);
+	return v;
+};
+float safeangle(float a)
+{
+    if((a > -361) && (a < 361))
+        return a;
+
+    a -= (360 * floor(a / 360));
+
+    return a;
+}
+
+float shortangle_f(float ang1,float ang2)
+{
+    if(ang1 > ang2)
+    {
+        if(ang1 > 180)
+            return ang1 - 360;
+    }
+    else
+    {
+        if(ang1 < -180)
+            return ang1 + 360;
+    }
+
+    return ang1;
+}
+
+vector shortangle_v(vector ang1,vector ang2)
+{
+    vector vtmp;
+
+    vtmp_x = shortangle_f(ang1_x,ang2_x);
+    vtmp_y = shortangle_f(ang1_y,ang2_y);
+    vtmp_z = shortangle_f(ang1_z,ang2_z);
+
+    return vtmp;
+}
+
+vector shortangle_vxy(vector ang1,vector ang2)
+{
+    vector vtmp;
+
+    vtmp_x = shortangle_f(ang1_x,ang2_x);
+    vtmp_y = shortangle_f(ang1_y,ang2_y);
+
+    return vtmp;
+}
+
+// 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 precache is done.
+void g_turrets_common_precash()
+{
+    precache_model ("models/turrets/c512.md3");
+    precache_model ("models/marker.md3");
+}
+
+void SUB_Remove();
+void marker_think()
+{
+    if(self.cnt)
+    if(self.cnt < time)
+    {
+        self.think = SUB_Remove;
+        self.nextthink = time;
+        return;
+    }
+
+    self.frame += 1;
+    if(self.frame > 29)
+        self.frame = 0;
+
+    self.nextthink = time;
+}
+
+void mark_error(vector where,float lifetime)
+{
+    entity err;
+
+    err = spawn();
+    err.classname = "error_marker";
+    setmodel(err,"models/marker.md3");
+    setorigin(err,where);
+    err.movetype = MOVETYPE_NONE;
+    err.think = marker_think;
+    err.nextthink = time;
+    err.skin = 0;
+    if(lifetime)
+        err.cnt = lifetime + time;
+}
+
+void mark_info(vector where,float lifetime)
+{
+    entity err;
+
+    err = spawn();
+    err.classname = "info_marker";
+    setmodel(err,"models/marker.md3");
+    setorigin(err,where);
+    err.movetype = MOVETYPE_NONE;
+    err.think = marker_think;
+    err.nextthink = time;
+    err.skin = 1;
+    if(lifetime)
+        err.cnt = lifetime + time;
+}
+
+entity mark_misc(vector where,float lifetime)
+{
+    entity err;
+
+    err = spawn();
+    err.classname = "mark_misc";
+    setmodel(err,"models/marker.md3");
+    setorigin(err,where);
+    err.movetype = MOVETYPE_NONE;
+    err.think = marker_think;
+    err.nextthink = time;
+    err.skin = 3;
+    if(lifetime)
+        err.cnt = lifetime + time;
+    return err;
+}
+
+/*
+* 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;
+}
+
+vector angleofs3(vector from,vector from_a, entity to)
+{
+    vector v_res;
+
+    // makevectors(from.angles);
+    v_res = normalize(to.origin - from);
+    v_res = vectoangles(v_res);
+    v_res = v_res - from_a;
+
+    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;
+}
+
+float turret_tag_setup()
+{
+    if(!self.tur_head)
+    {
+        dprint("Call to turret_tag_setup with self.tur_head missing!\n");
+        self.tur_shotorg = '0 0 0';
+        return 0;
+    }
+
+    setorigin(self.tur_head,gettaginfo(self,gettagindex(self,"tag_head")));
+    self.tur_shotorg = gettaginfo(self.tur_head,gettagindex(self.tur_head,"tag_fire"));
+
+    v_forward = normalize(v_forward);
+
+    return 1;
+}
+
+float turret_tag_fire_update()
+{
+    if(!self.tur_head)
+    {
+        dprint("Call to turret_tag_fire_update with self.tur_head missing!\n");
+        self.tur_shotorg = '0 0 0';
+        return 0;
+    }
+
+    self.tur_shotorg = gettaginfo(self.tur_head,gettagindex(self.tur_head,"tag_fire"));
+    v_forward = normalize(v_forward);
+
+    //dprint("update: tur_shotorg: ",vtos(self.tur_shotorg)," origin:", vtos(self.tur_head.origin), " angels: ", vtos(self.tur_head.angles),"\n");
+
+    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_precache_debug_models()
+{
+    precache_model ("models/turrets/c512.md3");
+    precache_model ("models/pathlib/goodsquare.md3");
+    precache_model ("models/pathlib/badsquare.md3");
+    precache_model ("models/pathlib/square.md3");
+    precache_model ("models/pathlib/edge.md3");
+}
+
+void turrets_precash()
+{
+    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/terrainbase.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");
+	//turrets_precache_debug_models();
+}


Property changes on: branches/nexuiz-2.0/data/qcsrc/server/tturrets/system/system_misc.qc
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: branches/nexuiz-2.0/data/qcsrc/server/tturrets/system/system_scoreprocs.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/tturrets/system/system_scoreprocs.qc	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/qcsrc/server/tturrets/system/system_scoreprocs.qc	2009-07-11 14:59:28 UTC (rev 7191)
@@ -1,166 +1,166 @@
-/*
-.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 a_score;      // Angular score
-    float m_score;      // missile score
-    float p_score;      // player score
-    //float da_score;   // Distance from aimpoint 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);
-    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) +
-            (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 < vlen(e_turret.tur_shotorg - real_origin(e_target)))
-    {
-        dprint("Wtf?\n");
-        score *= 0.001;
-    }
-
-#ifdef TURRET_DEBUG
-    string sd,sa,sm,sp,ss;
-    string sdt,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("^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);
-}
-*/
+/*
+.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 a_score;      // Angular score
+    float m_score;      // missile score
+    float p_score;      // player score
+    //float da_score;   // Distance from aimpoint 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);
+    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) +
+            (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 < vlen(e_turret.tur_shotorg - real_origin(e_target)))
+    {
+        dprint("Wtf?\n");
+        score *= 0.001;
+    }
+
+#ifdef TURRET_DEBUG
+    string sd,sa,sm,sp,ss;
+    string sdt,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("^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);
+}
+*/


Property changes on: branches/nexuiz-2.0/data/qcsrc/server/tturrets/system/system_scoreprocs.qc
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_checkpoint.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_checkpoint.qc	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_checkpoint.qc	2009-07-11 14:59:28 UTC (rev 7191)
@@ -1,70 +1,70 @@
-/**
-    turret_checkpoint
-**/
-
-
-#define checkpoint_target goalstack03
-
-/*
-#define checkpoint_cache_who  flagcarried
-#define checkpoint_cache_from lastrocket
-#define checkpoint_cache_to   selected_player
-*/
-
-#define pathgoal    goalstack01
-#define pathcurrent goalstack02
-
-/*
-entity path_makeorcache(entity forwho,entity start, entity end)
-{
-    entity oldself;
-    entity pth;
-    oldself = self;
-    self = forwho;
-
-    //pth = pathlib_makepath(start.origin,end.origin,PFL_GROUNDSNAP,500,1.5,PT_QUICKSTAR);
-
-    self = oldself;
-    return pth;
-}
-*/
-
-void turret_checkpoint_use()
-{
-}
-
-/*QUAKED turret_checkpoint (1 0 1) (-32 -32 -32) (32 32 32)
------------KEYS------------
-target: .targetname of next waypoint in chain.
-wait:   Pause at this point # seconds.
------------SPAWNFLAGS-----------
----------NOTES----------
-If a loop is of targets are formed, any unit entering this loop will patrol it indefinitly.
-If the checkpoint chain in not looped, the unit will go "Roaming" when the last point is reached.
-*/
-void turret_checkpoint_init()
-{
-    traceline(self.origin, self.origin - '0 0 1024', MOVE_WORLDONLY, self);
-    setorigin(self,trace_endpos + '0 0 8');
-
-    if(self.target != "")
-    {
-        self.enemy = find(world,targetname,self.target);
-        if(self.enemy == world)
-            dprint("A turret_checkpoint faild to find its target!\n");
-    }
-}
-
-void spawnfunc_turret_checkpoint()
-{
-    setorigin(self,self.origin);
-    self.think = turret_checkpoint_init;
-    self.nextthink = time + 0.1;
-}
-
-// Compat.
-void spawnfunc_walker_checkpoint()
-{
-    self.classname = "turret_checkpoint";
-    spawnfunc_turret_checkpoint();
-}
+/**
+    turret_checkpoint
+**/
+
+
+#define checkpoint_target goalstack03
+
+/*
+#define checkpoint_cache_who  flagcarried
+#define checkpoint_cache_from lastrocket
+#define checkpoint_cache_to   selected_player
+*/
+
+#define pathgoal    goalstack01
+#define pathcurrent goalstack02
+
+/*
+entity path_makeorcache(entity forwho,entity start, entity end)
+{
+    entity oldself;
+    entity pth;
+    oldself = self;
+    self = forwho;
+
+    //pth = pathlib_makepath(start.origin,end.origin,PFL_GROUNDSNAP,500,1.5,PT_QUICKSTAR);
+
+    self = oldself;
+    return pth;
+}
+*/
+
+void turret_checkpoint_use()
+{
+}
+
+/*QUAKED turret_checkpoint (1 0 1) (-32 -32 -32) (32 32 32)
+-----------KEYS------------
+target: .targetname of next waypoint in chain.
+wait:   Pause at this point # seconds.
+-----------SPAWNFLAGS-----------
+---------NOTES----------
+If a loop is of targets are formed, any unit entering this loop will patrol it indefinitly.
+If the checkpoint chain in not looped, the unit will go "Roaming" when the last point is reached.
+*/
+void turret_checkpoint_init()
+{
+    traceline(self.origin, self.origin - '0 0 1024', MOVE_WORLDONLY, self);
+    setorigin(self,trace_endpos + '0 0 8');
+
+    if(self.target != "")
+    {
+        self.enemy = find(world,targetname,self.target);
+        if(self.enemy == world)
+            dprint("A turret_checkpoint faild to find its target!\n");
+    }
+}
+
+void spawnfunc_turret_checkpoint()
+{
+    setorigin(self,self.origin);
+    self.think = turret_checkpoint_init;
+    self.nextthink = time + 0.1;
+}
+
+// Compat.
+void spawnfunc_walker_checkpoint()
+{
+    self.classname = "turret_checkpoint";
+    spawnfunc_turret_checkpoint();
+}


Property changes on: branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_checkpoint.qc
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_common.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_common.qc	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_common.qc	2009-07-11 14:59:28 UTC (rev 7191)
@@ -1 +1 @@
-
+


Property changes on: branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_common.qc
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_ewheel.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_ewheel.qc	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_ewheel.qc	2009-07-11 14:59:28 UTC (rev 7191)
@@ -1,520 +1,520 @@
-void turret_ewheel_projectile_explode()
-{
-    vector org2;
-
-    org2 = findbetterlocation (self.origin, 8);
-    pointparticles(particleeffectnum("laser_impact"), org2, trace_plane_normal * 1000, 1);
-    //w_deathtypestring = "saw the eweel. to late.";
-#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", VOL_BASE, ATTN_NORM);
-
-    remove (self);
-}
-
-
-void ewheel_attack()
-{
-    entity proj;
-    float i;
-
-    for (i=0;i<1;++i)
-    {
-        turret_do_updates(self);
-
-        sound (self, CHAN_WEAPON, "weapons/lasergun_fire.wav", VOL_BASE, ATTN_NORM);
-        pointparticles(particleeffectnum("laser_muzzleflash"), self.tur_shotorg, self.tur_shotdir_updated * 1000, 1);
-
-        proj                    = spawn ();
-        setorigin(proj, self.tur_shotorg);
-        //setsize(proj, '-0.5 -0.5 -0.5', '0.5 0.5 0.5');
-        //setmodel(proj, "models/laser.mdl"); // precision set above
-        proj.classname       = "ewheel bolt";
-        proj.owner           = self;
-        proj.bot_dodge       = FALSE;
-        proj.bot_dodgerating = self.shot_dmg;
-        proj.think           = turret_ewheel_projectile_explode;
-        proj.nextthink       = time + 9;
-        proj.solid           = SOLID_BBOX;
-        proj.movetype        = MOVETYPE_FLYMISSILE;
-        proj.velocity        = normalize(self.tur_shotdir_updated + randomvec() * self.shot_spread) * self.shot_speed;
-        proj.angles          = vectoangles(proj.velocity);
-        proj.touch           = turret_ewheel_projectile_explode;
-        //proj.effects         = EF_LOWPRECISION |  EF_BRIGHTFIELD;
-        proj.enemy           = self.enemy;
-        proj.flags           = FL_PROJECTILE | FL_NOTARGET;
-
-        CSQCProjectile(proj, TRUE, PROJECTILE_LASER, TRUE);
-
-        self.tur_head.frame += 2;
-
-        if (self.tur_head.frame > 3)
-            self.tur_head.frame = 0;
-    }
-
-}
-
-float ewheel_moveverb_roam(float eval)
-{
-    switch (eval)
-    {
-    case VCM_EVAL:
-
-        if (!self.enemy)
-            return verb.verb_static_value;
-
-        return VS_CALL_NO;
-
-    case VCM_DO:
-        self.angles_z = 0;
-        makevectors(self.angles);
-        self.moveto = v_forward * 128;
-        self.steerto = steerlib_beamsteer(v_forward,1024,32,36,128);
-        self.frame += 1;
-        movelib_move_simple(v_forward,cvar("g_turrets_unit_ewheel_speed_fast"),0.4);
-
-        return VS_CALL_YES_DOING;
-
-    case VCM_REMOVE:
-
-    }
-
-    return VS_CALL_YES_DONE;
-}
-
-float ewheel_moveverb_path(float eval)
-{
-    switch (eval)
-    {
-    case VCM_EVAL:
-
-        if (self.pathcurrent)
-            return verb.verb_static_value;
-
-        return VS_CALL_NO;
-
-    case VCM_DO:
-        // Do we have a path?
-        if not(self.pathcurrent)
-            return VS_CALL_NO;
-        else
-        {
-            // Are we close enougth to a path node to switch to the next?
-            if (vlen(self.origin  - self.pathcurrent.origin) < 64)
-                if (self.pathcurrent.path_next == world)
-                {
-                    // Path endpoint reached
-                    pathlib_deletepath(self.pathcurrent.owner);
-                    self.pathcurrent = world;
-
-                    if (self.pathgoal)
-                    {
-                        if (self.pathgoal.use)
-                            self.pathgoal.use();
-
-                        if (self.pathgoal.enemy)
-                        {
-                            self.pathcurrent = pathlib_astar(self.pathgoal.origin,self.pathgoal.enemy.origin);
-                            self.pathgoal = self.pathgoal.enemy;
-                        }
-                    }
-                    else
-                        self.pathgoal = world;
-                }
-                else
-                    self.pathcurrent = self.pathcurrent.path_next;
-        }
-
-
-        if (self.pathcurrent)
-        {
-            switch (self.waterlevel)
-            {
-            case 0:
-            case 1:
-            case 2:
-            case 3:
-            }
-
-            self.moveto = self.pathcurrent.origin;
-            self.steerto = steerlib_attract2(self.moveto,0.5,500,0.95);
-
-            self.frame += 1;
-            movelib_move_simple(v_forward,cvar("g_turrets_unit_ewheel_speed_fast"),0.4);
-
-            return VS_CALL_YES_DOING;
-        }
-        else
-            return VS_CALL_YES_DONE;
-
-    case VCM_REMOVE:
-
-        if (self.pathcurrent)
-            pathlib_deletepath(self.pathcurrent.owner);
-
-        self.pathcurrent = world;
-
-        return VS_CALL_YES_DONE;
-    }
-
-    return VS_CALL_YES_DONE;
-}
-
-float ewheel_moveverb_enemy(float eval)
-{
-    switch (eval)
-    {
-    case VCM_EVAL:
-        if (self.enemy)
-        {
-            if (self.spawnflags & TSF_NO_PATHBREAK)
-                if (self.pathcurrent)
-                    return VS_CALL_NO;
-
-            return verb.verb_static_value;
-        }
-
-        return VS_CALL_NO;
-
-    case VCM_DO:
-
-        self.steerto = steerlib_arrive(self.enemy.origin,self.target_range_optimal);
-        self.steerto = steerlib_beamsteer(self.steerto,1024,64,68,256);
-        self.moveto  = self.origin + self.steerto * 128;
-
-        makevectors(self.angles);
-
-        if (self.tur_dist_enemy > self.target_range_optimal)
-        {
-            if ( self.tur_head.spawnshieldtime < 1 )
-            {
-                self.frame += 2;
-                movelib_move_simple(v_forward ,cvar("g_turrets_unit_ewheel_speed_fast"),0.4);
-            }
-            else if (self.tur_head.spawnshieldtime < 2)
-            {
-
-                self.frame += 1;
-                movelib_move_simple(v_forward,cvar("g_turrets_unit_ewheel_speed_slow"),0.4);
-           }
-            else
-            {
-                self.frame += 1;
-                movelib_move_simple(v_forward,cvar("g_turrets_unit_ewheel_speed_slower"),0.4);
-            }
-        }
-        else if (self.tur_dist_enemy < self.target_range_min)
-        {
-            self.frame -= 1;
-            movelib_move_simple(v_forward * -1,cvar("g_turrets_unit_ewheel_speed_slow"),0.4);
-        }
-        else
-        {
-            movelib_beak_simple(cvar("g_turrets_unit_ewheel_speed_stop"));
-        }
-
-        return VS_CALL_YES_DOING;
-    }
-
-
-    return VS_CALL_YES_DONE;
-}
-
-float ewheel_moveverb_runaway(float eval)
-{
-    switch (eval)
-    {
-    case VCM_EVAL:
-        if (self.spawnflags & TSF_NO_PATHBREAK)
-            if (self.pathcurrent)
-                return VS_CALL_NO;
-
-        if (self.enemy)
-            if (self.health < 50)
-                return verb.verb_static_value;
-
-        return VS_CALL_NO;
-
-    case VCM_DO:
-        self.steerto = (steerlib_push(self.enemy.origin) * 0.7) + (steerlib_traceavoid_flat(0.3, 500, '0 0 128') * 0.3);
-        self.moveto  = self.origin + self.steerto * 1000;
-
-        self.frame += 2;
-        movelib_move_simple(v_forward ,cvar("g_turrets_unit_ewheel_speed_fast"),0.4);
-
-        return VS_CALL_YES_DOING;
-
-    }
-
-    return VS_CALL_YES_DONE;
-}
-
-float ewheel_moveverb_idle(float eval)
-{
-    switch (eval)
-    {
-    case VCM_EVAL:
-        if (self.enemy)
-            return VS_CALL_NO;
-
-        return verb.verb_static_value;
-
-    case VCM_DO:
-        self.moveto = self.origin;
-
-        if (vlen(self.velocity))
-            movelib_beak_simple(cvar("g_turrets_unit_ewheel_speed_stop"));
-
-        return VS_CALL_YES_DOING;
-    }
-
-    return VS_CALL_YES_DONE;
-}
-
-void ewheel_postthink()
-{
-    float vz;
-    vector wish_angle,real_angle;
-
-    vz = self.velocity_z;
-
-    self.angles_x = anglemods(self.angles_x);
-    self.angles_y = anglemods(self.angles_y);
-
-    self.angles_x *= -1;
-    makevectors(self.angles);
-    self.angles_x *= -1;
-
-    wish_angle = normalize(self.steerto);
-    wish_angle = vectoangles(wish_angle);
-    real_angle = wish_angle - self.angles;
-    real_angle = shortangle_vxy(real_angle,self.tur_head.angles);
-
-    self.tur_head.spawnshieldtime = fabs(real_angle_y);
-    real_angle_y  = bound(-self.tur_head.aim_speed,real_angle_y,self.tur_head.aim_speed);
-    self.angles_y = (self.angles_y + real_angle_y);
-
-    // Simulate banking
-    self.angles_z = bound(-45,real_angle_y * -2.5,45);
-
-    verbstack_pop(self.verbs_move);
-
-    if (self.frame > 40)
-        self.frame = 1;
-
-    if (self.frame < 1)
-        self.frame = 40;
-
-
-    self.velocity_z = vz;
-}
-
-void ewheel_respawnhook()
-{
-    entity e;
-
-    setorigin(self,self.pos1);
-
-    if (self.target != "")
-    {
-        e = find(world,targetname,self.target);
-        if (!e)
-        {
-            dprint("Initital waypoint for ewheel does NOT exsist, fix your map!\n");
-            self.target = "";
-        }
-
-        if (e.classname != "turret_checkpoint")
-            dprint("Warning: not a turrret path\n");
-        else
-        {
-            self.pathcurrent = WALKER_PATH(self.origin,e.origin);
-            self.pathgoal = e;
-        }
-    }
-}
-
-void ewheel_diehook()
-{
-    turret_trowgib2(self.origin,self.velocity + v_up * 400,'-0.6 -0.2 -02',self,time + random() * 2 +3);
-
-    if (self.pathcurrent)
-        pathlib_deletepath(self.pathcurrent.owner);
-
-    self.pathcurrent = world;
-
-    if (self.damage_flags & TFL_DMG_DEATH_NORESPAWN)
-    {
-        verbstack_flush(self.verbs_move);
-        remove(self.verbs_move);
-    }
-
-}
-
-/*
-float test_stack_1(float eval)
-{
-    switch (eval)
-    {
-    case VCM_EVAL:
-        return verb.verb_static_value;
-
-    case VCM_DO:
-        dprint("test_stack_1\n");
-        return VS_CALL_REMOVE;
-    }
-
-    return VS_CALL_REMOVE;
-}
-
-float test_stack_2(float eval)
-{
-    switch (eval)
-    {
-    case VCM_EVAL:
-        return verb.verb_static_value;
-
-    case VCM_DO:
-        dprint("test_stack_2\n");
-        return VS_CALL_REMOVE;
-    }
-
-    return VS_CALL_REMOVE;
-}
-
-float ccnntt;
-float test_stack_3(float eval)
-{
-    switch (eval)
-    {
-    case VCM_EVAL:
-        return verb.verb_static_value;
-
-    case VCM_DO:
-        dprint("test_stack_3\n");
-        ++ccnntt;
-        if(ccnntt > 3)
-            return VS_CALL_REMOVE;
-        else
-            return VS_CALL_YES_DONE;
-    }
-
-    return VS_CALL_YES_DONE;
-}
-
-.entity test_stack;
-*/
-void turret_ewheel_dinit()
-{
-    entity e;
-
-    if (self.netname == "")      self.netname     = "eWheel Turret";
-
-    if (self.target != "")
-    {
-        e = find(world,targetname,self.target);
-        if (!e)
-        {
-            bprint("Warning! initital waypoint for ewheel does NOT exsist!\n");
-            self.target = "";
-        }
-
-        if (e.classname != "turret_checkpoint")
-            dprint("Warning: not a turrret path\n");
-        else
-            self.goalcurrent = e;
-    }
-
-    self.ammo_flags = TFL_AMMO_ENERGY | TFL_AMMO_RECHARGE | TFL_AMMO_RECIVE;
-    self.turrcaps_flags = TFL_TURRCAPS_PLAYERKILL | TFL_TURRCAPS_MOVE | TFL_TURRCAPS_ROAM | TFL_TURRCAPS_HEADATTACHED;
-    //self.aim_flags = TFL_AIM_SIMPLE;// TFL_AIM_LEAD | TFL_AIM_ZEASE;
-
-    self.turret_respawnhook = ewheel_respawnhook;
-    self.turret_diehook = ewheel_diehook;
-
-    if (turret_stdproc_init("ewheel_std",0) == 0)
-    {
-        remove(self);
-        return;
-    }
-
-    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.damage_flags          |= TFL_DMG_DEATH_NOGIBS;
-
-    self.iscreature = TRUE;
-    self.movetype   = MOVETYPE_WALK;
-    self.solid      = SOLID_SLIDEBOX;
-    self.takedamage = DAMAGE_AIM;
-
-    setmodel(self,"models/turrets/ewheel-base.md3");
-    setmodel(self.tur_head,"models/turrets/ewheel-gun1.md3");
-    setattachment(self.tur_head,self,"tag_head");
-
-    self.pos1 = self.origin;
-
-    self.idle_aim = '0 0 0';
-
-    // Our fire routine
-    self.turret_firefunc  = ewheel_attack;
-    self.turret_postthink = ewheel_postthink;
-    self.tur_head.frame = 1;
-
-    self.verbs_move = spawn();
-
-    //verbstack_push(self.verbs_move, ewheel_moveverb_roam,   WVM_IDLE,  0, self);
-    verbstack_push(self.verbs_move, ewheel_moveverb_idle,   WVM_IDLE,  0, self);
-    verbstack_push(self.verbs_move, ewheel_moveverb_enemy,  WVM_ENEMY, 0, self);
-    verbstack_push(self.verbs_move, ewheel_moveverb_path,   WVM_PATH,  0, self);
-    //verbstack_push(self.verbs_move, ewheel_moveverb_runaway,WVM_PANIC,  0, self);
-
-    /*
-    self.test_stack = spawn();
-    verbstack_push(self.test_stack, test_stack_1,1,  0, self);
-    verbstack_push(self.test_stack, test_stack_2,2,  0, self);
-    verbstack_push(self.test_stack, test_stack_3,100,0, self);
-    while(verbstack_popfifo(self.test_stack) != 0)
-    */
-
-
-
-    // Convert from dgr / sec to dgr / tic
-    self.tur_head.aim_speed = cvar("g_turrets_unit_ewheel_turnrate");
-    self.tur_head.aim_speed = self.tur_head.aim_speed / (1 / self.ticrate);
-
-    if (self.target != "")
-    {
-        e = find(world,targetname,self.target);
-        if (!e)
-        {
-            dprint("Initital waypoint for ewheel does NOT exsist, fix your map!\n");
-            self.target = "";
-        }
-
-        if (e.classname != "turret_checkpoint")
-            dprint("Warning: not a turrret path\n");
-        else
-        {
-            self.pathcurrent = WALKER_PATH(self.origin,e.origin);
-            self.pathgoal = e;
-        }
-    }
-}
-
-void spawnfunc_turret_ewheel()
-{
-    g_turrets_common_precash();
-
-    precache_model ("models/turrets/ewheel-base.md3");
-    precache_model ("models/turrets/ewheel-gun1.md3");
-
-    self.think = turret_ewheel_dinit;
-    self.nextthink = time + 0.5;
-}
+void turret_ewheel_projectile_explode()
+{
+    vector org2;
+
+    org2 = findbetterlocation (self.origin, 8);
+    pointparticles(particleeffectnum("laser_impact"), org2, trace_plane_normal * 1000, 1);
+    //w_deathtypestring = "saw the eweel. to late.";
+#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", VOL_BASE, ATTN_NORM);
+
+    remove (self);
+}
+
+
+void ewheel_attack()
+{
+    entity proj;
+    float i;
+
+    for (i=0;i<1;++i)
+    {
+        turret_do_updates(self);
+
+        sound (self, CHAN_WEAPON, "weapons/lasergun_fire.wav", VOL_BASE, ATTN_NORM);
+        pointparticles(particleeffectnum("laser_muzzleflash"), self.tur_shotorg, self.tur_shotdir_updated * 1000, 1);
+
+        proj                    = spawn ();
+        setorigin(proj, self.tur_shotorg);
+        //setsize(proj, '-0.5 -0.5 -0.5', '0.5 0.5 0.5');
+        //setmodel(proj, "models/laser.mdl"); // precision set above
+        proj.classname       = "ewheel bolt";
+        proj.owner           = self;
+        proj.bot_dodge       = FALSE;
+        proj.bot_dodgerating = self.shot_dmg;
+        proj.think           = turret_ewheel_projectile_explode;
+        proj.nextthink       = time + 9;
+        proj.solid           = SOLID_BBOX;
+        proj.movetype        = MOVETYPE_FLYMISSILE;
+        proj.velocity        = normalize(self.tur_shotdir_updated + randomvec() * self.shot_spread) * self.shot_speed;
+        proj.angles          = vectoangles(proj.velocity);
+        proj.touch           = turret_ewheel_projectile_explode;
+        //proj.effects         = EF_LOWPRECISION |  EF_BRIGHTFIELD;
+        proj.enemy           = self.enemy;
+        proj.flags           = FL_PROJECTILE | FL_NOTARGET;
+
+        CSQCProjectile(proj, TRUE, PROJECTILE_LASER, TRUE);
+
+        self.tur_head.frame += 2;
+
+        if (self.tur_head.frame > 3)
+            self.tur_head.frame = 0;
+    }
+
+}
+
+float ewheel_moveverb_roam(float eval)
+{
+    switch (eval)
+    {
+    case VCM_EVAL:
+
+        if (!self.enemy)
+            return verb.verb_static_value;
+
+        return VS_CALL_NO;
+
+    case VCM_DO:
+        self.angles_z = 0;
+        makevectors(self.angles);
+        self.moveto = v_forward * 128;
+        self.steerto = steerlib_beamsteer(v_forward,1024,32,36,128);
+        self.frame += 1;
+        movelib_move_simple(v_forward,cvar("g_turrets_unit_ewheel_speed_fast"),0.4);
+
+        return VS_CALL_YES_DOING;
+
+    case VCM_REMOVE:
+
+    }
+
+    return VS_CALL_YES_DONE;
+}
+
+float ewheel_moveverb_path(float eval)
+{
+    switch (eval)
+    {
+    case VCM_EVAL:
+
+        if (self.pathcurrent)
+            return verb.verb_static_value;
+
+        return VS_CALL_NO;
+
+    case VCM_DO:
+        // Do we have a path?
+        if not(self.pathcurrent)
+            return VS_CALL_NO;
+        else
+        {
+            // Are we close enougth to a path node to switch to the next?
+            if (vlen(self.origin  - self.pathcurrent.origin) < 64)
+                if (self.pathcurrent.path_next == world)
+                {
+                    // Path endpoint reached
+                    pathlib_deletepath(self.pathcurrent.owner);
+                    self.pathcurrent = world;
+
+                    if (self.pathgoal)
+                    {
+                        if (self.pathgoal.use)
+                            self.pathgoal.use();
+
+                        if (self.pathgoal.enemy)
+                        {
+                            self.pathcurrent = pathlib_astar(self.pathgoal.origin,self.pathgoal.enemy.origin);
+                            self.pathgoal = self.pathgoal.enemy;
+                        }
+                    }
+                    else
+                        self.pathgoal = world;
+                }
+                else
+                    self.pathcurrent = self.pathcurrent.path_next;
+        }
+
+
+        if (self.pathcurrent)
+        {
+            switch (self.waterlevel)
+            {
+            case 0:
+            case 1:
+            case 2:
+            case 3:
+            }
+
+            self.moveto = self.pathcurrent.origin;
+            self.steerto = steerlib_attract2(self.moveto,0.5,500,0.95);
+
+            self.frame += 1;
+            movelib_move_simple(v_forward,cvar("g_turrets_unit_ewheel_speed_fast"),0.4);
+
+            return VS_CALL_YES_DOING;
+        }
+        else
+            return VS_CALL_YES_DONE;
+
+    case VCM_REMOVE:
+
+        if (self.pathcurrent)
+            pathlib_deletepath(self.pathcurrent.owner);
+
+        self.pathcurrent = world;
+
+        return VS_CALL_YES_DONE;
+    }
+
+    return VS_CALL_YES_DONE;
+}
+
+float ewheel_moveverb_enemy(float eval)
+{
+    switch (eval)
+    {
+    case VCM_EVAL:
+        if (self.enemy)
+        {
+            if (self.spawnflags & TSF_NO_PATHBREAK)
+                if (self.pathcurrent)
+                    return VS_CALL_NO;
+
+            return verb.verb_static_value;
+        }
+
+        return VS_CALL_NO;
+
+    case VCM_DO:
+
+        self.steerto = steerlib_arrive(self.enemy.origin,self.target_range_optimal);
+        self.steerto = steerlib_beamsteer(self.steerto,1024,64,68,256);
+        self.moveto  = self.origin + self.steerto * 128;
+
+        makevectors(self.angles);
+
+        if (self.tur_dist_enemy > self.target_range_optimal)
+        {
+            if ( self.tur_head.spawnshieldtime < 1 )
+            {
+                self.frame += 2;
+                movelib_move_simple(v_forward ,cvar("g_turrets_unit_ewheel_speed_fast"),0.4);
+            }
+            else if (self.tur_head.spawnshieldtime < 2)
+            {
+
+                self.frame += 1;
+                movelib_move_simple(v_forward,cvar("g_turrets_unit_ewheel_speed_slow"),0.4);
+           }
+            else
+            {
+                self.frame += 1;
+                movelib_move_simple(v_forward,cvar("g_turrets_unit_ewheel_speed_slower"),0.4);
+            }
+        }
+        else if (self.tur_dist_enemy < self.target_range_min)
+        {
+            self.frame -= 1;
+            movelib_move_simple(v_forward * -1,cvar("g_turrets_unit_ewheel_speed_slow"),0.4);
+        }
+        else
+        {
+            movelib_beak_simple(cvar("g_turrets_unit_ewheel_speed_stop"));
+        }
+
+        return VS_CALL_YES_DOING;
+    }
+
+
+    return VS_CALL_YES_DONE;
+}
+
+float ewheel_moveverb_runaway(float eval)
+{
+    switch (eval)
+    {
+    case VCM_EVAL:
+        if (self.spawnflags & TSF_NO_PATHBREAK)
+            if (self.pathcurrent)
+                return VS_CALL_NO;
+
+        if (self.enemy)
+            if (self.health < 50)
+                return verb.verb_static_value;
+
+        return VS_CALL_NO;
+
+    case VCM_DO:
+        self.steerto = (steerlib_push(self.enemy.origin) * 0.7) + (steerlib_traceavoid_flat(0.3, 500, '0 0 128') * 0.3);
+        self.moveto  = self.origin + self.steerto * 1000;
+
+        self.frame += 2;
+        movelib_move_simple(v_forward ,cvar("g_turrets_unit_ewheel_speed_fast"),0.4);
+
+        return VS_CALL_YES_DOING;
+
+    }
+
+    return VS_CALL_YES_DONE;
+}
+
+float ewheel_moveverb_idle(float eval)
+{
+    switch (eval)
+    {
+    case VCM_EVAL:
+        if (self.enemy)
+            return VS_CALL_NO;
+
+        return verb.verb_static_value;
+
+    case VCM_DO:
+        self.moveto = self.origin;
+
+        if (vlen(self.velocity))
+            movelib_beak_simple(cvar("g_turrets_unit_ewheel_speed_stop"));
+
+        return VS_CALL_YES_DOING;
+    }
+
+    return VS_CALL_YES_DONE;
+}
+
+void ewheel_postthink()
+{
+    float vz;
+    vector wish_angle,real_angle;
+
+    vz = self.velocity_z;
+
+    self.angles_x = anglemods(self.angles_x);
+    self.angles_y = anglemods(self.angles_y);
+
+    self.angles_x *= -1;
+    makevectors(self.angles);
+    self.angles_x *= -1;
+
+    wish_angle = normalize(self.steerto);
+    wish_angle = vectoangles(wish_angle);
+    real_angle = wish_angle - self.angles;
+    real_angle = shortangle_vxy(real_angle,self.tur_head.angles);
+
+    self.tur_head.spawnshieldtime = fabs(real_angle_y);
+    real_angle_y  = bound(-self.tur_head.aim_speed,real_angle_y,self.tur_head.aim_speed);
+    self.angles_y = (self.angles_y + real_angle_y);
+
+    // Simulate banking
+    self.angles_z = bound(-45,real_angle_y * -2.5,45);
+
+    verbstack_pop(self.verbs_move);
+
+    if (self.frame > 40)
+        self.frame = 1;
+
+    if (self.frame < 1)
+        self.frame = 40;
+
+
+    self.velocity_z = vz;
+}
+
+void ewheel_respawnhook()
+{
+    entity e;
+
+    setorigin(self,self.pos1);
+
+    if (self.target != "")
+    {
+        e = find(world,targetname,self.target);
+        if (!e)
+        {
+            dprint("Initital waypoint for ewheel does NOT exsist, fix your map!\n");
+            self.target = "";
+        }
+
+        if (e.classname != "turret_checkpoint")
+            dprint("Warning: not a turrret path\n");
+        else
+        {
+            self.pathcurrent = WALKER_PATH(self.origin,e.origin);
+            self.pathgoal = e;
+        }
+    }
+}
+
+void ewheel_diehook()
+{
+    turret_trowgib2(self.origin,self.velocity + v_up * 400,'-0.6 -0.2 -02',self,time + random() * 2 +3);
+
+    if (self.pathcurrent)
+        pathlib_deletepath(self.pathcurrent.owner);
+
+    self.pathcurrent = world;
+
+    if (self.damage_flags & TFL_DMG_DEATH_NORESPAWN)
+    {
+        verbstack_flush(self.verbs_move);
+        remove(self.verbs_move);
+    }
+
+}
+
+/*
+float test_stack_1(float eval)
+{
+    switch (eval)
+    {
+    case VCM_EVAL:
+        return verb.verb_static_value;
+
+    case VCM_DO:
+        dprint("test_stack_1\n");
+        return VS_CALL_REMOVE;
+    }
+
+    return VS_CALL_REMOVE;
+}
+
+float test_stack_2(float eval)
+{
+    switch (eval)
+    {
+    case VCM_EVAL:
+        return verb.verb_static_value;
+
+    case VCM_DO:
+        dprint("test_stack_2\n");
+        return VS_CALL_REMOVE;
+    }
+
+    return VS_CALL_REMOVE;
+}
+
+float ccnntt;
+float test_stack_3(float eval)
+{
+    switch (eval)
+    {
+    case VCM_EVAL:
+        return verb.verb_static_value;
+
+    case VCM_DO:
+        dprint("test_stack_3\n");
+        ++ccnntt;
+        if(ccnntt > 3)
+            return VS_CALL_REMOVE;
+        else
+            return VS_CALL_YES_DONE;
+    }
+
+    return VS_CALL_YES_DONE;
+}
+
+.entity test_stack;
+*/
+void turret_ewheel_dinit()
+{
+    entity e;
+
+    if (self.netname == "")      self.netname     = "eWheel Turret";
+
+    if (self.target != "")
+    {
+        e = find(world,targetname,self.target);
+        if (!e)
+        {
+            bprint("Warning! initital waypoint for ewheel does NOT exsist!\n");
+            self.target = "";
+        }
+
+        if (e.classname != "turret_checkpoint")
+            dprint("Warning: not a turrret path\n");
+        else
+            self.goalcurrent = e;
+    }
+
+    self.ammo_flags = TFL_AMMO_ENERGY | TFL_AMMO_RECHARGE | TFL_AMMO_RECIVE;
+    self.turrcaps_flags = TFL_TURRCAPS_PLAYERKILL | TFL_TURRCAPS_MOVE | TFL_TURRCAPS_ROAM | TFL_TURRCAPS_HEADATTACHED;
+    //self.aim_flags = TFL_AIM_SIMPLE;// TFL_AIM_LEAD | TFL_AIM_ZEASE;
+
+    self.turret_respawnhook = ewheel_respawnhook;
+    self.turret_diehook = ewheel_diehook;
+
+    if (turret_stdproc_init("ewheel_std",0) == 0)
+    {
+        remove(self);
+        return;
+    }
+
+    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.damage_flags          |= TFL_DMG_DEATH_NOGIBS;
+
+    self.iscreature = TRUE;
+    self.movetype   = MOVETYPE_WALK;
+    self.solid      = SOLID_SLIDEBOX;
+    self.takedamage = DAMAGE_AIM;
+
+    setmodel(self,"models/turrets/ewheel-base.md3");
+    setmodel(self.tur_head,"models/turrets/ewheel-gun1.md3");
+    setattachment(self.tur_head,self,"tag_head");
+
+    self.pos1 = self.origin;
+
+    self.idle_aim = '0 0 0';
+
+    // Our fire routine
+    self.turret_firefunc  = ewheel_attack;
+    self.turret_postthink = ewheel_postthink;
+    self.tur_head.frame = 1;
+
+    self.verbs_move = spawn();
+
+    //verbstack_push(self.verbs_move, ewheel_moveverb_roam,   WVM_IDLE,  0, self);
+    verbstack_push(self.verbs_move, ewheel_moveverb_idle,   WVM_IDLE,  0, self);
+    verbstack_push(self.verbs_move, ewheel_moveverb_enemy,  WVM_ENEMY, 0, self);
+    verbstack_push(self.verbs_move, ewheel_moveverb_path,   WVM_PATH,  0, self);
+    //verbstack_push(self.verbs_move, ewheel_moveverb_runaway,WVM_PANIC,  0, self);
+
+    /*
+    self.test_stack = spawn();
+    verbstack_push(self.test_stack, test_stack_1,1,  0, self);
+    verbstack_push(self.test_stack, test_stack_2,2,  0, self);
+    verbstack_push(self.test_stack, test_stack_3,100,0, self);
+    while(verbstack_popfifo(self.test_stack) != 0)
+    */
+
+
+
+    // Convert from dgr / sec to dgr / tic
+    self.tur_head.aim_speed = cvar("g_turrets_unit_ewheel_turnrate");
+    self.tur_head.aim_speed = self.tur_head.aim_speed / (1 / self.ticrate);
+
+    if (self.target != "")
+    {
+        e = find(world,targetname,self.target);
+        if (!e)
+        {
+            dprint("Initital waypoint for ewheel does NOT exsist, fix your map!\n");
+            self.target = "";
+        }
+
+        if (e.classname != "turret_checkpoint")
+            dprint("Warning: not a turrret path\n");
+        else
+        {
+            self.pathcurrent = WALKER_PATH(self.origin,e.origin);
+            self.pathgoal = e;
+        }
+    }
+}
+
+void spawnfunc_turret_ewheel()
+{
+    g_turrets_common_precash();
+
+    precache_model ("models/turrets/ewheel-base.md3");
+    precache_model ("models/turrets/ewheel-gun1.md3");
+
+    self.think = turret_ewheel_dinit;
+    self.nextthink = time + 0.5;
+}


Property changes on: branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_ewheel.qc
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_flac.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_flac.qc	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_flac.qc	2009-07-11 14:59:28 UTC (rev 7191)
@@ -1,128 +1,128 @@
-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", VOL_BASE, ATTN_NORM);
-    proj = spawn ();
-    setorigin(proj, self.tur_shotorg);
-    // setmodel(proj, "models/turrets/pd_proj.md3");
-    setsize(proj, '0 0 0', '0 0 0');
-    proj.classname          = "flac_projectile";
-    proj.owner              = self;
-    proj.bot_dodge          = TRUE;
-    proj.bot_dodgerating    = self.shot_dmg;
-    proj.solid              = SOLID_BBOX;
-    proj.movetype           = MOVETYPE_FLYMISSILE;
-    proj.flags              = FL_PROJECTILE;
-    // proj.effects            = EF_LOWPRECISION;
-    proj.takedamage         = DAMAGE_NO;
-    //proj.health             =  100;
-    proj.velocity           = normalize(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_shotorg - self.enemy.origin) / self.shot_speed;
-    proj.nextthink          = time + max(self.tur_impacttime,(self.shot_radius * 3) / self.shot_speed);
-    proj.enemy              = self.enemy;
-    proj.cnt                = time + 5;
-
-    CSQCProjectile(proj, TRUE, PROJECTILE_HAGAR, TRUE);
-
-    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;
-
-    // FIXME: tur_impacttime is not accurate enougth, this is a dirty hakk to make flac work.
-
-    //w_deathtypestring = "got caught in the flack.";
-
-
-
-    if( (self.enemy != world) &&
-        (vlen(self.origin - self.enemy.origin) < self.owner.shot_radius * 3) )
-    {
-        // OMG HAXX!
-        setorigin(self,self.enemy.origin + randomvec() * self.owner.shot_radius);
-    }
-
-
-
-    te_explosion (self.origin);
-
-    ftmp = crandom();
-    if (ftmp<-0.7)
-        sound (self, CHAN_PROJECTILE, "weapons/hagexp1.wav", VOL_BASE, ATTN_NORM);
-    else if (ftmp<0.4)
-        sound (self, CHAN_PROJECTILE, "weapons/hagexp2.wav", VOL_BASE, ATTN_NORM);
-    else if (ftmp<1)
-        sound (self, CHAN_PROJECTILE, "weapons/hagexp3.wav", VOL_BASE, 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, self.owner.shot_dmg * 0.5, 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) == 0)
-    {
-        remove(self);
-        return;
-    }
-
-    self.damage_flags |= TFL_DMG_HEADSHAKE;
-    self.target_select_flags |= TFL_TARGETSELECT_NOTURRETS;
-
-    setmodel(self,"models/turrets/base.md3");
-    setmodel(self.tur_head,"models/turrets/flac.md3");
-
-    if (!turret_tag_setup())
-        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;
-}
-
+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", VOL_BASE, ATTN_NORM);
+    proj = spawn ();
+    setorigin(proj, self.tur_shotorg);
+    // setmodel(proj, "models/turrets/pd_proj.md3");
+    setsize(proj, '0 0 0', '0 0 0');
+    proj.classname          = "flac_projectile";
+    proj.owner              = self;
+    proj.bot_dodge          = TRUE;
+    proj.bot_dodgerating    = self.shot_dmg;
+    proj.solid              = SOLID_BBOX;
+    proj.movetype           = MOVETYPE_FLYMISSILE;
+    proj.flags              = FL_PROJECTILE;
+    // proj.effects            = EF_LOWPRECISION;
+    proj.takedamage         = DAMAGE_NO;
+    //proj.health             =  100;
+    proj.velocity           = normalize(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_shotorg - self.enemy.origin) / self.shot_speed;
+    proj.nextthink          = time + max(self.tur_impacttime,(self.shot_radius * 3) / self.shot_speed);
+    proj.enemy              = self.enemy;
+    proj.cnt                = time + 5;
+
+    CSQCProjectile(proj, TRUE, PROJECTILE_HAGAR, TRUE);
+
+    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;
+
+    // FIXME: tur_impacttime is not accurate enougth, this is a dirty hakk to make flac work.
+
+    //w_deathtypestring = "got caught in the flack.";
+
+
+
+    if( (self.enemy != world) &&
+        (vlen(self.origin - self.enemy.origin) < self.owner.shot_radius * 3) )
+    {
+        // OMG HAXX!
+        setorigin(self,self.enemy.origin + randomvec() * self.owner.shot_radius);
+    }
+
+
+
+    te_explosion (self.origin);
+
+    ftmp = crandom();
+    if (ftmp<-0.7)
+        sound (self, CHAN_PROJECTILE, "weapons/hagexp1.wav", VOL_BASE, ATTN_NORM);
+    else if (ftmp<0.4)
+        sound (self, CHAN_PROJECTILE, "weapons/hagexp2.wav", VOL_BASE, ATTN_NORM);
+    else if (ftmp<1)
+        sound (self, CHAN_PROJECTILE, "weapons/hagexp3.wav", VOL_BASE, 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, self.owner.shot_dmg * 0.5, 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) == 0)
+    {
+        remove(self);
+        return;
+    }
+
+    self.damage_flags |= TFL_DMG_HEADSHAKE;
+    self.target_select_flags |= TFL_TARGETSELECT_NOTURRETS;
+
+    setmodel(self,"models/turrets/base.md3");
+    setmodel(self.tur_head,"models/turrets/flac.md3");
+
+    if (!turret_tag_setup())
+        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;
+}
+


Property changes on: branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_flac.qc
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_fusionreactor.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_fusionreactor.qc	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_fusionreactor.qc	2009-07-11 14:59:28 UTC (rev 7191)
@@ -1,83 +1,83 @@
-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_aimpos > self.target_range) return 0;
-    if (self.tur_dist_aimpos < 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_respawnhook()
-{
-    self.tur_head.avelocity = '0 50 0';
-}
-
-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;
-    self.turret_respawnhook = turret_fusionreactor_respawnhook;
-    if (turret_stdproc_init("fusreac_std",0) == 0)
-    {
-        remove(self);
-        return;
-    }
-
-    setmodel(self,"models/turrets/base.md3");
-    setmodel(self.tur_head,"models/turrets/reactor.md3");
-
-    //if(!turret_tag_setup())
-    //    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;
-}
+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_aimpos > self.target_range) return 0;
+    if (self.tur_dist_aimpos < 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_respawnhook()
+{
+    self.tur_head.avelocity = '0 50 0';
+}
+
+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;
+    self.turret_respawnhook = turret_fusionreactor_respawnhook;
+    if (turret_stdproc_init("fusreac_std",0) == 0)
+    {
+        remove(self);
+        return;
+    }
+
+    setmodel(self,"models/turrets/base.md3");
+    setmodel(self.tur_head,"models/turrets/reactor.md3");
+
+    //if(!turret_tag_setup())
+    //    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;
+}


Property changes on: branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_fusionreactor.qc
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_hellion.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_hellion.qc	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_hellion.qc	2009-07-11 14:59:28 UTC (rev 7191)
@@ -1,222 +1,222 @@
-.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", VOL_BASE, ATTN_NORM);
-
-    missile = spawn ();
-    setorigin(missile, self.tur_shotorg);
-    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.event_damage       = turret_hellion_missile_damage;
-    missile.damageforcescale   = 2;
-    missile.health             = 10;
-    missile.enemy              = self.enemy;
-    missile.think              = turret_hellion_missile_think;
-    missile.nextthink          = time;// + 0.2;
-    missile.solid              = SOLID_BBOX;
-    missile.movetype           = MOVETYPE_FLY;
-    missile.velocity           = normalize(self.tur_shotdir_updated + randomvec() * self.shot_spread) * self.shot_speed;
-    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);
-
-	CSQCProjectile(missile, FALSE, PROJECTILE_ROCKET, FALSE); // no culling, has fly sound
-
-    // 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.05;
-
-    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;
-
-        // Turn model
-        self.angles = vectoangles(self.velocity);
-
-        if ( (vlen(self.origin - self.owner.origin)) > (self.owner.shot_radius * 5) )
-            turret_hellion_missile_explode();
-
-        // Accelerate
-        self.velocity = olddir * min(vlen(self.velocity) * self.owner.shot_speed_gain,self.owner.shot_speed_max);
-
-        UpdateCSQCProjectile(self);
-
-        return;
-    }
-
-    // Enemy in range?
-    if (vlen(self.origin - self.enemy.origin) < self.owner.shot_radius * 0.2)
-        turret_hellion_missile_explode();
-
-    // Predict enemy position
-    itime = vlen(self.enemy.origin - self.origin) / vlen(self.velocity);
-    pre_pos = self.enemy.origin + self.enemy.velocity * itime;
-
-    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.35);
-
-    // Turn model
-    self.angles = vectoangles(self.velocity);
-
-    // Accelerate
-    self.velocity = newdir * min(vlen(self.velocity) * self.owner.shot_speed_gain,self.owner.shot_speed_max);
-
-    if (itime < 0.05)
-        self.think = turret_hellion_missile_explode;
-
-    UpdateCSQCProjectile(self);
-}
-
-void turret_hellion_missile_explode()
-{
-    vector org2;
-    float d;
-
-    if(self.event_damage != SUB_Null)
-    {
-        self.event_damage = SUB_Null;
-        self.think = turret_hellion_missile_explode;
-        self.nextthink = time;
-        return;
-    }
-
-    sound (self, CHAN_PROJECTILE, "weapons/rocket_impact.wav", VOL_BASE, 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);
-
-    //w_deathtypestring = "could not dodge the twin missiles.";
-    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) == 0)
-    {
-        remove(self);
-        return;
-    }
-
-    setmodel(self,"models/turrets/base.md3");
-    setmodel(self.tur_head,"models/turrets/hellion.md3");
-
-    if (!turret_tag_setup())
-        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;
-}
-
-
+.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", VOL_BASE, ATTN_NORM);
+
+    missile = spawn ();
+    setorigin(missile, self.tur_shotorg);
+    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.event_damage       = turret_hellion_missile_damage;
+    missile.damageforcescale   = 2;
+    missile.health             = 10;
+    missile.enemy              = self.enemy;
+    missile.think              = turret_hellion_missile_think;
+    missile.nextthink          = time;// + 0.2;
+    missile.solid              = SOLID_BBOX;
+    missile.movetype           = MOVETYPE_FLY;
+    missile.velocity           = normalize(self.tur_shotdir_updated + randomvec() * self.shot_spread) * self.shot_speed;
+    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);
+
+	CSQCProjectile(missile, FALSE, PROJECTILE_ROCKET, FALSE); // no culling, has fly sound
+
+    // 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.05;
+
+    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;
+
+        // Turn model
+        self.angles = vectoangles(self.velocity);
+
+        if ( (vlen(self.origin - self.owner.origin)) > (self.owner.shot_radius * 5) )
+            turret_hellion_missile_explode();
+
+        // Accelerate
+        self.velocity = olddir * min(vlen(self.velocity) * self.owner.shot_speed_gain,self.owner.shot_speed_max);
+
+        UpdateCSQCProjectile(self);
+
+        return;
+    }
+
+    // Enemy in range?
+    if (vlen(self.origin - self.enemy.origin) < self.owner.shot_radius * 0.2)
+        turret_hellion_missile_explode();
+
+    // Predict enemy position
+    itime = vlen(self.enemy.origin - self.origin) / vlen(self.velocity);
+    pre_pos = self.enemy.origin + self.enemy.velocity * itime;
+
+    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.35);
+
+    // Turn model
+    self.angles = vectoangles(self.velocity);
+
+    // Accelerate
+    self.velocity = newdir * min(vlen(self.velocity) * self.owner.shot_speed_gain,self.owner.shot_speed_max);
+
+    if (itime < 0.05)
+        self.think = turret_hellion_missile_explode;
+
+    UpdateCSQCProjectile(self);
+}
+
+void turret_hellion_missile_explode()
+{
+    vector org2;
+    float d;
+
+    if(self.event_damage != SUB_Null)
+    {
+        self.event_damage = SUB_Null;
+        self.think = turret_hellion_missile_explode;
+        self.nextthink = time;
+        return;
+    }
+
+    sound (self, CHAN_PROJECTILE, "weapons/rocket_impact.wav", VOL_BASE, 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);
+
+    //w_deathtypestring = "could not dodge the twin missiles.";
+    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) == 0)
+    {
+        remove(self);
+        return;
+    }
+
+    setmodel(self,"models/turrets/base.md3");
+    setmodel(self.tur_head,"models/turrets/hellion.md3");
+
+    if (!turret_tag_setup())
+        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;
+}
+
+


Property changes on: branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_hellion.qc
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_hk.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_hk.qc	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_hk.qc	2009-07-11 14:59:28 UTC (rev 7191)
@@ -1,480 +1,480 @@
-//#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", VOL_BASE, ATTN_NORM);
-
-    missile                    = spawn ();
-    missile.solid            = SOLID_BBOX;
-    setsize (missile, '-3 -3 -3', '3 3 3'); // give it some size so it can be shot
-    setorigin(missile, self.tur_shotorg);
-
-    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.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);
-
-	CSQCProjectile(missile, FALSE, PROJECTILE_ROCKET, FALSE); // no culling, fly sound
-
-    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 * VOL_BASE, 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
-
-	UpdateCSQCProjectile(self);
-}
-
-void turret_hk_missile_explode()
-{
-    vector org2;
-    float d;
-
-    if(self.event_damage != SUB_Null)
-    {
-        self.event_damage = SUB_Null;
-        self.think = turret_hk_missile_explode;
-        self.nextthink = time;
-        return;
-    }
-
-    if ((other == self.owner)||(other == self.owner.tur_head))
-        return;
-
-    //w_deathtypestring = "got hunted to extinction";
-    //vector	org2;
-    sound (self, CHAN_PROJECTILE, "weapons/rocket_impact.wav", VOL_BASE, 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) == 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())
-        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;
-}
-
-
+//#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", VOL_BASE, ATTN_NORM);
+
+    missile                    = spawn ();
+    missile.solid            = SOLID_BBOX;
+    setsize (missile, '-3 -3 -3', '3 3 3'); // give it some size so it can be shot
+    setorigin(missile, self.tur_shotorg);
+
+    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.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);
+
+	CSQCProjectile(missile, FALSE, PROJECTILE_ROCKET, FALSE); // no culling, fly sound
+
+    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 * VOL_BASE, 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
+
+	UpdateCSQCProjectile(self);
+}
+
+void turret_hk_missile_explode()
+{
+    vector org2;
+    float d;
+
+    if(self.event_damage != SUB_Null)
+    {
+        self.event_damage = SUB_Null;
+        self.think = turret_hk_missile_explode;
+        self.nextthink = time;
+        return;
+    }
+
+    if ((other == self.owner)||(other == self.owner.tur_head))
+        return;
+
+    //w_deathtypestring = "got hunted to extinction";
+    //vector	org2;
+    sound (self, CHAN_PROJECTILE, "weapons/rocket_impact.wav", VOL_BASE, 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) == 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())
+        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;
+}
+
+


Property changes on: branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_hk.qc
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_machinegun.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_machinegun.qc	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_machinegun.qc	2009-07-11 14:59:28 UTC (rev 7191)
@@ -1,81 +1,81 @@
-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", VOL_BASE, ATTN_NORM);
-    fireBallisticBullet (self.tur_shotorg, self.tur_shotdir_updated,self.shot_spread, self.shot_speed, 5, self.shot_dmg, 0, self.shot_force, DEATH_TURRET, 0, 1, cvar("g_balance_uzi_bulletconstant"));
-
-    //w_deathtypestring = "had an alergic reaction due to 10 kilos of led";
-    te_smallflash(self.tur_shotorg);
-    //  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_PLAYERKILL;// | TFL_TURRCAPS_MISSILEKILL;
-    self.aim_flags = TFL_AIM_LEAD;
-
-    if(cvar("g_antilag_bullets"))
-        self.turrcaps_flags |= TFL_TURRCAPS_HITSCAN;
-    else
-        self.aim_flags      |= TFL_AIM_SHOTTIMECOMPENSATE;
-
-    if (turret_stdproc_init("machinegun_std",0) == 0)
-    {
-        remove(self);
-        return;
-    }
-
-    self.damage_flags |= TFL_DMG_HEADSHAKE;
-
-    setmodel(self,"models/turrets/base.md3");
-    setmodel(self.tur_head,"models/turrets/machinegun.md3");
-
-    if (!turret_tag_setup())
-        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");
-    precache_sound ("weapons/uzi_fire.wav");
-
-    self.think = turret_machinegun_std_init;
-    self.nextthink = time + 0.5;
-}
-
+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", VOL_BASE, ATTN_NORM);
+    fireBallisticBullet (self.tur_shotorg, self.tur_shotdir_updated,self.shot_spread, self.shot_speed, 5, self.shot_dmg, 0, self.shot_force, DEATH_TURRET, 0, 1, cvar("g_balance_uzi_bulletconstant"));
+
+    //w_deathtypestring = "had an alergic reaction due to 10 kilos of led";
+    te_smallflash(self.tur_shotorg);
+    //  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_PLAYERKILL;// | TFL_TURRCAPS_MISSILEKILL;
+    self.aim_flags = TFL_AIM_LEAD;
+
+    if(cvar("g_antilag_bullets"))
+        self.turrcaps_flags |= TFL_TURRCAPS_HITSCAN;
+    else
+        self.aim_flags      |= TFL_AIM_SHOTTIMECOMPENSATE;
+
+    if (turret_stdproc_init("machinegun_std",0) == 0)
+    {
+        remove(self);
+        return;
+    }
+
+    self.damage_flags |= TFL_DMG_HEADSHAKE;
+
+    setmodel(self,"models/turrets/base.md3");
+    setmodel(self.tur_head,"models/turrets/machinegun.md3");
+
+    if (!turret_tag_setup())
+        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");
+    precache_sound ("weapons/uzi_fire.wav");
+
+    self.think = turret_machinegun_std_init;
+    self.nextthink = time + 0.5;
+}
+


Property changes on: branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_machinegun.qc
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_mlrs.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_mlrs.qc	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_mlrs.qc	2009-07-11 14:59:28 UTC (rev 7191)
@@ -1,142 +1,142 @@
-void spawnfunc_turret_mlrs();
-void turret_mlrs_dinit();
-void turret_mlrs_attack();
-void turret_mlrs_rocket_explode();
-void turret_mlrs_rocket_touch();
-
-void turret_mlrs_postthink()
-{
-
-    // 0 = full, 6 = empty
-    self.tur_head.frame = rint(6 - (self.ammo / self.shot_dmg));
-}
-
-void turret_mlrs_attack()
-{
-    entity missile;
-
-    turret_tag_fire_update();
-
-    sound (self, CHAN_WEAPON, "weapons/rocket_fire.wav", VOL_BASE, ATTN_NORM);
-
-    missile                    = spawn ();
-    //setsize (missile, '0 0 0', '0 0 0'); // give it some size so it can be shot
-    setsize (missile, '-3 -3 -3', '3 3 3'); // give it some size so it can be shot
-    setorigin(missile, self.tur_shotorg);
-    missile.classname          = "mlrs_missile";
-    missile.owner              = self;
-    missile.bot_dodge          = TRUE;
-    missile.bot_dodgerating    = self.shot_dmg;
-    missile.takedamage         = DAMAGE_NO;
-    missile.damageforcescale   = 4;
-    //missile.health             = 25;
-    missile.think              = turret_mlrs_rocket_explode;
-
-    missile.nextthink          = time + max(self.tur_impacttime,(self.shot_radius * 2) / self.shot_speed);
-    //missile.nextthink          = missile.nextthink + random() * self.shot_spread;
-
-    missile.solid              = SOLID_BBOX;
-    missile.movetype           = MOVETYPE_FLYMISSILE;
-    missile.velocity           = normalize(self.tur_shotdir_updated + randomvec() * self.shot_spread) * self.shot_speed;
-    missile.angles             = vectoangles(missile.velocity);
-    missile.touch              = turret_mlrs_rocket_touch;
-    missile.flags              = FL_PROJECTILE;
-    missile.solid              = SOLID_BBOX;
-    missile.enemy              = self.enemy;
-
-	CSQCProjectile(missile, TRUE, PROJECTILE_ROCKET, FALSE); // no cull, fly sound
-
-    te_explosion (missile.origin);
-
-    //self.tur_head.frame = 7 - self.volly_counter;
-}
-
-void turret_mlrs_rocket_touch()
-{
-    if( (other == self.owner) || (other == self.owner.tur_head) )
-        return;
-
-    PROJECTILE_TOUCH;
-
-    turret_mlrs_rocket_explode();
-}
-
-void turret_mlrs_rocket_explode()
-{
-    vector org2;
-
-    if(self.event_damage != SUB_Null)
-    {
-        self.event_damage = SUB_Null;
-        self.think = turret_mlrs_rocket_explode;
-        self.nextthink = time;
-        return;
-    }
-
-
-    sound (self, CHAN_PROJECTILE, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
-    org2 = findbetterlocation (self.origin, 16);
-    pointparticles(particleeffectnum("rocket_explode"), org2, '0 0 0', 1);
-    //w_deathtypestring = "dident escape the rocket barrage";
-#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, self.owner.shot_dmg * 0.5, self.owner.shot_radius, world, self.owner.shot_force, DEATH_TURRET, world);
-#endif
-
-    // Target dead, Tell turret.
-    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 | TFL_AIM_INFRONT;
-
-    if (turret_stdproc_init("mlrs_std",0) == 0)
-    {
-        remove(self);
-        return;
-    }
-
-    self.damage_flags |= TFL_DMG_HEADSHAKE;
-
-    self.shoot_flags |= TFL_SHOOT_VOLLYALWAYS;
-    self.volly_counter = self.shot_volly;
-
-    setmodel(self,"models/turrets/base.md3");
-    setmodel(self.tur_head,"models/turrets/mlrs.md3");
-
-    if (!turret_tag_setup())
-        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;
-}
-
-
+void spawnfunc_turret_mlrs();
+void turret_mlrs_dinit();
+void turret_mlrs_attack();
+void turret_mlrs_rocket_explode();
+void turret_mlrs_rocket_touch();
+
+void turret_mlrs_postthink()
+{
+
+    // 0 = full, 6 = empty
+    self.tur_head.frame = rint(6 - (self.ammo / self.shot_dmg));
+}
+
+void turret_mlrs_attack()
+{
+    entity missile;
+
+    turret_tag_fire_update();
+
+    sound (self, CHAN_WEAPON, "weapons/rocket_fire.wav", VOL_BASE, ATTN_NORM);
+
+    missile                    = spawn ();
+    //setsize (missile, '0 0 0', '0 0 0'); // give it some size so it can be shot
+    setsize (missile, '-3 -3 -3', '3 3 3'); // give it some size so it can be shot
+    setorigin(missile, self.tur_shotorg);
+    missile.classname          = "mlrs_missile";
+    missile.owner              = self;
+    missile.bot_dodge          = TRUE;
+    missile.bot_dodgerating    = self.shot_dmg;
+    missile.takedamage         = DAMAGE_NO;
+    missile.damageforcescale   = 4;
+    //missile.health             = 25;
+    missile.think              = turret_mlrs_rocket_explode;
+
+    missile.nextthink          = time + max(self.tur_impacttime,(self.shot_radius * 2) / self.shot_speed);
+    //missile.nextthink          = missile.nextthink + random() * self.shot_spread;
+
+    missile.solid              = SOLID_BBOX;
+    missile.movetype           = MOVETYPE_FLYMISSILE;
+    missile.velocity           = normalize(self.tur_shotdir_updated + randomvec() * self.shot_spread) * self.shot_speed;
+    missile.angles             = vectoangles(missile.velocity);
+    missile.touch              = turret_mlrs_rocket_touch;
+    missile.flags              = FL_PROJECTILE;
+    missile.solid              = SOLID_BBOX;
+    missile.enemy              = self.enemy;
+
+	CSQCProjectile(missile, TRUE, PROJECTILE_ROCKET, FALSE); // no cull, fly sound
+
+    te_explosion (missile.origin);
+
+    //self.tur_head.frame = 7 - self.volly_counter;
+}
+
+void turret_mlrs_rocket_touch()
+{
+    if( (other == self.owner) || (other == self.owner.tur_head) )
+        return;
+
+    PROJECTILE_TOUCH;
+
+    turret_mlrs_rocket_explode();
+}
+
+void turret_mlrs_rocket_explode()
+{
+    vector org2;
+
+    if(self.event_damage != SUB_Null)
+    {
+        self.event_damage = SUB_Null;
+        self.think = turret_mlrs_rocket_explode;
+        self.nextthink = time;
+        return;
+    }
+
+
+    sound (self, CHAN_PROJECTILE, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
+    org2 = findbetterlocation (self.origin, 16);
+    pointparticles(particleeffectnum("rocket_explode"), org2, '0 0 0', 1);
+    //w_deathtypestring = "dident escape the rocket barrage";
+#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, self.owner.shot_dmg * 0.5, self.owner.shot_radius, world, self.owner.shot_force, DEATH_TURRET, world);
+#endif
+
+    // Target dead, Tell turret.
+    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 | TFL_AIM_INFRONT;
+
+    if (turret_stdproc_init("mlrs_std",0) == 0)
+    {
+        remove(self);
+        return;
+    }
+
+    self.damage_flags |= TFL_DMG_HEADSHAKE;
+
+    self.shoot_flags |= TFL_SHOOT_VOLLYALWAYS;
+    self.volly_counter = self.shot_volly;
+
+    setmodel(self,"models/turrets/base.md3");
+    setmodel(self.tur_head,"models/turrets/mlrs.md3");
+
+    if (!turret_tag_setup())
+        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;
+}
+
+


Property changes on: branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_mlrs.qc
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_phaser.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_phaser.qc	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_phaser.qc	2009-07-11 14:59:28 UTC (rev 7191)
@@ -1,149 +1,149 @@
-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, "", VOL_BASE, 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.wav", VOL_BASE, ATTN_NORM);
-    }
-
-
-    self.nextthink = time + self.ticrate;
-
-    self.owner.attack_finished_single = time + frametime;
-    entity oldself;
-    oldself = self;
-    self = self.owner;
-    //w_deathtypestring = "was phased out of existence";
-    FireImoBeam (   self.tur_shotorg,
-                    self.tur_shotorg + self.tur_shotdir_updated * self.target_range,
-                    '-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 - 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 / 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.wav", VOL_BASE, 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) == 0)
-    {
-        remove(self);
-        return;
-    }
-
-    setmodel(self,"models/turrets/base.md3");
-    setmodel(self.tur_head,"models/turrets/phaser.md3");
-
-    if (!turret_tag_setup())
-        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.wav");
-    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;
-}
-
+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, "", VOL_BASE, 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.wav", VOL_BASE, ATTN_NORM);
+    }
+
+
+    self.nextthink = time + self.ticrate;
+
+    self.owner.attack_finished_single = time + frametime;
+    entity oldself;
+    oldself = self;
+    self = self.owner;
+    //w_deathtypestring = "was phased out of existence";
+    FireImoBeam (   self.tur_shotorg,
+                    self.tur_shotorg + self.tur_shotdir_updated * self.target_range,
+                    '-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 - 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 / 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.wav", VOL_BASE, 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) == 0)
+    {
+        remove(self);
+        return;
+    }
+
+    setmodel(self,"models/turrets/base.md3");
+    setmodel(self.tur_head,"models/turrets/phaser.md3");
+
+    if (!turret_tag_setup())
+        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.wav");
+    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;
+}
+


Property changes on: branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_phaser.qc
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_plasma.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_plasma.qc	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_plasma.qc	2009-07-11 14:59:28 UTC (rev 7191)
@@ -1,225 +1,225 @@
-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_dual_postthink()
-{
-    if ((self.tur_head.frame != 0) && (self.tur_head.frame != 3))
-        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;
-
-    sound (self, CHAN_WEAPON, "weapons/hagar_fire.wav", VOL_BASE, ATTN_NORM);
-    pointparticles(particleeffectnum("laser_muzzleflash"), self.tur_shotorg, self.tur_shotdir_updated * 1000, 1);
-
-    proj                    = spawn ();
-    setorigin(proj, self.tur_shotorg);
-    setsize(proj, '-1 -1 -1', '1 1 1');
-    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        = normalize(self.tur_shotdir_updated + randomvec() * self.shot_spread) * self.shot_speed;
-    //proj.velocity        = self.tur_shotdir_updated  * self.shot_speed;
-    proj.touch           = turret_plasma_projectile_explode;
-    proj.flags           = FL_PROJECTILE;
-    proj.enemy           = self.enemy;
-    proj.flags           = FL_PROJECTILE | FL_NOTARGET;
-
-    CSQCProjectile(proj, TRUE, PROJECTILE_ELECTRO_BEAM, TRUE);
-
-    if (self.tur_head.frame == 0)
-        self.tur_head.frame = 1;
-}
-
-void turret_plasma_dual_attack()
-{
-    entity proj;
-
-    sound (self, CHAN_WEAPON, "weapons/hagar_fire.wav", VOL_BASE, ATTN_NORM);
-    proj                    = spawn ();
-    setorigin(proj, self.tur_shotorg);
-    setsize(proj, '0 0 0', '0 0 0');
-    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        = normalize(self.tur_shotdir_updated + randomvec() * self.shot_spread) * self.shot_speed;
-    //proj.velocity        = self.tur_shotdir_updated  * self.shot_speed;
-    proj.touch           = turret_plasma_projectile_explode;
-    proj.flags           = FL_PROJECTILE;
-    proj.enemy           = self.enemy;
-    proj.flags           = FL_PROJECTILE | FL_NOTARGET;
-
-    self.tur_head.frame += 1;
-
-    CSQCProjectile(proj, TRUE, PROJECTILE_ELECTRO_BEAM, TRUE);
-}
-
-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;
-    //w_deathtypestring = "ate to much plasma";
-#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", VOL_BASE, ATTN_NORM);
-
-    remove (self);
-}
-
-void turret_plasma_std_init()
-{
-    if (self.netname == "")      self.netname     = "Plasma Cannon";
-
-    // What ammo to use
-    self.ammo_flags = TFL_AMMO_ENERGY | TFL_AMMO_RECHARGE | TFL_AMMO_RECIVE;
-
-    // How to aim
-    //self.aim_flags = TFL_AIM_LEAD | TFL_AIM_SHOTTIMECOMPENSATE | TFL_AIM_ZPREDICT | TFL_AIM_GROUND2;
-    self.aim_flags      = TFL_AIM_LEAD | TFL_AIM_SHOTTIMECOMPENSATE | TFL_AIM_GROUND2;
-    self.turrcaps_flags = TFL_TURRCAPS_RADIUSDMG | TFL_TURRCAPS_MEDPROJ | TFL_TURRCAPS_PLAYERKILL | TFL_TURRCAPS_MISSILEKILL;
-
-    if (turret_stdproc_init("plasma_std",FALSE) == 0)
-    {
-        remove(self);
-        return;
-    }
-
-    self.damage_flags    |= TFL_DMG_HEADSHAKE;
-
-    //self.firecheck_flags |= (TFL_FIRECHECK_AFF | TFL_FIRECHECK_VERIFIED);
-    self.firecheck_flags |= TFL_FIRECHECK_AFF;
-
-    //self.target_select_flags |= TFL_TARGETSELECT_FOV;
-    //self.target_select_fov    = 45;
-
-    setmodel(self,"models/turrets/base.md3");
-    setmodel(self.tur_head,"models/turrets/plasma.md3");
-    // self.tur_head.alpha = -1;
-
-    if (!turret_tag_setup())
-        dprint("Warning: Turret ",self.classname, " faild to initialize md3 tags\n");
-
-    // Our fireing routine
-    self.turret_firefunc  = turret_plasma_attack;
-
-    // Custom per turret frame stuff. usualy animation.
-    self.turret_postthink = turret_plasma_postthink;
-    turret_do_updates(self);
-}
-
-
-void turret_plasma_dual_init()
-{
-    if (self.netname == "")      self.netname     = "Dual Plasma Cannon";
-
-    // What ammo to use
-    self.ammo_flags = TFL_AMMO_ENERGY | TFL_AMMO_RECHARGE | TFL_AMMO_RECIVE;
-
-    // How to aim at targets
-    self.aim_flags      = TFL_AIM_LEAD | TFL_AIM_SHOTTIMECOMPENSATE  | TFL_AIM_GROUND2 ;
-    self.turrcaps_flags = TFL_TURRCAPS_RADIUSDMG | TFL_TURRCAPS_MEDPROJ | TFL_TURRCAPS_PLAYERKILL;
-
-    if (turret_stdproc_init("plasma_dual",0) == 0)
-    {
-        remove(self);
-        return;
-    }
-
-    self.damage_flags    |= TFL_DMG_HEADSHAKE;
-    //self.firecheck_flags |= (TFL_FIRECHECK_AFF | TFL_FIRECHECK_VERIFIED);
-    //self.firecheck_flags |= TFL_FIRECHECK_AFF;
-
-    setmodel(self,"models/turrets/base.md3");
-    setmodel(self.tur_head,"models/turrets/plasmad.md3");
-
-
-    if (!turret_tag_setup())
-        dprint("Warning: Turret ",self.classname, " faild to initialize md3 tags\n");
-
-    // Our fireing routine
-    self.turret_firefunc  = turret_plasma_dual_attack;
-
-    // Custom per turret frame stuff. usualy animation.
-    self.turret_postthink = turret_plasma_dual_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()
-{
-    g_turrets_common_precash();
-    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;
-}
-
+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_dual_postthink()
+{
+    if ((self.tur_head.frame != 0) && (self.tur_head.frame != 3))
+        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;
+
+    sound (self, CHAN_WEAPON, "weapons/hagar_fire.wav", VOL_BASE, ATTN_NORM);
+    pointparticles(particleeffectnum("laser_muzzleflash"), self.tur_shotorg, self.tur_shotdir_updated * 1000, 1);
+
+    proj                    = spawn ();
+    setorigin(proj, self.tur_shotorg);
+    setsize(proj, '-1 -1 -1', '1 1 1');
+    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        = normalize(self.tur_shotdir_updated + randomvec() * self.shot_spread) * self.shot_speed;
+    //proj.velocity        = self.tur_shotdir_updated  * self.shot_speed;
+    proj.touch           = turret_plasma_projectile_explode;
+    proj.flags           = FL_PROJECTILE;
+    proj.enemy           = self.enemy;
+    proj.flags           = FL_PROJECTILE | FL_NOTARGET;
+
+    CSQCProjectile(proj, TRUE, PROJECTILE_ELECTRO_BEAM, TRUE);
+
+    if (self.tur_head.frame == 0)
+        self.tur_head.frame = 1;
+}
+
+void turret_plasma_dual_attack()
+{
+    entity proj;
+
+    sound (self, CHAN_WEAPON, "weapons/hagar_fire.wav", VOL_BASE, ATTN_NORM);
+    proj                    = spawn ();
+    setorigin(proj, self.tur_shotorg);
+    setsize(proj, '0 0 0', '0 0 0');
+    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        = normalize(self.tur_shotdir_updated + randomvec() * self.shot_spread) * self.shot_speed;
+    //proj.velocity        = self.tur_shotdir_updated  * self.shot_speed;
+    proj.touch           = turret_plasma_projectile_explode;
+    proj.flags           = FL_PROJECTILE;
+    proj.enemy           = self.enemy;
+    proj.flags           = FL_PROJECTILE | FL_NOTARGET;
+
+    self.tur_head.frame += 1;
+
+    CSQCProjectile(proj, TRUE, PROJECTILE_ELECTRO_BEAM, TRUE);
+}
+
+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;
+    //w_deathtypestring = "ate to much plasma";
+#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", VOL_BASE, ATTN_NORM);
+
+    remove (self);
+}
+
+void turret_plasma_std_init()
+{
+    if (self.netname == "")      self.netname     = "Plasma Cannon";
+
+    // What ammo to use
+    self.ammo_flags = TFL_AMMO_ENERGY | TFL_AMMO_RECHARGE | TFL_AMMO_RECIVE;
+
+    // How to aim
+    //self.aim_flags = TFL_AIM_LEAD | TFL_AIM_SHOTTIMECOMPENSATE | TFL_AIM_ZPREDICT | TFL_AIM_GROUND2;
+    self.aim_flags      = TFL_AIM_LEAD | TFL_AIM_SHOTTIMECOMPENSATE | TFL_AIM_GROUND2;
+    self.turrcaps_flags = TFL_TURRCAPS_RADIUSDMG | TFL_TURRCAPS_MEDPROJ | TFL_TURRCAPS_PLAYERKILL | TFL_TURRCAPS_MISSILEKILL;
+
+    if (turret_stdproc_init("plasma_std",FALSE) == 0)
+    {
+        remove(self);
+        return;
+    }
+
+    self.damage_flags    |= TFL_DMG_HEADSHAKE;
+
+    //self.firecheck_flags |= (TFL_FIRECHECK_AFF | TFL_FIRECHECK_VERIFIED);
+    self.firecheck_flags |= TFL_FIRECHECK_AFF;
+
+    //self.target_select_flags |= TFL_TARGETSELECT_FOV;
+    //self.target_select_fov    = 45;
+
+    setmodel(self,"models/turrets/base.md3");
+    setmodel(self.tur_head,"models/turrets/plasma.md3");
+    // self.tur_head.alpha = -1;
+
+    if (!turret_tag_setup())
+        dprint("Warning: Turret ",self.classname, " faild to initialize md3 tags\n");
+
+    // Our fireing routine
+    self.turret_firefunc  = turret_plasma_attack;
+
+    // Custom per turret frame stuff. usualy animation.
+    self.turret_postthink = turret_plasma_postthink;
+    turret_do_updates(self);
+}
+
+
+void turret_plasma_dual_init()
+{
+    if (self.netname == "")      self.netname     = "Dual Plasma Cannon";
+
+    // What ammo to use
+    self.ammo_flags = TFL_AMMO_ENERGY | TFL_AMMO_RECHARGE | TFL_AMMO_RECIVE;
+
+    // How to aim at targets
+    self.aim_flags      = TFL_AIM_LEAD | TFL_AIM_SHOTTIMECOMPENSATE  | TFL_AIM_GROUND2 ;
+    self.turrcaps_flags = TFL_TURRCAPS_RADIUSDMG | TFL_TURRCAPS_MEDPROJ | TFL_TURRCAPS_PLAYERKILL;
+
+    if (turret_stdproc_init("plasma_dual",0) == 0)
+    {
+        remove(self);
+        return;
+    }
+
+    self.damage_flags    |= TFL_DMG_HEADSHAKE;
+    //self.firecheck_flags |= (TFL_FIRECHECK_AFF | TFL_FIRECHECK_VERIFIED);
+    //self.firecheck_flags |= TFL_FIRECHECK_AFF;
+
+    setmodel(self,"models/turrets/base.md3");
+    setmodel(self.tur_head,"models/turrets/plasmad.md3");
+
+
+    if (!turret_tag_setup())
+        dprint("Warning: Turret ",self.classname, " faild to initialize md3 tags\n");
+
+    // Our fireing routine
+    self.turret_firefunc  = turret_plasma_dual_attack;
+
+    // Custom per turret frame stuff. usualy animation.
+    self.turret_postthink = turret_plasma_dual_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()
+{
+    g_turrets_common_precash();
+    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;
+}
+


Property changes on: branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_plasma.qc
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_targettrigger.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_targettrigger.qc	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_targettrigger.qc	2009-07-11 14:59:28 UTC (rev 7191)
@@ -1,42 +1,42 @@
-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;
-            if(e.turret_addtarget)
-                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;
-}
+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;
+            if(e.turret_addtarget)
+                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;
+}


Property changes on: branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_targettrigger.qc
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_tessla.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_tessla.qc	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_tessla.qc	2009-07-11 14:59:28 UTC (rev 7191)
@@ -1,178 +1,178 @@
-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,MOVE_WORLDONLY,from);
-                if (trace_fraction == 1.0)
-                {
-                    d = vlen(e.origin - from.origin);
-                    if (d < dd)
-                    {
-                        dd = d;
-                        etarget = e;
-                    }
-                }
-            }
-        e = e.chain;
-    }
-
-    if (etarget)
-    {
-        te_smallflash(etarget.origin);
-        te_csqc_lightningarc(from.origin,etarget.origin);
-        Damage(etarget,self,self,damage,DEATH_TURRET,etarget.origin,'0 0 0');
-        etarget.toasted = 1;
-    }
-
-    return etarget;
-}
-
-float turret_tesla_firecheck()
-{
-    if not (turret_stdproc_firecheck())
-        return 0;
-
-    self.target_select_flags = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_MISSILES |
-                                 TFL_TARGETSELECT_RANGELIMTS | TFL_TARGETSELECT_TEAMCHECK;
-
-    self.enemy = turret_select_target();
-
-    if(self.enemy)
-        return 1;
-
-    return 0;
-
-}
-
-void turret_tesla_fire()
-{
-    entity e,t;
-    float d,r,i;
-
-    //w_deathtypestring = "discoverd how a tesla coil works";
-
-    d = self.shot_dmg;
-    r = self.target_range;
-    e = spawn();
-    setorigin(e,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;
-    for (i = 0; i < 10; ++i)
-    {
-        d *= 0.5;
-        r *= 0.85;
-        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()
-{
-    if not (self.tur_active)
-    {
-        self.tur_head.avelocity = '0 0 0';
-        return;
-    }
-
-    if(self.ammo < self.shot_dmg)
-    {
-        self.tur_head.avelocity = '0 9 0' * (self.ammo / self.shot_dmg);
-    }
-    else
-    {
-        self.tur_head.avelocity = '0 90 0' * (self.ammo / self.shot_dmg);
-
-        if(self.attack_finished_single > time)
-            return;
-
-        float f;
-        f = (self.ammo / self.ammo_max);
-        f = f*f;
-        if(f > random())
-            if(random() < 0.1)
-                te_csqc_lightningarc(self.tur_shotorg,self.tur_shotorg + (randomvec() * 350));
-    }
-}
-
-
-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_PLAYERS | TFL_TARGETSELECT_MISSILES |
-                               TFL_TARGETSELECT_RANGELIMTS | TFL_TARGETSELECT_TEAMCHECK;
-
-    self.firecheck_flags     = TFL_FIRECHECK_REFIRE | TFL_FIRECHECK_OWM_AMMO;
-    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) == 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())
-        dprint("Warning: Turret ",self.classname, " faild to initialize md3 tags\n");
-
-    self.turret_firefunc      = turret_tesla_fire;
-    self.turret_postthink     = turret_tesla_postthink;
-    self.turret_firecheckfunc = turret_tesla_firecheck;
-}
-
-/*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;
-}
-
+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,MOVE_WORLDONLY,from);
+                if (trace_fraction == 1.0)
+                {
+                    d = vlen(e.origin - from.origin);
+                    if (d < dd)
+                    {
+                        dd = d;
+                        etarget = e;
+                    }
+                }
+            }
+        e = e.chain;
+    }
+
+    if (etarget)
+    {
+        te_smallflash(etarget.origin);
+        te_csqc_lightningarc(from.origin,etarget.origin);
+        Damage(etarget,self,self,damage,DEATH_TURRET,etarget.origin,'0 0 0');
+        etarget.toasted = 1;
+    }
+
+    return etarget;
+}
+
+float turret_tesla_firecheck()
+{
+    if not (turret_stdproc_firecheck())
+        return 0;
+
+    self.target_select_flags = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_MISSILES |
+                                 TFL_TARGETSELECT_RANGELIMTS | TFL_TARGETSELECT_TEAMCHECK;
+
+    self.enemy = turret_select_target();
+
+    if(self.enemy)
+        return 1;
+
+    return 0;
+
+}
+
+void turret_tesla_fire()
+{
+    entity e,t;
+    float d,r,i;
+
+    //w_deathtypestring = "discoverd how a tesla coil works";
+
+    d = self.shot_dmg;
+    r = self.target_range;
+    e = spawn();
+    setorigin(e,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;
+    for (i = 0; i < 10; ++i)
+    {
+        d *= 0.5;
+        r *= 0.85;
+        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()
+{
+    if not (self.tur_active)
+    {
+        self.tur_head.avelocity = '0 0 0';
+        return;
+    }
+
+    if(self.ammo < self.shot_dmg)
+    {
+        self.tur_head.avelocity = '0 9 0' * (self.ammo / self.shot_dmg);
+    }
+    else
+    {
+        self.tur_head.avelocity = '0 90 0' * (self.ammo / self.shot_dmg);
+
+        if(self.attack_finished_single > time)
+            return;
+
+        float f;
+        f = (self.ammo / self.ammo_max);
+        f = f*f;
+        if(f > random())
+            if(random() < 0.1)
+                te_csqc_lightningarc(self.tur_shotorg,self.tur_shotorg + (randomvec() * 350));
+    }
+}
+
+
+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_PLAYERS | TFL_TARGETSELECT_MISSILES |
+                               TFL_TARGETSELECT_RANGELIMTS | TFL_TARGETSELECT_TEAMCHECK;
+
+    self.firecheck_flags     = TFL_FIRECHECK_REFIRE | TFL_FIRECHECK_OWM_AMMO;
+    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) == 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())
+        dprint("Warning: Turret ",self.classname, " faild to initialize md3 tags\n");
+
+    self.turret_firefunc      = turret_tesla_fire;
+    self.turret_postthink     = turret_tesla_postthink;
+    self.turret_firecheckfunc = turret_tesla_firecheck;
+}
+
+/*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;
+}
+


Property changes on: branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_tessla.qc
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_walker.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_walker.qc	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_walker.qc	2009-07-11 14:59:28 UTC (rev 7191)
@@ -1,1022 +1,1022 @@
-#define ANIM_NO         0
-#define ANIM_REVERSE    1
-#define ANIM_WALK       2
-#define ANIM_RUN        3
-#define ANIM_STRAFE_L   4
-#define ANIM_STRAFE_R   5
-#define ANIM_TURN       6
-#define ANIM_JUMP       7
-#define ANIM_LAND       8
-#define ANIM_PAIN       9
-#define ANIM_MEELE      10
-#define ANIM_SWIM       11
-#define ANIM_ROAM       12
-
-#define WVM_IDLE_UP 25
-#define WVM_IDLE    50
-
-#define WVM_PATH  1000
-#define WVM_ENEMY 2000
-#define WVM_STOP  3000
-#define WVM_DODGE 4000
-#define  WVM_PANIC 10000
-#define walker_verbs_move verbs_move
-
-#define WVA_MINIGUN 100
-#define WVA_ROCKET  500
-#define WVA_MEELE   1000
-#define walker_verbs_attack verbs_attack
-
-#define WVI_IDLE 1
-#define WVI_ROAM 10
-#define walker_verbs_idle verbs_idle
-
-.float animflag;
-.entity wkr_spawn;
-
-#define WALKER_MIN '-70 -70 5'
-#define WALKER_MAX '70 70 70'
-
-#define WALKER_PATH(s,e) pathlib_astar(s,e)
-
-float walker_firecheck()
-{
-    if (self.animflag == ANIM_MEELE)
-        return 0;
-
-    return turret_stdproc_firecheck();
-}
-
-void walker_meele_do_dmg()
-{
-    vector where;
-    entity e;
-    makevectors(self.angles);
-    where = self.origin + v_forward * 128;
-
-    //w_deathtypestring = "tried to hug the cute spider thingy.";
-    e = findradius(where,64);
-    while (e)
-    {
-        if (turret_validate_target(self,e,self.target_validate_flags))
-            if (e != self && e.owner != 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()
-{
-    vector real_angle;
-    float  vz;
-
-    real_angle = vectoangles(self.steerto) - self.angles;
-    vz         = self.velocity_z;
-
-    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;
-
-        movelib_beak_simple(cvar("g_turrets_unit_walker_speed_stop"));
-
-        break;
-
-    case ANIM_REVERSE:
-        if ((self.frame < 5) || (self.frame > 25))
-            self.frame = 25;
-
-        self.frame = self.frame -1;
-        movelib_move_simple(v_forward * -1 ,cvar("g_turrets_unit_walker_speed_walk"),0.6);
-
-        if (self.frame < 5)
-            self.frame = 25;
-
-        break;
-
-    case ANIM_TURN:
-
-        if ((self.frame < 30) || (self.frame > 55))
-            self.frame = 30;
-
-        self.frame = self.frame + 1;
-
-        self.angles_y += bound(-15,shortangle_f(real_angle_y,self.angles_y),15);
-
-        movelib_beak_simple(cvar("g_turrets_unit_walker_speed_stop"));
-
-        if (self.frame > 55)
-            self.frame = 35;
-
-        break;
-
-    case ANIM_WALK:
-        if ((self.frame < 5) || (self.frame > 25))
-            self.frame = 5;
-
-        self.frame = self.frame +1;
-        self.angles_y += bound(-10,shortangle_f(real_angle_y,self.angles_y),10);
-        movelib_move_simple(v_forward ,cvar("g_turrets_unit_walker_speed_walk"),0.6);
-
-        if (self.frame > 25)
-            self.frame = 5;
-
-        break;
-
-    case ANIM_ROAM:
-        if ((self.frame < 5) || (self.frame > 25))
-            self.frame = 5;
-
-        self.frame = self.frame +1;
-
-        self.angles_y += bound(-5,shortangle_f(real_angle_y,self.angles_y),5);
-
-        movelib_move_simple(v_forward ,cvar("g_turrets_unit_walker_speed_roam"),0.5);
-
-        if (self.frame > 25)
-            self.frame = 5;
-
-        break;
-
-    case ANIM_SWIM:
-        if ((self.frame < 142) || (self.frame > 151))
-            self.frame = 142;
-
-        self.frame = self.frame +1;
-
-        self.angles_y += bound(-10,shortangle_f(real_angle_y,self.angles_y),10);
-        self.angles_x += bound(-10,shortangle_f(real_angle_x,self.angles_x),10);
-
-        movelib_move_simple(v_forward, cvar("g_turrets_unit_walker_speed_swim"),0.3);
-        vz = self.velocity_z + sin(time * 4) * 8;
-
-        if (self.frame > 151)
-            self.frame = 146;
-
-        break;
-
-    case ANIM_RUN:
-
-        if ((self.frame < 5) || (self.frame > 25))
-            self.frame = 5;
-
-        self.angles_y += bound(-5,shortangle_f(real_angle_y,self.angles_y),5);
-        movelib_move_simple(v_forward, cvar("g_turrets_unit_walker_speed_run"),0.6);
-
-        if (self.frame > 25)
-            self.frame = 5;
-
-        break;
-
-    case ANIM_STRAFE_L:
-        if ((self.frame < 30) || (self.frame > 55))
-            self.frame = 30;
-
-        self.frame = self.frame + 1;
-        self.angles_y += bound(-2.5,shortangle_f(real_angle_y,self.angles_y),2.5);
-        movelib_move_simple(v_right * -1, cvar("g_turrets_unit_walker_speed_walk"),0.8);
-
-        if (self.frame > 55)
-            self.frame = 35;
-        break;
-
-    case ANIM_STRAFE_R:
-        if ((self.frame < 60) || (self.frame > 65))
-            self.frame = 60;
-
-        self.frame = self.frame + 1;
-        self.angles_y += bound(-2.5,shortangle_f(real_angle_y,self.angles_y),2.5);
-        movelib_move_simple(v_right, cvar("g_turrets_unit_walker_speed_walk"),0.8);
-
-        if (self.frame > 85)
-            self.frame = 65;
-
-        break;
-
-    case ANIM_JUMP:
-        if ((self.frame < 95) || (self.frame > 100))
-            self.frame = 95;
-
-        self.velocity += '0 0 1' * cvar("g_turrets_unit_walker_speed_jump");
-
-        if (self.frame > 100)
-            self.frame = self.frame + 1;
-
-        break;
-
-    case ANIM_LAND:
-        if ((self.frame < 100) || (self.frame > 107))
-            self.frame = 100;
-
-        self.frame = self.frame + 1;
-
-        if (self.frame > 107)
-            self.animflag = ANIM_NO;
-
-        break;
-
-    case ANIM_PAIN:
-        if ((self.frame < 60) || (self.frame > 95))
-            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 > 140))
-            self.frame = 123;
-
-        movelib_beak_simple(cvar("g_turrets_unit_walker_speed_stop"));
-
-        self.frame = self.frame + 2;
-
-        if (self.frame == 133)
-            walker_meele_do_dmg();
-
-        if (self.frame > 140)
-        {
-            self.animflag = ANIM_NO;
-            self.frame = 0;
-        }
-    }
-
-    self.velocity_z = vz;
-
-    if (self.flags & FL_ONGROUND)
-        movelib_groundalign4point(300,100,0.25);
-
-}
-
-
-void walker_rocket_explode()
-{
-    vector org2;
-
-    if (self.event_damage != SUB_Null)
-    {
-        self.event_damage = SUB_Null;
-        self.think = walker_rocket_explode;
-        self.nextthink = time;
-        return;
-    }
-
-    sound (self, CHAN_PROJECTILE, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
-    org2 = findbetterlocation (self.origin, 16);
-
-    pointparticles(particleeffectnum("rocket_explode"), org2, '0 0 0', 1);
-    //w_deathtypestring = "got blasted to oblivion";
-    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();
-}
-
-#define WALKER_ROCKET_MOVE movelib_move_simple(newdir,cvar("g_turrets_unit_walker_std_rocket_speed"),cvar("g_turrets_unit_walker_std_rocket_tunrate")); UpdateCSQCProjectile(self)
-void walker_rocket_loop();
-void walker_rocket_think()
-{
-    vector newdir;
-    float edist;
-    float itime;
-    float m_speed;
-
-    self.nextthink = time;
-
-    edist = vlen(self.enemy.origin - self.origin);
-
-    // Simulate crude 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 (self.shot_dmg != 1337)
-        if (random() < 0.01)
-        {
-            walker_rocket_loop();
-            return;
-        }
-
-    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;
-    }
-
-    if (self.enemy)
-    {
-        itime = max(edist / m_speed,1);
-        newdir = steerlib_pull(self.enemy.origin + self.tur_shotorg);
-    }
-    else
-    {
-        newdir  = normalize(self.velocity);
-    }
-
-    WALKER_ROCKET_MOVE;
-}
-
-void walker_rocket_loop3()
-{
-    vector newdir;
-    self.nextthink = time;
-
-    if (self.tur_health < time)
-    {
-        self.think = walker_rocket_explode;
-        return;
-    }
-
-    if (vlen(self.origin - self.tur_shotorg) < 128 )
-    {
-        self.think = walker_rocket_think;
-        return;
-    }
-
-    newdir = steerlib_pull(self.tur_shotorg);
-    WALKER_ROCKET_MOVE;
-
-    self.angles = vectoangles(self.velocity);
-}
-
-void walker_rocket_loop2()
-{
-    vector newdir;
-
-    self.nextthink = time;
-
-    if (self.tur_health < time)
-    {
-        self.think = walker_rocket_explode;
-        return;
-    }
-
-    if (vlen(self.origin - self.tur_shotorg) < 128 )
-    {
-        self.tur_shotorg = self.origin - '0 0 200';
-        self.think = walker_rocket_loop3;
-        return;
-    }
-
-    newdir = steerlib_pull(self.tur_shotorg);
-    WALKER_ROCKET_MOVE;
-}
-
-void walker_rocket_loop()
-{
-    self.nextthink = time;
-    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;
-
-    te_explosion (org);
-
-    rocket = spawn ();
-    setorigin(rocket, org);
-
-    sound (self, CHAN_WEAPON, "weapons/hagar_fire.wav", VOL_BASE, ATTN_NORM);
-    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             = 25;
-    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.event_damage       = walker_rocket_damage;
-
-    rocket.nextthink          = time;// + 0.25;
-    rocket.movetype           = MOVETYPE_FLY;
-    rocket.velocity           = normalize((v_forward + v_up * 0.5) + (randomvec() * 0.2)) * 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;
-
-    CSQCProjectile(rocket, FALSE, PROJECTILE_ROCKET, FALSE); // no culling, has fly sound
-}
-
-void rv_think()
-{
-    float f;
-    vector org;
-    entity oldself;
-
-    if (self.owner.deadflag != DEAD_NO)
-    {
-        remove(self);
-        return;
-    }
-
-    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 = gettaginfo(self.owner,f);
-
-    self.nextthink = time + 0.2;
-    oldself = self;
-    self = self.owner;
-    walker_fire_rocket(org);
-    self = oldself;
-}
-
-float walker_moveverb_path(float eval)
-{
-    switch (eval)
-    {
-    case VCM_EVAL:
-
-        if (self.animflag == ANIM_MEELE)
-            return VS_CALL_NO;
-
-        if (self.pathcurrent)
-            return verb.verb_static_value;
-
-        return VS_CALL_NO;
-
-    case VCM_DO:
-        // Do we have a path?
-        if not(self.pathcurrent)
-        {
-            return VS_CALL_NO;
-        }
-        else
-        {
-            // Are we close enougth to a path node to switch to the next?
-            if (vlen(self.origin  - self.pathcurrent.origin) < 64)
-                if (self.pathcurrent.path_next == world)
-                {
-                    // Path endpoint reached
-                    pathlib_deletepath(self.pathcurrent.owner);
-                    self.pathcurrent = world;
-
-                    if (self.pathgoal)
-                    {
-                        if (self.pathgoal.use)
-                            self.pathgoal.use();
-
-                        if (self.pathgoal.enemy)
-                        {
-                            self.pathcurrent = WALKER_PATH(self.pathgoal.origin,self.pathgoal.enemy.origin);
-                            self.pathgoal = self.pathgoal.enemy;
-                        }
-                    }
-                    else
-                        self.pathgoal = world;
-                }
-                else
-                    self.pathcurrent = self.pathcurrent.path_next;
-        }
-
-
-        if (self.pathcurrent)
-        {
-            switch (self.waterlevel)
-            {
-            case 0:
-                self.animflag = ANIM_WALK;
-            case 1:
-            case 2:
-                if (self.animflag == ANIM_WALK)
-                    self.animflag = ANIM_WALK;
-                else
-                    self.animflag = ANIM_SWIM;
-                break;
-            case 3:
-                self.animflag = ANIM_SWIM;
-            }
-
-            self.moveto = self.pathcurrent.origin;
-            self.steerto = steerlib_attract2(self.moveto,0.5,500,0.95);
-
-            return VS_CALL_YES_DOING;
-        }
-        else
-            return VS_CALL_YES_DONE;
-
-    case VCM_REMOVE:
-
-        if (self.pathcurrent)
-            pathlib_deletepath(self.pathcurrent.owner);
-
-        self.pathcurrent = world;
-
-        return VS_CALL_YES_DONE;
-    }
-
-    return VS_CALL_YES_DONE;
-}
-
-float walker_moveverb_enemy(float eval)
-{
-    switch (eval)
-    {
-    case VCM_EVAL:
-
-        if (self.enemy)
-            if (self.spawnflags & TSF_NO_PATHBREAK)
-                if (self.pathcurrent)
-                    return VS_CALL_NO;
-
-        if (self.animflag == ANIM_MEELE)
-            return VS_CALL_NO;
-
-        if (self.enemy == world)
-            return VS_CALL_NO;
-
-        //if (tracewalk(self.enemy, self.origin, self.mins, self.maxs, self.enemy.origin, MOVE_NORMAL))
-        return verb.verb_static_value;
-
-        //return VS_CALL_NO;
-
-    case VCM_DO:
-        switch (self.waterlevel)
-        {
-        case 0:
-            if (self.tur_dist_enemy > 500)
-                self.animflag = ANIM_RUN;
-            else
-                self.animflag = ANIM_WALK;
-        case 1:
-        case 2:
-            if (self.animflag != ANIM_SWIM)
-                self.animflag = ANIM_WALK;
-            else
-                self.animflag = ANIM_SWIM;
-            break;
-        case 3:
-            self.animflag = ANIM_SWIM;
-        }
-
-        self.moveto = self.enemy.origin;
-        self.steerto = steerlib_attract2(self.moveto,0.5,500,0.95);
-
-        return VS_CALL_YES_DOING;
-    }
-
-    return VS_CALL_YES_DONE;
-}
-
-float walker_moveverb_idle_pause(float eval)
-{
-    switch (eval)
-    {
-    case VCM_EVAL:
-
-        if (self.animflag == ANIM_MEELE)
-            return VS_CALL_NO;
-
-        return verb.verb_static_value;
-
-    case VCM_DO:
-
-        self.moveto   = self.origin;
-        self.steerto  = v_forward;
-        self.animflag = ANIM_NO;
-
-        return VS_CALL_YES_DOING;
-    }
-
-    return VS_CALL_YES_DONE;
-}
-
-float walker_moveverb_idle_roam(float eval)
-{
-    switch (eval)
-    {
-    case VCM_EVAL:
-
-        if (self.animflag == ANIM_MEELE)
-            return VS_CALL_NO;
-
-        return verb.verb_static_value;
-
-    case VCM_DO:
-        if(verb.wait < time)
-        {
-            trace_fraction = 0;
-            while(trace_fraction != 1.0)
-            {
-                self.moveto = self.origin + (v_forward * 256);
-                self.moveto += v_right * (random() * 256);
-                self.moveto -= v_right * (random() * 256);
-
-                tracebox(self.origin+'0 0 64',self.mins,self.maxs,self.moveto + '0 0 64',MOVE_NORMAL,self);
-            }
-            verb.wait = time + 10;
-        }
-        else
-        {
-            if(verb.wait - time < 9)
-                if(vlen(self.moveto - self.origin) < 32)
-                {
-                    verbstack_push(self.walker_verbs_move, walker_moveverb_idle_pause,   WVM_IDLE + WVM_IDLE_UP, random() * (verb.wait - time), self);
-                    self.animflag = ANIM_NO;
-                    return VS_CALL_REMOVE;
-                }
-        }
-
-        self.steerto = steerlib_attract(self.moveto,256);
-        te_lightning1(self,self.origin + '0 0 64',self.moveto + '0 0 64');
-
-
-
-        switch (self.waterlevel)
-        {
-        case 0:
-            self.animflag = ANIM_ROAM;
-        case 1:
-        case 2:
-            if (self.animflag != ANIM_SWIM)
-                self.animflag = ANIM_ROAM;
-
-            break;
-        case 3:
-            self.animflag = ANIM_SWIM;
-        }
-
-        return VS_CALL_YES_DOING;
-    }
-
-    return VS_CALL_YES_DONE;
-}
-
-float walker_moveverb_idle(float eval)
-{
-    switch (eval)
-    {
-    case VCM_EVAL:
-
-        if (self.animflag == ANIM_MEELE)
-            return VS_CALL_NO;
-
-        return verb.verb_static_value;
-
-    case VCM_DO:
-
-        //if (random() < 0.5)
-            verbstack_push(self.walker_verbs_move, walker_moveverb_idle_pause,   WVM_IDLE + WVM_IDLE_UP, random() * 5, self);
-        //else
-        //    verbstack_push(self.walker_verbs_move, walker_moveverb_idle_roam,   WVM_IDLE + WVM_IDLE_UP,  random() * 15);
-
-        return VS_CALL_YES_DOING;
-    }
-
-    return VS_CALL_YES_DONE;
-}
-
-float walker_attackverb_meele(float eval)
-{
-    switch (eval)
-    {
-    case VCM_EVAL:
-
-        vector wish_angle;
-
-        if (cvar("g_turrets_nofire"))
-            return VS_CALL_NO;
-
-        if (self.animflag == ANIM_SWIM || self.animflag == ANIM_MEELE)
-            return VS_CALL_NO;
-
-        if (!self.enemy)
-            return VS_CALL_NO;
-
-        wish_angle = angleofs(self,self.enemy);
-
-        if (self.tur_dist_enemy < cvar("g_turrets_unit_walker_std_meele_range"))
-            if (fabs(wish_angle_y) < 15)
-                return verb.verb_static_value;
-
-        return VS_CALL_NO;
-
-    case VCM_DO:
-
-        self.moveto   = self.enemy.origin;
-        self.steerto  = steerlib_attract2(self.moveto,0.5,500,0.95);
-        self.animflag = ANIM_MEELE;
-
-        return VS_CALL_YES_DOING;
-    }
-
-    return VS_CALL_YES_DONE;
-}
-
-float walker_attackverb_rockets(float eval)
-{
-    switch (eval)
-    {
-    case VCM_EVAL:
-        if (self.tur_head.attack_finished_single > time)
-            return VS_CALL_NO;
-
-        if not(self.enemy)
-            return VS_CALL_NO;
-
-        if (cvar("g_turrets_nofire"))
-            return VS_CALL_NO;
-
-        if (self.tur_dist_enemy < cvar("g_turrets_unit_walker_std_rockets_range_min"))
-            return VS_CALL_NO;
-
-        if (self.tur_dist_enemy > cvar("g_turrets_unit_walker_std_rockets_range"))
-            return VS_CALL_NO;
-
-        return verb.verb_static_value;
-
-    case VCM_DO:
-
-        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");
-
-        return VS_CALL_YES_DONE;
-    }
-
-    return VS_CALL_YES_DONE;
-}
-
-void walker_postthink()
-{
-
-    self.angles_x *= -1;
-    makevectors(self.angles);
-    self.angles_x *= -1;
-
-    verbstack_pop(self.walker_verbs_attack);
-    verbstack_pop(self.walker_verbs_move);
-
-    walker_animate();
-}
-
-void walker_attack()
-{
-    entity flash;
-
-    //w_deathtypestring = "was miniguned";
-    sound (self, CHAN_WEAPON, "weapons/uzi_fire.wav", VOL_BASE, ATTN_NORM);
-    fireBallisticBullet (self.tur_shotorg, self.tur_shotdir_updated,self.shot_spread, self.shot_speed, 5, self.shot_dmg, 0, self.shot_force, DEATH_TURRET, 0, 1, cvar("g_balance_uzi_bulletconstant"));
-    if (self.uzi_bulletcounter == 2)
-    {
-
-        flash = spawn();
-
-        setmodel(flash, "models/uziflash.md3");
-        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 = 0;
-    }
-
-    self.uzi_bulletcounter = self.uzi_bulletcounter + 1;
-    self.tur_head.frame    = self.tur_head.frame + 1;
-}
-
-
-void walker_respawnhook()
-{
-    vector vtmp;
-    entity e;
-
-    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.wkr_spawn.origin;
-    vtmp_z += self.wkr_spawn.maxs_z;
-    setorigin(self,vtmp);
-
-    if (self.target != "")
-    {
-        e = find(world,targetname,self.target);
-        if (!e)
-        {
-            dprint("Warning! initital waypoint for Walker does NOT exsist!\n");
-            self.target = "";
-        }
-
-        if (e.classname != "turret_checkpoint")
-            dprint("Warning: not a turrret path\n");
-        else
-        {
-            self.pathcurrent = WALKER_PATH(self.origin,e.origin);
-            self.pathgoal = e;
-        }
-    }
-}
-void walker_diehook()
-{
-    turret_trowgib2(self.origin,self.velocity + v_up * 200,'-0.6 -0.2 -02',self,time + random() * 1);
-    turret_trowgib2(self.origin + '0 0 64',self.velocity + v_forward * 150 + v_up * 150,'-0.2 -0.2 -02',self.tur_head,time + random() * 2 + 3);
-
-    if (self.pathcurrent)
-        pathlib_deletepath(self.pathcurrent.owner);
-
-    self.pathcurrent = world;
-
-    if (self.damage_flags & TFL_DMG_DEATH_NORESPAWN)
-    {
-        remove(self.wkr_spawn);
-
-        verbstack_flush(self.walker_verbs_move);
-        verbstack_flush(self.walker_verbs_attack);
-        verbstack_flush(self.walker_verbs_idle);
-
-        remove(self.walker_verbs_move);
-        remove(self.walker_verbs_attack);
-        remove(self.walker_verbs_idle);
-    }
-
-}
-
-void turret_walker_dinit()
-{
-
-    entity e;
-
-    if (self.netname == "")      self.netname     = "Walker Turret";
-    self.wkr_spawn = spawn();
-
-    self.ammo_flags = TFL_AMMO_BULLETS | TFL_AMMO_RECHARGE | TFL_AMMO_RECIVE;
-    self.turrcaps_flags = TFL_TURRCAPS_PLAYERKILL | TFL_TURRCAPS_MOVE | TFL_TURRCAPS_HEADATTACHED;
-    self.aim_flags = TFL_AIM_LEAD;
-
-    if (cvar("g_antilag_bullets"))
-        self.turrcaps_flags |= TFL_TURRCAPS_HITSCAN;
-    else
-        self.aim_flags      |= TFL_AIM_SHOTTIMECOMPENSATE;
-
-
-    self.turret_respawnhook = walker_respawnhook;
-    self.turret_diehook = walker_diehook;
-
-    self.ticrate = 0.05;
-    if (turret_stdproc_init("walker_std",0) == 0)
-    {
-        remove(self);
-        return;
-    }
-
-    self.walker_verbs_move   = spawn();
-    self.walker_verbs_attack = spawn();
-    self.walker_verbs_idle   = spawn();
-
-    verbstack_push(self.walker_verbs_move, walker_moveverb_idle,   WVM_IDLE,  0, self);
-    verbstack_push(self.walker_verbs_move, walker_moveverb_enemy,  WVM_ENEMY, 0, self);
-    verbstack_push(self.walker_verbs_move, walker_moveverb_path,   WVM_PATH,  0, self);
-
-    verbstack_push(self.walker_verbs_attack, walker_attackverb_meele,   WVA_MEELE,  0, self);
-    verbstack_push(self.walker_verbs_attack, walker_attackverb_rockets, WVA_ROCKET, 0, self);
-
-    self.damage_flags |= TFL_DMG_DEATH_NOGIBS;
-
-    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.iscreature = TRUE;
-    self.movetype   = MOVETYPE_WALK;
-    self.solid      = SOLID_SLIDEBOX;
-    self.takedamage = DAMAGE_AIM;
-
-    setmodel(self,"models/turrets/walker_body.md3");
-    setmodel(self.tur_head,"models/turrets/walker_head_minigun.md3");
-    setmodel(self.wkr_spawn,"models/turrets/walker_spawn.md3");
-
-    setattachment(self.tur_head,self,"tag_head");
-
-    self.wkr_spawn.angles   = self.angles;
-    self.wkr_spawn.solid    = SOLID_NOT;
-
-    traceline(self.origin + '0 0 16', self.origin - '0 0 10000', MOVE_WORLDONLY, self);
-    setorigin(self.wkr_spawn,trace_endpos + '0 0 4');
-    setorigin(self,self.wkr_spawn.origin);
-
-    setsize(self,WALKER_MIN,WALKER_MAX);
-
-    self.idle_aim = '0 0 0';
-    self.turret_firecheckfunc = walker_firecheck;
-    self.turret_firefunc      = walker_attack;
-    self.turret_postthink     = walker_postthink;
-
-    if (self.target != "")
-    {
-        e = find(world,targetname,self.target);
-        if (!e)
-        {
-            dprint("Initital waypoint for walker does NOT exsist, fix your map!\n");
-            self.target = "";
-        }
-
-        if (e.classname != "turret_checkpoint")
-            dprint("Warning: not a turrret path\n");
-        else
-        {
-            self.pathcurrent = WALKER_PATH(self.origin,e.origin);
-            self.pathgoal = e;
-        }
-    }
-}
-
-
-void spawnfunc_turret_walker()
-{
-    g_turrets_common_precash();
-
-    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");
-    precache_sound ( "weapons/rocket_impact.wav" );
-
-    self.think = turret_walker_dinit;
-    self.nextthink = time + 0.5;
-}
+#define ANIM_NO         0
+#define ANIM_REVERSE    1
+#define ANIM_WALK       2
+#define ANIM_RUN        3
+#define ANIM_STRAFE_L   4
+#define ANIM_STRAFE_R   5
+#define ANIM_TURN       6
+#define ANIM_JUMP       7
+#define ANIM_LAND       8
+#define ANIM_PAIN       9
+#define ANIM_MEELE      10
+#define ANIM_SWIM       11
+#define ANIM_ROAM       12
+
+#define WVM_IDLE_UP 25
+#define WVM_IDLE    50
+
+#define WVM_PATH  1000
+#define WVM_ENEMY 2000
+#define WVM_STOP  3000
+#define WVM_DODGE 4000
+#define  WVM_PANIC 10000
+#define walker_verbs_move verbs_move
+
+#define WVA_MINIGUN 100
+#define WVA_ROCKET  500
+#define WVA_MEELE   1000
+#define walker_verbs_attack verbs_attack
+
+#define WVI_IDLE 1
+#define WVI_ROAM 10
+#define walker_verbs_idle verbs_idle
+
+.float animflag;
+.entity wkr_spawn;
+
+#define WALKER_MIN '-70 -70 5'
+#define WALKER_MAX '70 70 70'
+
+#define WALKER_PATH(s,e) pathlib_astar(s,e)
+
+float walker_firecheck()
+{
+    if (self.animflag == ANIM_MEELE)
+        return 0;
+
+    return turret_stdproc_firecheck();
+}
+
+void walker_meele_do_dmg()
+{
+    vector where;
+    entity e;
+    makevectors(self.angles);
+    where = self.origin + v_forward * 128;
+
+    //w_deathtypestring = "tried to hug the cute spider thingy.";
+    e = findradius(where,64);
+    while (e)
+    {
+        if (turret_validate_target(self,e,self.target_validate_flags))
+            if (e != self && e.owner != 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()
+{
+    vector real_angle;
+    float  vz;
+
+    real_angle = vectoangles(self.steerto) - self.angles;
+    vz         = self.velocity_z;
+
+    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;
+
+        movelib_beak_simple(cvar("g_turrets_unit_walker_speed_stop"));
+
+        break;
+
+    case ANIM_REVERSE:
+        if ((self.frame < 5) || (self.frame > 25))
+            self.frame = 25;
+
+        self.frame = self.frame -1;
+        movelib_move_simple(v_forward * -1 ,cvar("g_turrets_unit_walker_speed_walk"),0.6);
+
+        if (self.frame < 5)
+            self.frame = 25;
+
+        break;
+
+    case ANIM_TURN:
+
+        if ((self.frame < 30) || (self.frame > 55))
+            self.frame = 30;
+
+        self.frame = self.frame + 1;
+
+        self.angles_y += bound(-15,shortangle_f(real_angle_y,self.angles_y),15);
+
+        movelib_beak_simple(cvar("g_turrets_unit_walker_speed_stop"));
+
+        if (self.frame > 55)
+            self.frame = 35;
+
+        break;
+
+    case ANIM_WALK:
+        if ((self.frame < 5) || (self.frame > 25))
+            self.frame = 5;
+
+        self.frame = self.frame +1;
+        self.angles_y += bound(-10,shortangle_f(real_angle_y,self.angles_y),10);
+        movelib_move_simple(v_forward ,cvar("g_turrets_unit_walker_speed_walk"),0.6);
+
+        if (self.frame > 25)
+            self.frame = 5;
+
+        break;
+
+    case ANIM_ROAM:
+        if ((self.frame < 5) || (self.frame > 25))
+            self.frame = 5;
+
+        self.frame = self.frame +1;
+
+        self.angles_y += bound(-5,shortangle_f(real_angle_y,self.angles_y),5);
+
+        movelib_move_simple(v_forward ,cvar("g_turrets_unit_walker_speed_roam"),0.5);
+
+        if (self.frame > 25)
+            self.frame = 5;
+
+        break;
+
+    case ANIM_SWIM:
+        if ((self.frame < 142) || (self.frame > 151))
+            self.frame = 142;
+
+        self.frame = self.frame +1;
+
+        self.angles_y += bound(-10,shortangle_f(real_angle_y,self.angles_y),10);
+        self.angles_x += bound(-10,shortangle_f(real_angle_x,self.angles_x),10);
+
+        movelib_move_simple(v_forward, cvar("g_turrets_unit_walker_speed_swim"),0.3);
+        vz = self.velocity_z + sin(time * 4) * 8;
+
+        if (self.frame > 151)
+            self.frame = 146;
+
+        break;
+
+    case ANIM_RUN:
+
+        if ((self.frame < 5) || (self.frame > 25))
+            self.frame = 5;
+
+        self.angles_y += bound(-5,shortangle_f(real_angle_y,self.angles_y),5);
+        movelib_move_simple(v_forward, cvar("g_turrets_unit_walker_speed_run"),0.6);
+
+        if (self.frame > 25)
+            self.frame = 5;
+
+        break;
+
+    case ANIM_STRAFE_L:
+        if ((self.frame < 30) || (self.frame > 55))
+            self.frame = 30;
+
+        self.frame = self.frame + 1;
+        self.angles_y += bound(-2.5,shortangle_f(real_angle_y,self.angles_y),2.5);
+        movelib_move_simple(v_right * -1, cvar("g_turrets_unit_walker_speed_walk"),0.8);
+
+        if (self.frame > 55)
+            self.frame = 35;
+        break;
+
+    case ANIM_STRAFE_R:
+        if ((self.frame < 60) || (self.frame > 65))
+            self.frame = 60;
+
+        self.frame = self.frame + 1;
+        self.angles_y += bound(-2.5,shortangle_f(real_angle_y,self.angles_y),2.5);
+        movelib_move_simple(v_right, cvar("g_turrets_unit_walker_speed_walk"),0.8);
+
+        if (self.frame > 85)
+            self.frame = 65;
+
+        break;
+
+    case ANIM_JUMP:
+        if ((self.frame < 95) || (self.frame > 100))
+            self.frame = 95;
+
+        self.velocity += '0 0 1' * cvar("g_turrets_unit_walker_speed_jump");
+
+        if (self.frame > 100)
+            self.frame = self.frame + 1;
+
+        break;
+
+    case ANIM_LAND:
+        if ((self.frame < 100) || (self.frame > 107))
+            self.frame = 100;
+
+        self.frame = self.frame + 1;
+
+        if (self.frame > 107)
+            self.animflag = ANIM_NO;
+
+        break;
+
+    case ANIM_PAIN:
+        if ((self.frame < 60) || (self.frame > 95))
+            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 > 140))
+            self.frame = 123;
+
+        movelib_beak_simple(cvar("g_turrets_unit_walker_speed_stop"));
+
+        self.frame = self.frame + 2;
+
+        if (self.frame == 133)
+            walker_meele_do_dmg();
+
+        if (self.frame > 140)
+        {
+            self.animflag = ANIM_NO;
+            self.frame = 0;
+        }
+    }
+
+    self.velocity_z = vz;
+
+    if (self.flags & FL_ONGROUND)
+        movelib_groundalign4point(300,100,0.25);
+
+}
+
+
+void walker_rocket_explode()
+{
+    vector org2;
+
+    if (self.event_damage != SUB_Null)
+    {
+        self.event_damage = SUB_Null;
+        self.think = walker_rocket_explode;
+        self.nextthink = time;
+        return;
+    }
+
+    sound (self, CHAN_PROJECTILE, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
+    org2 = findbetterlocation (self.origin, 16);
+
+    pointparticles(particleeffectnum("rocket_explode"), org2, '0 0 0', 1);
+    //w_deathtypestring = "got blasted to oblivion";
+    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();
+}
+
+#define WALKER_ROCKET_MOVE movelib_move_simple(newdir,cvar("g_turrets_unit_walker_std_rocket_speed"),cvar("g_turrets_unit_walker_std_rocket_tunrate")); UpdateCSQCProjectile(self)
+void walker_rocket_loop();
+void walker_rocket_think()
+{
+    vector newdir;
+    float edist;
+    float itime;
+    float m_speed;
+
+    self.nextthink = time;
+
+    edist = vlen(self.enemy.origin - self.origin);
+
+    // Simulate crude 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 (self.shot_dmg != 1337)
+        if (random() < 0.01)
+        {
+            walker_rocket_loop();
+            return;
+        }
+
+    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;
+    }
+
+    if (self.enemy)
+    {
+        itime = max(edist / m_speed,1);
+        newdir = steerlib_pull(self.enemy.origin + self.tur_shotorg);
+    }
+    else
+    {
+        newdir  = normalize(self.velocity);
+    }
+
+    WALKER_ROCKET_MOVE;
+}
+
+void walker_rocket_loop3()
+{
+    vector newdir;
+    self.nextthink = time;
+
+    if (self.tur_health < time)
+    {
+        self.think = walker_rocket_explode;
+        return;
+    }
+
+    if (vlen(self.origin - self.tur_shotorg) < 128 )
+    {
+        self.think = walker_rocket_think;
+        return;
+    }
+
+    newdir = steerlib_pull(self.tur_shotorg);
+    WALKER_ROCKET_MOVE;
+
+    self.angles = vectoangles(self.velocity);
+}
+
+void walker_rocket_loop2()
+{
+    vector newdir;
+
+    self.nextthink = time;
+
+    if (self.tur_health < time)
+    {
+        self.think = walker_rocket_explode;
+        return;
+    }
+
+    if (vlen(self.origin - self.tur_shotorg) < 128 )
+    {
+        self.tur_shotorg = self.origin - '0 0 200';
+        self.think = walker_rocket_loop3;
+        return;
+    }
+
+    newdir = steerlib_pull(self.tur_shotorg);
+    WALKER_ROCKET_MOVE;
+}
+
+void walker_rocket_loop()
+{
+    self.nextthink = time;
+    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;
+
+    te_explosion (org);
+
+    rocket = spawn ();
+    setorigin(rocket, org);
+
+    sound (self, CHAN_WEAPON, "weapons/hagar_fire.wav", VOL_BASE, ATTN_NORM);
+    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             = 25;
+    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.event_damage       = walker_rocket_damage;
+
+    rocket.nextthink          = time;// + 0.25;
+    rocket.movetype           = MOVETYPE_FLY;
+    rocket.velocity           = normalize((v_forward + v_up * 0.5) + (randomvec() * 0.2)) * 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;
+
+    CSQCProjectile(rocket, FALSE, PROJECTILE_ROCKET, FALSE); // no culling, has fly sound
+}
+
+void rv_think()
+{
+    float f;
+    vector org;
+    entity oldself;
+
+    if (self.owner.deadflag != DEAD_NO)
+    {
+        remove(self);
+        return;
+    }
+
+    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 = gettaginfo(self.owner,f);
+
+    self.nextthink = time + 0.2;
+    oldself = self;
+    self = self.owner;
+    walker_fire_rocket(org);
+    self = oldself;
+}
+
+float walker_moveverb_path(float eval)
+{
+    switch (eval)
+    {
+    case VCM_EVAL:
+
+        if (self.animflag == ANIM_MEELE)
+            return VS_CALL_NO;
+
+        if (self.pathcurrent)
+            return verb.verb_static_value;
+
+        return VS_CALL_NO;
+
+    case VCM_DO:
+        // Do we have a path?
+        if not(self.pathcurrent)
+        {
+            return VS_CALL_NO;
+        }
+        else
+        {
+            // Are we close enougth to a path node to switch to the next?
+            if (vlen(self.origin  - self.pathcurrent.origin) < 64)
+                if (self.pathcurrent.path_next == world)
+                {
+                    // Path endpoint reached
+                    pathlib_deletepath(self.pathcurrent.owner);
+                    self.pathcurrent = world;
+
+                    if (self.pathgoal)
+                    {
+                        if (self.pathgoal.use)
+                            self.pathgoal.use();
+
+                        if (self.pathgoal.enemy)
+                        {
+                            self.pathcurrent = WALKER_PATH(self.pathgoal.origin,self.pathgoal.enemy.origin);
+                            self.pathgoal = self.pathgoal.enemy;
+                        }
+                    }
+                    else
+                        self.pathgoal = world;
+                }
+                else
+                    self.pathcurrent = self.pathcurrent.path_next;
+        }
+
+
+        if (self.pathcurrent)
+        {
+            switch (self.waterlevel)
+            {
+            case 0:
+                self.animflag = ANIM_WALK;
+            case 1:
+            case 2:
+                if (self.animflag == ANIM_WALK)
+                    self.animflag = ANIM_WALK;
+                else
+                    self.animflag = ANIM_SWIM;
+                break;
+            case 3:
+                self.animflag = ANIM_SWIM;
+            }
+
+            self.moveto = self.pathcurrent.origin;
+            self.steerto = steerlib_attract2(self.moveto,0.5,500,0.95);
+
+            return VS_CALL_YES_DOING;
+        }
+        else
+            return VS_CALL_YES_DONE;
+
+    case VCM_REMOVE:
+
+        if (self.pathcurrent)
+            pathlib_deletepath(self.pathcurrent.owner);
+
+        self.pathcurrent = world;
+
+        return VS_CALL_YES_DONE;
+    }
+
+    return VS_CALL_YES_DONE;
+}
+
+float walker_moveverb_enemy(float eval)
+{
+    switch (eval)
+    {
+    case VCM_EVAL:
+
+        if (self.enemy)
+            if (self.spawnflags & TSF_NO_PATHBREAK)
+                if (self.pathcurrent)
+                    return VS_CALL_NO;
+
+        if (self.animflag == ANIM_MEELE)
+            return VS_CALL_NO;
+
+        if (self.enemy == world)
+            return VS_CALL_NO;
+
+        //if (tracewalk(self.enemy, self.origin, self.mins, self.maxs, self.enemy.origin, MOVE_NORMAL))
+        return verb.verb_static_value;
+
+        //return VS_CALL_NO;
+
+    case VCM_DO:
+        switch (self.waterlevel)
+        {
+        case 0:
+            if (self.tur_dist_enemy > 500)
+                self.animflag = ANIM_RUN;
+            else
+                self.animflag = ANIM_WALK;
+        case 1:
+        case 2:
+            if (self.animflag != ANIM_SWIM)
+                self.animflag = ANIM_WALK;
+            else
+                self.animflag = ANIM_SWIM;
+            break;
+        case 3:
+            self.animflag = ANIM_SWIM;
+        }
+
+        self.moveto = self.enemy.origin;
+        self.steerto = steerlib_attract2(self.moveto,0.5,500,0.95);
+
+        return VS_CALL_YES_DOING;
+    }
+
+    return VS_CALL_YES_DONE;
+}
+
+float walker_moveverb_idle_pause(float eval)
+{
+    switch (eval)
+    {
+    case VCM_EVAL:
+
+        if (self.animflag == ANIM_MEELE)
+            return VS_CALL_NO;
+
+        return verb.verb_static_value;
+
+    case VCM_DO:
+
+        self.moveto   = self.origin;
+        self.steerto  = v_forward;
+        self.animflag = ANIM_NO;
+
+        return VS_CALL_YES_DOING;
+    }
+
+    return VS_CALL_YES_DONE;
+}
+
+float walker_moveverb_idle_roam(float eval)
+{
+    switch (eval)
+    {
+    case VCM_EVAL:
+
+        if (self.animflag == ANIM_MEELE)
+            return VS_CALL_NO;
+
+        return verb.verb_static_value;
+
+    case VCM_DO:
+        if(verb.wait < time)
+        {
+            trace_fraction = 0;
+            while(trace_fraction != 1.0)
+            {
+                self.moveto = self.origin + (v_forward * 256);
+                self.moveto += v_right * (random() * 256);
+                self.moveto -= v_right * (random() * 256);
+
+                tracebox(self.origin+'0 0 64',self.mins,self.maxs,self.moveto + '0 0 64',MOVE_NORMAL,self);
+            }
+            verb.wait = time + 10;
+        }
+        else
+        {
+            if(verb.wait - time < 9)
+                if(vlen(self.moveto - self.origin) < 32)
+                {
+                    verbstack_push(self.walker_verbs_move, walker_moveverb_idle_pause,   WVM_IDLE + WVM_IDLE_UP, random() * (verb.wait - time), self);
+                    self.animflag = ANIM_NO;
+                    return VS_CALL_REMOVE;
+                }
+        }
+
+        self.steerto = steerlib_attract(self.moveto,256);
+        te_lightning1(self,self.origin + '0 0 64',self.moveto + '0 0 64');
+
+
+
+        switch (self.waterlevel)
+        {
+        case 0:
+            self.animflag = ANIM_ROAM;
+        case 1:
+        case 2:
+            if (self.animflag != ANIM_SWIM)
+                self.animflag = ANIM_ROAM;
+
+            break;
+        case 3:
+            self.animflag = ANIM_SWIM;
+        }
+
+        return VS_CALL_YES_DOING;
+    }
+
+    return VS_CALL_YES_DONE;
+}
+
+float walker_moveverb_idle(float eval)
+{
+    switch (eval)
+    {
+    case VCM_EVAL:
+
+        if (self.animflag == ANIM_MEELE)
+            return VS_CALL_NO;
+
+        return verb.verb_static_value;
+
+    case VCM_DO:
+
+        //if (random() < 0.5)
+            verbstack_push(self.walker_verbs_move, walker_moveverb_idle_pause,   WVM_IDLE + WVM_IDLE_UP, random() * 5, self);
+        //else
+        //    verbstack_push(self.walker_verbs_move, walker_moveverb_idle_roam,   WVM_IDLE + WVM_IDLE_UP,  random() * 15);
+
+        return VS_CALL_YES_DOING;
+    }
+
+    return VS_CALL_YES_DONE;
+}
+
+float walker_attackverb_meele(float eval)
+{
+    switch (eval)
+    {
+    case VCM_EVAL:
+
+        vector wish_angle;
+
+        if (cvar("g_turrets_nofire"))
+            return VS_CALL_NO;
+
+        if (self.animflag == ANIM_SWIM || self.animflag == ANIM_MEELE)
+            return VS_CALL_NO;
+
+        if (!self.enemy)
+            return VS_CALL_NO;
+
+        wish_angle = angleofs(self,self.enemy);
+
+        if (self.tur_dist_enemy < cvar("g_turrets_unit_walker_std_meele_range"))
+            if (fabs(wish_angle_y) < 15)
+                return verb.verb_static_value;
+
+        return VS_CALL_NO;
+
+    case VCM_DO:
+
+        self.moveto   = self.enemy.origin;
+        self.steerto  = steerlib_attract2(self.moveto,0.5,500,0.95);
+        self.animflag = ANIM_MEELE;
+
+        return VS_CALL_YES_DOING;
+    }
+
+    return VS_CALL_YES_DONE;
+}
+
+float walker_attackverb_rockets(float eval)
+{
+    switch (eval)
+    {
+    case VCM_EVAL:
+        if (self.tur_head.attack_finished_single > time)
+            return VS_CALL_NO;
+
+        if not(self.enemy)
+            return VS_CALL_NO;
+
+        if (cvar("g_turrets_nofire"))
+            return VS_CALL_NO;
+
+        if (self.tur_dist_enemy < cvar("g_turrets_unit_walker_std_rockets_range_min"))
+            return VS_CALL_NO;
+
+        if (self.tur_dist_enemy > cvar("g_turrets_unit_walker_std_rockets_range"))
+            return VS_CALL_NO;
+
+        return verb.verb_static_value;
+
+    case VCM_DO:
+
+        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");
+
+        return VS_CALL_YES_DONE;
+    }
+
+    return VS_CALL_YES_DONE;
+}
+
+void walker_postthink()
+{
+
+    self.angles_x *= -1;
+    makevectors(self.angles);
+    self.angles_x *= -1;
+
+    verbstack_pop(self.walker_verbs_attack);
+    verbstack_pop(self.walker_verbs_move);
+
+    walker_animate();
+}
+
+void walker_attack()
+{
+    entity flash;
+
+    //w_deathtypestring = "was miniguned";
+    sound (self, CHAN_WEAPON, "weapons/uzi_fire.wav", VOL_BASE, ATTN_NORM);
+    fireBallisticBullet (self.tur_shotorg, self.tur_shotdir_updated,self.shot_spread, self.shot_speed, 5, self.shot_dmg, 0, self.shot_force, DEATH_TURRET, 0, 1, cvar("g_balance_uzi_bulletconstant"));
+    if (self.uzi_bulletcounter == 2)
+    {
+
+        flash = spawn();
+
+        setmodel(flash, "models/uziflash.md3");
+        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 = 0;
+    }
+
+    self.uzi_bulletcounter = self.uzi_bulletcounter + 1;
+    self.tur_head.frame    = self.tur_head.frame + 1;
+}
+
+
+void walker_respawnhook()
+{
+    vector vtmp;
+    entity e;
+
+    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.wkr_spawn.origin;
+    vtmp_z += self.wkr_spawn.maxs_z;
+    setorigin(self,vtmp);
+
+    if (self.target != "")
+    {
+        e = find(world,targetname,self.target);
+        if (!e)
+        {
+            dprint("Warning! initital waypoint for Walker does NOT exsist!\n");
+            self.target = "";
+        }
+
+        if (e.classname != "turret_checkpoint")
+            dprint("Warning: not a turrret path\n");
+        else
+        {
+            self.pathcurrent = WALKER_PATH(self.origin,e.origin);
+            self.pathgoal = e;
+        }
+    }
+}
+void walker_diehook()
+{
+    turret_trowgib2(self.origin,self.velocity + v_up * 200,'-0.6 -0.2 -02',self,time + random() * 1);
+    turret_trowgib2(self.origin + '0 0 64',self.velocity + v_forward * 150 + v_up * 150,'-0.2 -0.2 -02',self.tur_head,time + random() * 2 + 3);
+
+    if (self.pathcurrent)
+        pathlib_deletepath(self.pathcurrent.owner);
+
+    self.pathcurrent = world;
+
+    if (self.damage_flags & TFL_DMG_DEATH_NORESPAWN)
+    {
+        remove(self.wkr_spawn);
+
+        verbstack_flush(self.walker_verbs_move);
+        verbstack_flush(self.walker_verbs_attack);
+        verbstack_flush(self.walker_verbs_idle);
+
+        remove(self.walker_verbs_move);
+        remove(self.walker_verbs_attack);
+        remove(self.walker_verbs_idle);
+    }
+
+}
+
+void turret_walker_dinit()
+{
+
+    entity e;
+
+    if (self.netname == "")      self.netname     = "Walker Turret";
+    self.wkr_spawn = spawn();
+
+    self.ammo_flags = TFL_AMMO_BULLETS | TFL_AMMO_RECHARGE | TFL_AMMO_RECIVE;
+    self.turrcaps_flags = TFL_TURRCAPS_PLAYERKILL | TFL_TURRCAPS_MOVE | TFL_TURRCAPS_HEADATTACHED;
+    self.aim_flags = TFL_AIM_LEAD;
+
+    if (cvar("g_antilag_bullets"))
+        self.turrcaps_flags |= TFL_TURRCAPS_HITSCAN;
+    else
+        self.aim_flags      |= TFL_AIM_SHOTTIMECOMPENSATE;
+
+
+    self.turret_respawnhook = walker_respawnhook;
+    self.turret_diehook = walker_diehook;
+
+    self.ticrate = 0.05;
+    if (turret_stdproc_init("walker_std",0) == 0)
+    {
+        remove(self);
+        return;
+    }
+
+    self.walker_verbs_move   = spawn();
+    self.walker_verbs_attack = spawn();
+    self.walker_verbs_idle   = spawn();
+
+    verbstack_push(self.walker_verbs_move, walker_moveverb_idle,   WVM_IDLE,  0, self);
+    verbstack_push(self.walker_verbs_move, walker_moveverb_enemy,  WVM_ENEMY, 0, self);
+    verbstack_push(self.walker_verbs_move, walker_moveverb_path,   WVM_PATH,  0, self);
+
+    verbstack_push(self.walker_verbs_attack, walker_attackverb_meele,   WVA_MEELE,  0, self);
+    verbstack_push(self.walker_verbs_attack, walker_attackverb_rockets, WVA_ROCKET, 0, self);
+
+    self.damage_flags |= TFL_DMG_DEATH_NOGIBS;
+
+    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.iscreature = TRUE;
+    self.movetype   = MOVETYPE_WALK;
+    self.solid      = SOLID_SLIDEBOX;
+    self.takedamage = DAMAGE_AIM;
+
+    setmodel(self,"models/turrets/walker_body.md3");
+    setmodel(self.tur_head,"models/turrets/walker_head_minigun.md3");
+    setmodel(self.wkr_spawn,"models/turrets/walker_spawn.md3");
+
+    setattachment(self.tur_head,self,"tag_head");
+
+    self.wkr_spawn.angles   = self.angles;
+    self.wkr_spawn.solid    = SOLID_NOT;
+
+    traceline(self.origin + '0 0 16', self.origin - '0 0 10000', MOVE_WORLDONLY, self);
+    setorigin(self.wkr_spawn,trace_endpos + '0 0 4');
+    setorigin(self,self.wkr_spawn.origin);
+
+    setsize(self,WALKER_MIN,WALKER_MAX);
+
+    self.idle_aim = '0 0 0';
+    self.turret_firecheckfunc = walker_firecheck;
+    self.turret_firefunc      = walker_attack;
+    self.turret_postthink     = walker_postthink;
+
+    if (self.target != "")
+    {
+        e = find(world,targetname,self.target);
+        if (!e)
+        {
+            dprint("Initital waypoint for walker does NOT exsist, fix your map!\n");
+            self.target = "";
+        }
+
+        if (e.classname != "turret_checkpoint")
+            dprint("Warning: not a turrret path\n");
+        else
+        {
+            self.pathcurrent = WALKER_PATH(self.origin,e.origin);
+            self.pathgoal = e;
+        }
+    }
+}
+
+
+void spawnfunc_turret_walker()
+{
+    g_turrets_common_precash();
+
+    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");
+    precache_sound ( "weapons/rocket_impact.wav" );
+
+    self.think = turret_walker_dinit;
+    self.nextthink = time + 0.5;
+}


Property changes on: branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_walker.qc
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: branches/nexuiz-2.0/data/qcsrc/server/vehicles/racer.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/vehicles/racer.qc	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/qcsrc/server/vehicles/racer.qc	2009-07-11 14:59:28 UTC (rev 7191)
@@ -1,26 +1,26 @@
-#define RACER_MIN '-40 -40 0'
-#define RACER_MAX '40 40 44'
-
-void racer_exit(float eject);
-void racer_enter();
-
+#define RACER_MIN '-40 -40 0'
+#define RACER_MAX '40 40 44'
+
+void racer_exit(float eject);
+void racer_enter();
+
 float  jetfromtag_power;
 float  jetfromtag_normpower;
-float  jetfromtag_nosolid;
+float  jetfromtag_nosolid;
 vector jetfromtag_origin;
-
-vector jetfromtag(string tagname,float jet_length,float air_power,float solid_power)
-{
+
+vector jetfromtag(string tagname,float jet_length,float air_power,float solid_power)
+{
     vector force_dir;
-    float  air_frac, solid_frac, air_pwr, solid_pwr;
-
+    float  air_frac, solid_frac, air_pwr, solid_pwr;
+
     jetfromtag_origin = gettaginfo(self,gettagindex(self,tagname));
     v_forward = normalize(v_forward);
-
-    force_dir = jetfromtag_origin - v_forward * jet_length;
-    traceline(jetfromtag_origin, force_dir, MOVE_NORMAL, self);
-
-    solid_frac = 1 - trace_fraction;
+
+    force_dir = jetfromtag_origin - v_forward * jet_length;
+    traceline(jetfromtag_origin, force_dir, MOVE_NORMAL, self);
+
+    solid_frac = 1 - trace_fraction;
     air_frac   = trace_fraction;
 
     if(solid_frac < 0.1)
@@ -32,39 +32,39 @@
     jetfromtag_power     = solid_pwr + air_pwr;
     jetfromtag_normpower = jetfromtag_power / (air_power+solid_power);
     if(trace_fraction == 1)
-        return v_forward;
-    else
-        return v_forward * (jetfromtag_power + cvar("g_vehicle_racer_power_min"));
-}
-
-void racer_align4point(float spring_length,float spring_up,float blendrate)
-{
+        return v_forward;
+    else
+        return v_forward * (jetfromtag_power + cvar("g_vehicle_racer_power_min"));
+}
+
+void racer_align4point(float spring_length,float spring_up,float blendrate)
+{
     vector fl_org,fl_force,fr_org,fr_force,bl_org,bl_force,br_org,br_force;
-    vector push_vector,align;
-    float fl_push, fr_push, bl_push, br_push;
+    vector push_vector,align;
+    float fl_push, fr_push, bl_push, br_push;
 
-    jetfromtag_nosolid = 0;
+    jetfromtag_nosolid = 0;
 
-    fr_force = jetfromtag("tag_engine_fr",spring_length,cvar("g_vehicle_racer_power_air"), cvar("g_vehicle_racer_power_solid"));
+    fr_force = jetfromtag("tag_engine_fr",spring_length,cvar("g_vehicle_racer_power_air"), cvar("g_vehicle_racer_power_solid"));
     fr_org   = jetfromtag_origin; fr_push = jetfromtag_normpower;
-
+
     fl_force = jetfromtag("tag_engine_fl",spring_length,cvar("g_vehicle_racer_power_air"), cvar("g_vehicle_racer_power_solid"));
     fl_org   = jetfromtag_origin; fl_push = jetfromtag_normpower;
 
     br_force = jetfromtag("tag_engine_br",spring_length,cvar("g_vehicle_racer_power_air"), cvar("g_vehicle_racer_power_solid"));
     br_org   = jetfromtag_origin; br_push = jetfromtag_normpower;
-
+
     bl_force = jetfromtag("tag_engine_bl",spring_length,cvar("g_vehicle_racer_power_air"), cvar("g_vehicle_racer_power_solid"));
     bl_org   = jetfromtag_origin; bl_push = jetfromtag_normpower;
 
     push_vector = fr_force + fl_force + br_force + bl_force;
 
-    align = align;
-
+    align = align;
+
     align_x = (fl_push - bl_push);
     align_x += (fr_push - br_push);
     align_x *= 360;
-
+
     align_z = (fl_push - fr_push);
     align_z += (bl_push - br_push);
     align_z *= 360;
@@ -76,354 +76,354 @@
     self.angles_z += align_z * frametime;
 
     self.velocity =  self.velocity + (push_vector * frametime);
-    self.velocity_z -= sv_gravity * frametime;
-}
-
-void racer_damage(entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force)
-{
-    self.velocity += force;
-}
-
-float racer_pplug()
-{
-    entity player,racer;
-    float ftmp,ftmp2;
-
-
-    player = self;
-    racer = self.vehicle;
-    player.fixangle = FALSE;
-
-    player.BUTTON_ZOOM = 0;
-    player.BUTTON_CROUCH = 0;
-
-    self = racer;
-
-    if(player.BUTTON_USE)
-    {
-        self = racer;
-        racer_exit(0);
-        self = player;
-        return 0;
-    }
-
-    racer.angles_x *= -1;
-    makevectors(racer.angles);
-    racer.angles_x *= -1;
-
-    // Turn Body
-    ftmp = cvar("g_vehicle_racer_turnspeed") / server_fps;
-    ftmp2 = ftmp * -1;
-
-    ftmp = bound(ftmp2,shortangle_f(player.v_angle_y - racer.angles_y,racer.angles_y),ftmp);
-
-    {
-        racer.angles_y = safeangle(racer.angles_y + ftmp);
-        if(player.BUTTON_JUMP)
-        {
-            player.BUTTON_JUMP = 0;
-            racer.velocity  = racer.velocity  + v_forward * 250 + v_up * 600;
-        }
-        else
-        {
-            if(vlen(player.movement) == 0)
-            {
-                self = racer;
-                ftmp = self.velocity_z;
-                self.velocity = self.velocity - self.velocity * cvar("g_vehicle_racer_speed_stop");
-                self.velocity_z = ftmp;
-            }
-            else
-            {
-
-                if(player.movement_x != 0)
-                {
-                    if(player.movement_x > 0)
-                        player.movement_x = 1;
-                    else if(player.movement_x < 0)
-                        player.movement_x = -1;
-                }
-
-                if(player.movement_y != 0)
-                {
-                    if(player.movement_y < 0)
-                        player.movement_y = -1;
-                    else if(player.movement_y > 0)
-                        player.movement_y = 1;
-                }
-
-                self = racer;
-                self.velocity  = self.velocity + ((v_right * player.movement_y) * cvar("g_vehicle_racer_speed_strafe")) * frametime;
-                self.velocity  = self.velocity + ((v_forward * player.movement_x) * cvar("g_vehicle_racer_speed_forward")) * frametime;
-            }
-        }
-        self = racer;
+    self.velocity_z -= sv_gravity * frametime;
+}
+
+void racer_damage(entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force)
+{
+    self.velocity += force;
+}
+
+float racer_pplug()
+{
+    entity player,racer;
+    float ftmp,ftmp2;
+
+
+    player = self;
+    racer = self.vehicle;
+    player.fixangle = FALSE;
+
+    player.BUTTON_ZOOM = 0;
+    player.BUTTON_CROUCH = 0;
+
+    self = racer;
+
+    if(player.BUTTON_USE)
+    {
+        self = racer;
+        racer_exit(0);
+        self = player;
+        return 0;
     }
-
-    vector df;
-
-    self = racer;
 
+    racer.angles_x *= -1;
+    makevectors(racer.angles);
+    racer.angles_x *= -1;
+
+    // Turn Body
+    ftmp = cvar("g_vehicle_racer_turnspeed") / server_fps;
+    ftmp2 = ftmp * -1;
+
+    ftmp = bound(ftmp2,shortangle_f(player.v_angle_y - racer.angles_y,racer.angles_y),ftmp);
+
+    {
+        racer.angles_y = safeangle(racer.angles_y + ftmp);
+        if(player.BUTTON_JUMP)
+        {
+            player.BUTTON_JUMP = 0;
+            racer.velocity  = racer.velocity  + v_forward * 250 + v_up * 600;
+        }
+        else
+        {
+            if(vlen(player.movement) == 0)
+            {
+                self = racer;
+                ftmp = self.velocity_z;
+                self.velocity = self.velocity - self.velocity * cvar("g_vehicle_racer_speed_stop");
+                self.velocity_z = ftmp;
+            }
+            else
+            {
+
+                if(player.movement_x != 0)
+                {
+                    if(player.movement_x > 0)
+                        player.movement_x = 1;
+                    else if(player.movement_x < 0)
+                        player.movement_x = -1;
+                }
+
+                if(player.movement_y != 0)
+                {
+                    if(player.movement_y < 0)
+                        player.movement_y = -1;
+                    else if(player.movement_y > 0)
+                        player.movement_y = 1;
+                }
+
+                self = racer;
+                self.velocity  = self.velocity + ((v_right * player.movement_y) * cvar("g_vehicle_racer_speed_strafe")) * frametime;
+                self.velocity  = self.velocity + ((v_forward * player.movement_x) * cvar("g_vehicle_racer_speed_forward")) * frametime;
+            }
+        }
+        self = racer;
+    }
+
+    vector df;
+
+    self = racer;
+
     df = vlen(self.velocity) * cvar("g_vehicle_racer_downforce") * v_up;
-    self.velocity = self.velocity - df;
-    player.movement = racer.velocity;
-    racer_align4point(cvar("g_vehicle_racer_springlength"),100,cvar("g_vehicle_racer_inert"));
-
-    if(cvar("g_vehicle_racer_drag"))
+    self.velocity = self.velocity - df;
+    player.movement = racer.velocity;
+    racer_align4point(cvar("g_vehicle_racer_springlength"),100,cvar("g_vehicle_racer_inert"));
+
+    if(cvar("g_vehicle_racer_drag"))
         self.velocity  = movelib_dragvec(cvar("g_vehicle_racer_drag"),cvar("g_vehicle_racer_dragexp"));
 
-    self = player;
-    player.BUTTON_ATCK = player.BUTTON_ATCK2 = 0;
-    setorigin(player,racer.origin + '0 0 32');
-    player.velocity = racer.velocity;
-
-    return 1;
-}
-
-void racer_think()
-{
-    movelib_beak_simple(cvar("g_vehicle_racer_speed_stop"));
-
-    self.nextthink = time;
-}
-
-void racer_enter()
-{
-    self.owner = other;
-    self.owner.angles = self.angles;
-
-    //setattachment(other,self,"");
-    self.nextthink = 0;
-    self.think = SUB_Null;
-    self.owner.takedamage     = DAMAGE_NO;
-    self.owner.solid          = SOLID_NOT;
-    self.owner.movetype       = MOVETYPE_NOCLIP;
-    //setsize(self.owner,spiderbot_MIN,spiderbot_MAX);
-    self.owner.alpha          = -1;
-    self.owner.PlayerPhysplug = racer_pplug;
-    self.owner.vehicle        = self;
-    self.owner.event_damage   = SUB_Null;
-    //self.event_damage         = vehicle_stdproc_damage ;
-    self.colormap             = self.owner.colormap;
-    //self.tur_head.colormap    = self.owner.colormap;
-    //self.vehicle_hudmodel.viewmodelforclient = self.owner;
-    //self.owner.hud            = HUD_SPIDEBOT;
-    //self.owner.vehicle_health = (self.vehicle_health / cvar("g_vehicle_spiderbot_health"));
-    //self.owner.vehicle_shield = (self.vehicle_shield / cvar("g_vehicle_spiderbot_shield"));
-
-    //setorigin(self.owner,self.origin);
-    //setattachment(self.owner,self,"");
-    //setorigin(self.owner,'0 0 0');
-
-    msg_entity = other;
-    WriteByte (MSG_ONE, SVC_SETVIEWPORT);
-    WriteEntity( MSG_ONE, self.vehicle_viewport);
-
-    WriteByte (MSG_ONE, SVC_SETVIEWANGLES);  // 10 = SVC_SETVIEWANGLES
-    WriteAngle(MSG_ONE,  self.angles_x);    // tilt
-    WriteAngle(MSG_ONE,  self.angles_y);    // yaw
-    WriteAngle(MSG_ONE,  0);                // roll
-
-    //self.owner.view_ofs = '0 0 0';
-    //self.tur_head.nodrawtoclient = self.owner;
-}
-
-void racer_exit(float eject)
-{
-    self.velocity = '0 0 0';
-
-    msg_entity = self.owner;
-    WriteByte (MSG_ONE, SVC_SETVIEWPORT);
-    WriteEntity( MSG_ONE, self.owner);
-
-    WriteByte (MSG_ONE, SVC_SETVIEWANGLES);  // 10 = SVC_SETVIEWANGLES
-    WriteAngle(MSG_ONE,  0);                // tilt
-    WriteAngle(MSG_ONE,  self.angles_y);    // yaw
-    WriteAngle(MSG_ONE,  0);                // roll
-
-    self.think = racer_think;
-    self.nextthink = time;
-
-    self.owner.takedamage     = DAMAGE_AIM;
-    self.owner.solid          = SOLID_SLIDEBOX;
-    self.owner.movetype       = MOVETYPE_WALK;
-
-    setsize(self.owner,PL_MIN,PL_MAX);
-
-    self.owner.alpha          = 1;
-    self.owner.PlayerPhysplug = SUB_Null;
-    self.owner.vehicle        = world;
-	self.owner.view_ofs       = PL_VIEW_OFS;
-	self.owner.event_damage   = PlayerDamage;
-	//self.owner.hud            = HUD_NORMAL;
-
-	self.colormap            = 1024;
-	//self.tur_head.colormap = 1024;
-
-	//self.vehicle_hudmodel.viewmodelforclient = self;
-	//self.tur_head.nodrawtoclient             = self;
-    setattachment(self.owner,world,"");
-
-	if(eject)
-	{
-	    makevectors(self.angles);
-	    setorigin(self.owner,self.origin + v_forward * 100);
-	    self.owner.velocity = (v_up + v_forward * 0.25) * 750;
-	}
-	else
-        setorigin(self.owner,self.origin + '0 0 64' - v_forward * 200);
-
-    self.owner = world;
-}
-
-
-void racer_touch()
-{
-    if(self.owner)
-    {
-        if(vlen(self.velocity) == 0)
-            return;
-
-        if(other.classname != "player")
-            return;
-
-        vector a;
-        a = normalize(other.origin - self.origin);
-        a = a - normalize(self.velocity);
-
-        return;
-    }
-
-    if(other.classname != "player")
-        return;
-
-    if(other.deadflag != DEAD_NO)
-        return;
-
-    if(other.vehicle != world)
-        return;
-
-    racer_enter();
-}
-
-/*
-float racer_customizeentityforclient()
-{
-    if(self.deadflag == DEAD_DEAD)
-        return FALSE;
-
-    return TRUE;
-}
-*/
-
-void racer_damage(entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force);
-void racer_spawn()
-{
-    self.think = racer_think;
-    self.nextthink = time;
-
-    //self.vehicle_health = CCVAR("_health");
-    //self.vehicle_shield = CCVAR("_shield");
-    //self.event_damage = vehicle_stdproc_damage;
-    self.event_damage = racer_damage;
-    //self.iscreature = TRUE;
-    self.scale = 0.5;
-    self.movetype   = MOVETYPE_FLY;
-    self.solid      = SOLID_SLIDEBOX;
-    //self.takedamage = DAMAGE_AIM;
-    self.touch      = racer_touch;
-    //self.alpha = self.tur_head.alpha = self.gun1.alpha = self.gun2.alpha = 1;
-    self.alpha = 1;
-    //self.tur_head.angles = '0 0 0';
-	//self.colormap = 1024;
-	//self.tur_head.colormap = 1024;
-	self.deadflag    = DEAD_NO;
-    self.bot_attack = TRUE;
-    setorigin(self,self.origin + '0 0 128');
-    setsize(self,RACER_MIN*0.5,RACER_MAX*0.5);
-    setorigin(self,self.tur_aimpos);
-    pointparticles(particleeffectnum("teleport"), self.origin + '0 0 64', '0 0 0', 1);
-}
-
-void racer_blowup()
-{
-    /*
-    sound (self, CHAN_PROJECTILE, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
-    pointparticles(particleeffectnum("rocket_explode"), findbetterlocation (self.origin, 16), '0 0 0', 1);
-
-    //RadiusDamage (self, self.owner, self.owner.shot_dmg, self.owner.shot_dmg * 0.5, self.owner.shot_radius, world, self.owner.shot_force, DEATH_TURRET, world);
-    RadiusDamage (self, self, 250, 15, 250, world, 250, DEATH_TURRET, world);
-
-    self.alpha = self.tur_head.alpha = self.gun1.alpha = self.gun2.alpha = -1;
-    self.nextthink  = time + 10;
-    self.think      = spiderbot_spawn;
-
-    setorigin(self,self.tur_aimpos);
-    */
-}
-
-void racer_die()
-{
-
-    /*
-    self.health = 0;
-    self.event_damage = SUB_Null;
-    self.iscreature = FALSE;
-    self.solid      = SOLID_NOT;
-    self.takedamage = DAMAGE_NO;
-    self.touch      = SUB_Null;
-    self.nextthink  = time + random() * 2;
-    self.think      = spiderbot_blowup;
-    self.deadflag    = DEAD_DEAD;
-	self.vehicle_hudmodel.viewmodelforclient = self;
-	self.frame = 0;
-	self.tur_head.frame = 0;
-	*/
-}
-
-void racer_dinit()
-{
-
-    server_fps = (1 / sys_ticrate);
-
-    /*
-    addstat(STAT_HUD, AS_INT,  hud);
-	addstat(STAT_SPIDERBOT_ROCKETS, AS_INT,   rockets);
-	addstat(STAT_SPIDERBOT_RELOAD,  AS_FLOAT, rockets_reload);
-	addstat(STAT_SPIDERBOT_HEAT,    AS_FLOAT, vehicle_heat);
-	addstat(STAT_SPIDERBOT_HEALTH,  AS_FLOAT, vehicle_health);
-	addstat(STAT_SPIDERBOT_SHIELD,  AS_FLOAT, vehicle_shield);
-	*/
-
-    if (self.netname == "")      self.netname     = "Race PoD";
-
-    self.vehicle_viewport = spawn();
-    self.event_damage = racer_damage;
-    //self.gravity = 2;
-    //self.vehicle_hudmodel = spawn();
-    //self.vehicle_flags = VHF_HASSHIELD | VHF_SHIELDREGEN | VHF_HEALTHREGEN;
-    //self.cvar_basename = "g_vehicle_spiderbot";
-
-    setmodel (self.vehicle_viewport, "models/null.md3");
-    setmodel(self,"models/racers/waka.dpm");
-
-    setattachment(self.vehicle_viewport,self,"");
-    //self.tur_head.customizeentityforclient = spiderbot_customizeentityforclient;
-
-    setorigin(self.vehicle_viewport,'-400 0 40');
-    self.tur_aimpos = self.origin;
-    racer_spawn();
-
-    //self.vehicle_die = spiderbot_die;
-    //self.vehicle_exit = spiderbot_exit;
-}
-
-void spawnfunc_racer()
-{
-    g_turrets_common_precash();
-
-    precache_model ( "models/racers/waka.dpm");
-
-    self.think = racer_dinit;
-    self.nextthink = time + 0.5;
-}
+    self = player;
+    player.BUTTON_ATCK = player.BUTTON_ATCK2 = 0;
+    setorigin(player,racer.origin + '0 0 32');
+    player.velocity = racer.velocity;
+
+    return 1;
+}
+
+void racer_think()
+{
+    movelib_beak_simple(cvar("g_vehicle_racer_speed_stop"));
+
+    self.nextthink = time;
+}
+
+void racer_enter()
+{
+    self.owner = other;
+    self.owner.angles = self.angles;
+
+    //setattachment(other,self,"");
+    self.nextthink = 0;
+    self.think = SUB_Null;
+    self.owner.takedamage     = DAMAGE_NO;
+    self.owner.solid          = SOLID_NOT;
+    self.owner.movetype       = MOVETYPE_NOCLIP;
+    //setsize(self.owner,spiderbot_MIN,spiderbot_MAX);
+    self.owner.alpha          = -1;
+    self.owner.PlayerPhysplug = racer_pplug;
+    self.owner.vehicle        = self;
+    self.owner.event_damage   = SUB_Null;
+    //self.event_damage         = vehicle_stdproc_damage ;
+    self.colormap             = self.owner.colormap;
+    //self.tur_head.colormap    = self.owner.colormap;
+    //self.vehicle_hudmodel.viewmodelforclient = self.owner;
+    //self.owner.hud            = HUD_SPIDEBOT;
+    //self.owner.vehicle_health = (self.vehicle_health / cvar("g_vehicle_spiderbot_health"));
+    //self.owner.vehicle_shield = (self.vehicle_shield / cvar("g_vehicle_spiderbot_shield"));
+
+    //setorigin(self.owner,self.origin);
+    //setattachment(self.owner,self,"");
+    //setorigin(self.owner,'0 0 0');
+
+    msg_entity = other;
+    WriteByte (MSG_ONE, SVC_SETVIEWPORT);
+    WriteEntity( MSG_ONE, self.vehicle_viewport);
+
+    WriteByte (MSG_ONE, SVC_SETVIEWANGLES);  // 10 = SVC_SETVIEWANGLES
+    WriteAngle(MSG_ONE,  self.angles_x);    // tilt
+    WriteAngle(MSG_ONE,  self.angles_y);    // yaw
+    WriteAngle(MSG_ONE,  0);                // roll
+
+    //self.owner.view_ofs = '0 0 0';
+    //self.tur_head.nodrawtoclient = self.owner;
+}
+
+void racer_exit(float eject)
+{
+    self.velocity = '0 0 0';
+
+    msg_entity = self.owner;
+    WriteByte (MSG_ONE, SVC_SETVIEWPORT);
+    WriteEntity( MSG_ONE, self.owner);
+
+    WriteByte (MSG_ONE, SVC_SETVIEWANGLES);  // 10 = SVC_SETVIEWANGLES
+    WriteAngle(MSG_ONE,  0);                // tilt
+    WriteAngle(MSG_ONE,  self.angles_y);    // yaw
+    WriteAngle(MSG_ONE,  0);                // roll
+
+    self.think = racer_think;
+    self.nextthink = time;
+
+    self.owner.takedamage     = DAMAGE_AIM;
+    self.owner.solid          = SOLID_SLIDEBOX;
+    self.owner.movetype       = MOVETYPE_WALK;
+
+    setsize(self.owner,PL_MIN,PL_MAX);
+
+    self.owner.alpha          = 1;
+    self.owner.PlayerPhysplug = SUB_Null;
+    self.owner.vehicle        = world;
+	self.owner.view_ofs       = PL_VIEW_OFS;
+	self.owner.event_damage   = PlayerDamage;
+	//self.owner.hud            = HUD_NORMAL;
+
+	self.colormap            = 1024;
+	//self.tur_head.colormap = 1024;
+
+	//self.vehicle_hudmodel.viewmodelforclient = self;
+	//self.tur_head.nodrawtoclient             = self;
+    setattachment(self.owner,world,"");
+
+	if(eject)
+	{
+	    makevectors(self.angles);
+	    setorigin(self.owner,self.origin + v_forward * 100);
+	    self.owner.velocity = (v_up + v_forward * 0.25) * 750;
+	}
+	else
+        setorigin(self.owner,self.origin + '0 0 64' - v_forward * 200);
+
+    self.owner = world;
+}
+
+
+void racer_touch()
+{
+    if(self.owner)
+    {
+        if(vlen(self.velocity) == 0)
+            return;
+
+        if(other.classname != "player")
+            return;
+
+        vector a;
+        a = normalize(other.origin - self.origin);
+        a = a - normalize(self.velocity);
+
+        return;
+    }
+
+    if(other.classname != "player")
+        return;
+
+    if(other.deadflag != DEAD_NO)
+        return;
+
+    if(other.vehicle != world)
+        return;
+
+    racer_enter();
+}
+
+/*
+float racer_customizeentityforclient()
+{
+    if(self.deadflag == DEAD_DEAD)
+        return FALSE;
+
+    return TRUE;
+}
+*/
+
+void racer_damage(entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force);
+void racer_spawn()
+{
+    self.think = racer_think;
+    self.nextthink = time;
+
+    //self.vehicle_health = CCVAR("_health");
+    //self.vehicle_shield = CCVAR("_shield");
+    //self.event_damage = vehicle_stdproc_damage;
+    self.event_damage = racer_damage;
+    //self.iscreature = TRUE;
+    self.scale = 0.5;
+    self.movetype   = MOVETYPE_FLY;
+    self.solid      = SOLID_SLIDEBOX;
+    //self.takedamage = DAMAGE_AIM;
+    self.touch      = racer_touch;
+    //self.alpha = self.tur_head.alpha = self.gun1.alpha = self.gun2.alpha = 1;
+    self.alpha = 1;
+    //self.tur_head.angles = '0 0 0';
+	//self.colormap = 1024;
+	//self.tur_head.colormap = 1024;
+	self.deadflag    = DEAD_NO;
+    self.bot_attack = TRUE;
+    setorigin(self,self.origin + '0 0 128');
+    setsize(self,RACER_MIN*0.5,RACER_MAX*0.5);
+    setorigin(self,self.tur_aimpos);
+    pointparticles(particleeffectnum("teleport"), self.origin + '0 0 64', '0 0 0', 1);
+}
+
+void racer_blowup()
+{
+    /*
+    sound (self, CHAN_PROJECTILE, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
+    pointparticles(particleeffectnum("rocket_explode"), findbetterlocation (self.origin, 16), '0 0 0', 1);
+
+    //RadiusDamage (self, self.owner, self.owner.shot_dmg, self.owner.shot_dmg * 0.5, self.owner.shot_radius, world, self.owner.shot_force, DEATH_TURRET, world);
+    RadiusDamage (self, self, 250, 15, 250, world, 250, DEATH_TURRET, world);
+
+    self.alpha = self.tur_head.alpha = self.gun1.alpha = self.gun2.alpha = -1;
+    self.nextthink  = time + 10;
+    self.think      = spiderbot_spawn;
+
+    setorigin(self,self.tur_aimpos);
+    */
+}
+
+void racer_die()
+{
+
+    /*
+    self.health = 0;
+    self.event_damage = SUB_Null;
+    self.iscreature = FALSE;
+    self.solid      = SOLID_NOT;
+    self.takedamage = DAMAGE_NO;
+    self.touch      = SUB_Null;
+    self.nextthink  = time + random() * 2;
+    self.think      = spiderbot_blowup;
+    self.deadflag    = DEAD_DEAD;
+	self.vehicle_hudmodel.viewmodelforclient = self;
+	self.frame = 0;
+	self.tur_head.frame = 0;
+	*/
+}
+
+void racer_dinit()
+{
+
+    server_fps = (1 / sys_ticrate);
+
+    /*
+    addstat(STAT_HUD, AS_INT,  hud);
+	addstat(STAT_SPIDERBOT_ROCKETS, AS_INT,   rockets);
+	addstat(STAT_SPIDERBOT_RELOAD,  AS_FLOAT, rockets_reload);
+	addstat(STAT_SPIDERBOT_HEAT,    AS_FLOAT, vehicle_heat);
+	addstat(STAT_SPIDERBOT_HEALTH,  AS_FLOAT, vehicle_health);
+	addstat(STAT_SPIDERBOT_SHIELD,  AS_FLOAT, vehicle_shield);
+	*/
+
+    if (self.netname == "")      self.netname     = "Race PoD";
+
+    self.vehicle_viewport = spawn();
+    self.event_damage = racer_damage;
+    //self.gravity = 2;
+    //self.vehicle_hudmodel = spawn();
+    //self.vehicle_flags = VHF_HASSHIELD | VHF_SHIELDREGEN | VHF_HEALTHREGEN;
+    //self.cvar_basename = "g_vehicle_spiderbot";
+
+    setmodel (self.vehicle_viewport, "models/null.md3");
+    setmodel(self,"models/racers/waka.dpm");
+
+    setattachment(self.vehicle_viewport,self,"");
+    //self.tur_head.customizeentityforclient = spiderbot_customizeentityforclient;
+
+    setorigin(self.vehicle_viewport,'-400 0 40');
+    self.tur_aimpos = self.origin;
+    racer_spawn();
+
+    //self.vehicle_die = spiderbot_die;
+    //self.vehicle_exit = spiderbot_exit;
+}
+
+void spawnfunc_racer()
+{
+    g_turrets_common_precash();
+
+    precache_model ( "models/racers/waka.dpm");
+
+    self.think = racer_dinit;
+    self.nextthink = time + 0.5;
+}


Property changes on: branches/nexuiz-2.0/data/qcsrc/server/vehicles/racer.qc
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: branches/nexuiz-2.0/data/qcsrc/server/vehicles/spiderbot.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/vehicles/spiderbot.qc	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/qcsrc/server/vehicles/spiderbot.qc	2009-07-11 14:59:28 UTC (rev 7191)
@@ -1,776 +1,776 @@
-#define MODEL_SPIDERBOT_FORWARD_START 1
-#define MODEL_SPIDERBOT_FORWARD_END 31
-#define MODEL_SPIDERBOT_FORWARD_LENGTH 31
-
-#define MODEL_SPIDERBOT_BACKWARDS_START 32
-#define MODEL_SPIDERBOT_BACKWARDS_END 62
-#define MODEL_SPIDERBOT_BACKWARDS_LENGTH 31
-
-#define MODEL_SPIDERBOT_LEFT_START 63
-#define MODEL_SPIDERBOT_LEFT_END 93
-#define MODEL_SPIDERBOT_LEFT_LENGTH 31
-
-#define MODEL_SPIDERBOT_RIGHT_START 94
-#define MODEL_SPIDERBOT_RIGHT_END 124
-#define MODEL_SPIDERBOT_RIGHT_LENGTH 31
-
-#define MODEL_SPIDERBOT_JUMP_START 125
-#define MODEL_SPIDERBOT_JUMP_END 155
-#define MODEL_SPIDERBOT_JUMP_LENGTH 31
-
-#define spiderbot_MIN '-75 -75 5'
-#define spiderbot_MAX '75 75 105'
-
-/*
-.void() anim_now;
-.void() anim_next;
-
-void spider_anim_idle()
-{
-    movelib_beak_simple(cvar("g_vehicle_spiderbot_speed_stop"));
-    if(self.anim_next != self.anim_now)
-        self.anim_now = self.anim_next;
-}
-
-void spider_anim_forward()
-{
-    movelib_move_simple(normalize(v_forward),cvar("g_vehicle_spiderbot_speed_walk"),cvar("g_vehicle_spiderbot_movement_inertia"));
-
-    if((self.frame < MODEL_SPIDERBOT_FORWARD_START) || (self.frame > MODEL_SPIDERBOT_FORWARD_END))
-        self.frame = MODEL_SPIDERBOT_FORWARD_START;
-    else
-        self.frame += 0.8;
-
-    if(self.frame > MODEL_SPIDERBOT_FORWARD_END)
-        self.anim_now = self.anim_next;
-}
-
-void spider_anim_backward()
-{
-    movelib_move_simple(normalize(v_forward * -1),cvar("g_vehicle_spiderbot_speed_walk"),cvar("g_vehicle_spiderbot_movement_inertia"));
-
-    if(self.frame < MODEL_SPIDERBOT_BACKWARDS_START)
-        self.frame = MODEL_SPIDERBOT_BACKWARDS_START;
-    else
-        self.frame += 0.8;
-
-    if(self.frame > MODEL_SPIDERBOT_BACKWARDS_END)
-        self.anim_now = self.anim_next;
-}
-
-void spider_anim_strafel()
-{
-    movelib_move_simple(normalize(v_right * -1),cvar("g_vehicle_spiderbot_speed_strafe"),cvar("g_vehicle_spiderbot_movement_inertia"));
-
-    if(self.frame < MODEL_SPIDERBOT_LEFT_START)
-        self.frame = MODEL_SPIDERBOT_LEFT_START;
-    else
-        self.frame += 0.8;
-
-    if(self.frame > MODEL_SPIDERBOT_LEFT_END)
-        self.anim_now = self.anim_next;
-}
-
-void spider_anim_strafer()
-{
-    movelib_move_simple(normalize(v_right),cvar("g_vehicle_spiderbot_speed_strafe"),cvar("g_vehicle_spiderbot_movement_inertia"));
-
-    if(self.frame < MODEL_SPIDERBOT_RIGHT_START)
-        self.frame = MODEL_SPIDERBOT_RIGHT_START;
-    else
-        self.frame += 0.8;
-
-    if(self.frame > MODEL_SPIDERBOT_RIGHT_END)
-        self.anim_now = self.anim_next;
-}
-
-void spider_anim_jump()
-{
-    //movelib_move_simple(normalize(v_forward),cvar("g_vehicle_spiderbot_speed_walk"),cvar("g_vehicle_spiderbot_movement_inertia"));
-
-    if(self.frame < MODEL_SPIDERBOT_JUMP_START)
-        self.frame = MODEL_SPIDERBOT_JUMP_START;
-    else
-        self.frame += 1;
-
-    if(self.frame <= 8)
-        movelib_beak_simple(cvar("g_vehicle_spiderbot_speed_stop"));
-
-    if(self.frame == 9)
-        self.velocity = v_forward * 400 + v_up * 400;
-
-    if(self.frame >= 19)
-        movelib_beak_simple(cvar("g_vehicle_spiderbot_speed_stop"));
-
-    if(self.frame > MODEL_SPIDERBOT_JUMP_END)
-        self.anim_now = self.anim_next;
-}
-
-void anim_do()
-{
-    if not (self.anim_now)
-        self.anim_now = self.anim_next;
-
-    self.anim_now();
-}
-
-*/
-
-void anim_do()
-{
-    self.frame = self.frame + 0.8;
-    if ((self.frame < self.anim_start) || (self.frame > self.anim_end))
-        if(self.anim_start == 0)
-        {
-            self.frame = 0;
-            self.anim_end = 0;
-        }
-        else
-            self.frame = self.anim_start;
-}
-
-void spiderbot_exit(float eject);
-void spiderbot_enter();
-
-void spiderbot_rocket_explode()
-{
-    vector org2;
-
-    if(self.event_damage != SUB_Null)
-    {
-        self.event_damage = SUB_Null;
-        self.think = spiderbot_rocket_explode;
-        self.nextthink = time;
-        return;
-    }
-
-    sound (self, CHAN_PROJECTILE, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
-    org2 = findbetterlocation (self.origin, 16);
-    pointparticles(particleeffectnum("rocket_explode"), org2, '0 0 0', 1);
-    w_deathtypestring = "dident escape the rocket barrage";
-
-    if(!self.owner)
-        self.owner = self.realowner;
-
-    RadiusDamage (self, self.owner,
-     cvar("g_vehicle_spiderbot_rocket_damage"),
-     cvar("g_vehicle_spiderbot_rocket_edgedamage"),
-     cvar("g_vehicle_spiderbot_rocket_radius"), world,
-     cvar("g_vehicle_spiderbot_rocket_force"), DEATH_TURRET, world);
-
-    remove (self);
-}
-
-void spiderbot_rocket_touch()
-{
-    if(self.owner)
-    {
-        if(other == self.owner.vehicle)
-            return;
-
-        if(other == self.owner.vehicle.tur_head)
-            return;
-    }
-
-    PROJECTILE_TOUCH;
-    spiderbot_rocket_explode();
-}
-
-void spiderbot_rocket_think()
-{
-    vector newdir,olddir;
-
-    self.nextthink  = time;
-    if not(self.owner)
-    {
-        UpdateCSQCProjectile(self);
-        return;
-    }
-
-    self.solid      = SOLID_BBOX;
-    self.touch      = spiderbot_rocket_touch;
-    olddir = normalize(self.velocity);
-    newdir = normalize(self.owner.cursor_trace_endpos - self.origin);
-    newdir += randomvec() * cvar("g_vehicle_spiderbot_rocket_noise");
-    self.velocity = normalize(olddir + newdir * cvar("g_vehicle_spiderbot_rocket_turnrate")) * cvar("g_vehicle_spiderbot_rocket_speed");
-
-    UpdateCSQCProjectile(self);
-}
-
-void spiderbot_rocket_do()
-{
-    entity missile;
-
-    if(self.gun2.cnt > time)
-        return;
-
-    if(self.tur_head.frame > 7)
-        self.tur_head.frame = 0;
-
-    if not (self.owner.BUTTON_ATCK2)
-        return;
-
-    self.tur_head.frame += 1;
-    if(self.tur_head.frame > 7)
-        self.attack_finished_single = cvar("g_vehicle_spiderbot_rocket_reload");
-    else
-        self.attack_finished_single = cvar("g_vehicle_spiderbot_rocket_refire");
-
-    self.gun2.cnt = time + self.attack_finished_single;
-
-    sound (self, CHAN_WEAPON, "weapons/rocket_fire.wav", VOL_BASE, ATTN_NORM);
-    missile                    = spawn ();
-    setsize (missile, '-3 -1 -1', '3 1 1'); // give it some size so it can be shot
-    setorigin(missile,gettaginfo(self.tur_head,gettagindex(self.tur_head,"tag_fire")));
-    te_explosion (missile.origin);
-
-    missile.classname       = "spiderbot_rocket";
-    missile.owner           = self.owner;
-    missile.bot_dodge       = TRUE;
-    missile.bot_dodgerating = 75;
-    missile.nextthink       = time;// + 0.2;
-    missile.movetype        = MOVETYPE_FLYMISSILE;
-    missile.velocity        = normalize(v_forward + (v_up * 0.5) + randomvec() * 0.25) * cvar("g_vehicle_spiderbot_rocket_speed");
-    missile.angles          = vectoangles(missile.velocity);
-    missile.think           = spiderbot_rocket_think;
-    missile.flags           = FL_PROJECTILE;
-    missile.solid           = SOLID_NOT;
-
-	CSQCProjectile(missile, FALSE, PROJECTILE_ROCKET, FALSE); // no culling, has fly sound
-}
-
-void spiderbot_minigun_fire_Flash_Go() {
-	if (self.frame > 10){
+#define MODEL_SPIDERBOT_FORWARD_START 1
+#define MODEL_SPIDERBOT_FORWARD_END 31
+#define MODEL_SPIDERBOT_FORWARD_LENGTH 31
+
+#define MODEL_SPIDERBOT_BACKWARDS_START 32
+#define MODEL_SPIDERBOT_BACKWARDS_END 62
+#define MODEL_SPIDERBOT_BACKWARDS_LENGTH 31
+
+#define MODEL_SPIDERBOT_LEFT_START 63
+#define MODEL_SPIDERBOT_LEFT_END 93
+#define MODEL_SPIDERBOT_LEFT_LENGTH 31
+
+#define MODEL_SPIDERBOT_RIGHT_START 94
+#define MODEL_SPIDERBOT_RIGHT_END 124
+#define MODEL_SPIDERBOT_RIGHT_LENGTH 31
+
+#define MODEL_SPIDERBOT_JUMP_START 125
+#define MODEL_SPIDERBOT_JUMP_END 155
+#define MODEL_SPIDERBOT_JUMP_LENGTH 31
+
+#define spiderbot_MIN '-75 -75 5'
+#define spiderbot_MAX '75 75 105'
+
+/*
+.void() anim_now;
+.void() anim_next;
+
+void spider_anim_idle()
+{
+    movelib_beak_simple(cvar("g_vehicle_spiderbot_speed_stop"));
+    if(self.anim_next != self.anim_now)
+        self.anim_now = self.anim_next;
+}
+
+void spider_anim_forward()
+{
+    movelib_move_simple(normalize(v_forward),cvar("g_vehicle_spiderbot_speed_walk"),cvar("g_vehicle_spiderbot_movement_inertia"));
+
+    if((self.frame < MODEL_SPIDERBOT_FORWARD_START) || (self.frame > MODEL_SPIDERBOT_FORWARD_END))
+        self.frame = MODEL_SPIDERBOT_FORWARD_START;
+    else
+        self.frame += 0.8;
+
+    if(self.frame > MODEL_SPIDERBOT_FORWARD_END)
+        self.anim_now = self.anim_next;
+}
+
+void spider_anim_backward()
+{
+    movelib_move_simple(normalize(v_forward * -1),cvar("g_vehicle_spiderbot_speed_walk"),cvar("g_vehicle_spiderbot_movement_inertia"));
+
+    if(self.frame < MODEL_SPIDERBOT_BACKWARDS_START)
+        self.frame = MODEL_SPIDERBOT_BACKWARDS_START;
+    else
+        self.frame += 0.8;
+
+    if(self.frame > MODEL_SPIDERBOT_BACKWARDS_END)
+        self.anim_now = self.anim_next;
+}
+
+void spider_anim_strafel()
+{
+    movelib_move_simple(normalize(v_right * -1),cvar("g_vehicle_spiderbot_speed_strafe"),cvar("g_vehicle_spiderbot_movement_inertia"));
+
+    if(self.frame < MODEL_SPIDERBOT_LEFT_START)
+        self.frame = MODEL_SPIDERBOT_LEFT_START;
+    else
+        self.frame += 0.8;
+
+    if(self.frame > MODEL_SPIDERBOT_LEFT_END)
+        self.anim_now = self.anim_next;
+}
+
+void spider_anim_strafer()
+{
+    movelib_move_simple(normalize(v_right),cvar("g_vehicle_spiderbot_speed_strafe"),cvar("g_vehicle_spiderbot_movement_inertia"));
+
+    if(self.frame < MODEL_SPIDERBOT_RIGHT_START)
+        self.frame = MODEL_SPIDERBOT_RIGHT_START;
+    else
+        self.frame += 0.8;
+
+    if(self.frame > MODEL_SPIDERBOT_RIGHT_END)
+        self.anim_now = self.anim_next;
+}
+
+void spider_anim_jump()
+{
+    //movelib_move_simple(normalize(v_forward),cvar("g_vehicle_spiderbot_speed_walk"),cvar("g_vehicle_spiderbot_movement_inertia"));
+
+    if(self.frame < MODEL_SPIDERBOT_JUMP_START)
+        self.frame = MODEL_SPIDERBOT_JUMP_START;
+    else
+        self.frame += 1;
+
+    if(self.frame <= 8)
+        movelib_beak_simple(cvar("g_vehicle_spiderbot_speed_stop"));
+
+    if(self.frame == 9)
+        self.velocity = v_forward * 400 + v_up * 400;
+
+    if(self.frame >= 19)
+        movelib_beak_simple(cvar("g_vehicle_spiderbot_speed_stop"));
+
+    if(self.frame > MODEL_SPIDERBOT_JUMP_END)
+        self.anim_now = self.anim_next;
+}
+
+void anim_do()
+{
+    if not (self.anim_now)
+        self.anim_now = self.anim_next;
+
+    self.anim_now();
+}
+
+*/
+
+void anim_do()
+{
+    self.frame = self.frame + 0.8;
+    if ((self.frame < self.anim_start) || (self.frame > self.anim_end))
+        if(self.anim_start == 0)
+        {
+            self.frame = 0;
+            self.anim_end = 0;
+        }
+        else
+            self.frame = self.anim_start;
+}
+
+void spiderbot_exit(float eject);
+void spiderbot_enter();
+
+void spiderbot_rocket_explode()
+{
+    vector org2;
+
+    if(self.event_damage != SUB_Null)
+    {
+        self.event_damage = SUB_Null;
+        self.think = spiderbot_rocket_explode;
+        self.nextthink = time;
+        return;
+    }
+
+    sound (self, CHAN_PROJECTILE, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
+    org2 = findbetterlocation (self.origin, 16);
+    pointparticles(particleeffectnum("rocket_explode"), org2, '0 0 0', 1);
+    w_deathtypestring = "dident escape the rocket barrage";
+
+    if(!self.owner)
+        self.owner = self.realowner;
+
+    RadiusDamage (self, self.owner,
+     cvar("g_vehicle_spiderbot_rocket_damage"),
+     cvar("g_vehicle_spiderbot_rocket_edgedamage"),
+     cvar("g_vehicle_spiderbot_rocket_radius"), world,
+     cvar("g_vehicle_spiderbot_rocket_force"), DEATH_TURRET, world);
+
+    remove (self);
+}
+
+void spiderbot_rocket_touch()
+{
+    if(self.owner)
+    {
+        if(other == self.owner.vehicle)
+            return;
+
+        if(other == self.owner.vehicle.tur_head)
+            return;
+    }
+
+    PROJECTILE_TOUCH;
+    spiderbot_rocket_explode();
+}
+
+void spiderbot_rocket_think()
+{
+    vector newdir,olddir;
+
+    self.nextthink  = time;
+    if not(self.owner)
+    {
+        UpdateCSQCProjectile(self);
+        return;
+    }
+
+    self.solid      = SOLID_BBOX;
+    self.touch      = spiderbot_rocket_touch;
+    olddir = normalize(self.velocity);
+    newdir = normalize(self.owner.cursor_trace_endpos - self.origin);
+    newdir += randomvec() * cvar("g_vehicle_spiderbot_rocket_noise");
+    self.velocity = normalize(olddir + newdir * cvar("g_vehicle_spiderbot_rocket_turnrate")) * cvar("g_vehicle_spiderbot_rocket_speed");
+
+    UpdateCSQCProjectile(self);
+}
+
+void spiderbot_rocket_do()
+{
+    entity missile;
+
+    if(self.gun2.cnt > time)
+        return;
+
+    if(self.tur_head.frame > 7)
+        self.tur_head.frame = 0;
+
+    if not (self.owner.BUTTON_ATCK2)
+        return;
+
+    self.tur_head.frame += 1;
+    if(self.tur_head.frame > 7)
+        self.attack_finished_single = cvar("g_vehicle_spiderbot_rocket_reload");
+    else
+        self.attack_finished_single = cvar("g_vehicle_spiderbot_rocket_refire");
+
+    self.gun2.cnt = time + self.attack_finished_single;
+
+    sound (self, CHAN_WEAPON, "weapons/rocket_fire.wav", VOL_BASE, ATTN_NORM);
+    missile                    = spawn ();
+    setsize (missile, '-3 -1 -1', '3 1 1'); // give it some size so it can be shot
+    setorigin(missile,gettaginfo(self.tur_head,gettagindex(self.tur_head,"tag_fire")));
+    te_explosion (missile.origin);
+
+    missile.classname       = "spiderbot_rocket";
+    missile.owner           = self.owner;
+    missile.bot_dodge       = TRUE;
+    missile.bot_dodgerating = 75;
+    missile.nextthink       = time;// + 0.2;
+    missile.movetype        = MOVETYPE_FLYMISSILE;
+    missile.velocity        = normalize(v_forward + (v_up * 0.5) + randomvec() * 0.25) * cvar("g_vehicle_spiderbot_rocket_speed");
+    missile.angles          = vectoangles(missile.velocity);
+    missile.think           = spiderbot_rocket_think;
+    missile.flags           = FL_PROJECTILE;
+    missile.solid           = SOLID_NOT;
+
+	CSQCProjectile(missile, FALSE, PROJECTILE_ROCKET, FALSE); // no culling, has fly sound
+}
+
+void spiderbot_minigun_fire_Flash_Go() {
+	if (self.frame > 10){
 		self.alpha = -1;
-		setmodel(self,"");
-		return;
-	}
-
-	self.frame = self.frame + 2;
-	self.alpha = self.alpha - 0.2;
-	self.nextthink = time + 0.02;
-}
-
-void spiderbot_minigun_fire(entity gun,float trail)
-{
-
-    entity flash;
-    vector v;
-    v = gettaginfo(gun,gettagindex(gun,"barrels"));
-    v_forward = normalize(v_forward);
-
-    sound (gun, CHAN_WEAPON, "weapons/uzi_fire.wav", VOL_BASE, ATTN_NORM);
-
-    fireBullet (v, v_forward, cvar("g_vehicle_spiderbot_minigun_spread"), cvar("g_vehicle_spiderbot_minigun_damage"),
-        cvar("g_vehicle_spiderbot_minigun_spread"), DEATH_TURRET, 0);
-
-    if not (gun.enemy)
-    {
-        gun.enemy = spawn();
-        setattachment(gun.enemy , gun, "barrels");
-        setorigin(gun.enemy ,gun.enemy.origin + '48 0 0');
-    }
-
-    flash = gun.enemy; //spawn();
-    setmodel(flash, "models/uziflash.md3"); // precision set below
-    flash.think = spiderbot_minigun_fire_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;
-    if(trail)
-        trailparticles(self, particleeffectnum("EF_MGTURRETTRAIL"), v, trace_endpos);
-}
-
-void spiderbot_miniguns_do()
-{
-    if ((self.owner.BUTTON_ATCK) && (self.owner.vehicle_heat < 1) && (self.tur_head.attack_finished_single < time))
-    {
-
-        self.gun1.angles_z += 36;
-        self.gun2.angles_z -= 36;
-        if(self.gun1.angles_z >= 360)
-        {
-            self.gun1.angles_z = 0;
-            self.gun2.angles_z = 360;
-        }
-
-        self = self.owner;
-        if(self.uzi_bulletcounter == 1)
-        {
-            spiderbot_minigun_fire(self.vehicle.gun1,0);
-            spiderbot_minigun_fire(self.vehicle.gun2,1);
-            self.uzi_bulletcounter = 0;
-        }
-        else
-        {
-            spiderbot_minigun_fire(self.vehicle.gun1,1);
-            spiderbot_minigun_fire(self.vehicle.gun2,0);
-            self.uzi_bulletcounter += 1;
-        }
-
-        self = self.vehicle;
-        self.owner.vehicle_heat += cvar("g_vehicle_spiderbot_minigun_heat");
-        if(self.owner.vehicle_heat >= 1)
-        {
-            self.vehicle_heat = 1;
-            self.owner.vehicle_heat = 1;
-            self.tur_head.attack_finished_single = (1/(cvar("g_vehicle_spiderbot_minigun_cooldown") * server_fps))+time;
-        }
-        else
-            self.tur_head.attack_finished_single = cvar("g_vehicle_spiderbot_minigun_refire") + time;
-
-        return;
-    }
-    else
-        if(self.vehicle_heat != 0)
-        {
-            self.vehicle_heat = max(self.vehicle_heat - cvar("g_vehicle_spiderbot_minigun_cooldown"),0);
-            if(self.tur_head.attack_finished_single < time)
-            {
-                self.vehicle_heat = 0;
-                self.owner.vehicle_heat = 0;
-            }
-            else
-            {
-                if(self.tur_head.uzi_bulletcounter < time)
-                {
-                    self.tur_head.uzi_bulletcounter = time + 0.2;
-                    self.owner.vehicle_heat  = self.vehicle_heat;
-                }
-                else
-                    self.owner.vehicle_heat = 1;
-            }
-        }
-        else
-            self.owner.vehicle_heat = max(self.owner.vehicle_heat - cvar("g_vehicle_spiderbot_minigun_cooldown"),0);
-
-}
-
-float spiderbot_pplug()
-{
-    vector ad;
-    entity player,spider;
-    float ftmp,ftmp2;
-
-    player = self;
-    spider = self.vehicle;
-
-/*
-	self.BUTTON_ATCK = 0;
-	self.button1 = 0;
-	self.BUTTON_JUMP = 0;
-	self.BUTTON_ATCK2 = 0;
-
-
-	self.BUTTON_HOOK = 0;
-	self.BUTTON_INFO = 0;
-	self.button8 = 0;
-	self.BUTTON_CHAT = 0;
-	self.BUTTON_USE = 0;
-*/
-
-    player.BUTTON_ZOOM = 0;
-    player.BUTTON_CROUCH = 0;
-
-
-    if(player.BUTTON_USE)
-    {
-        self = spider;
-        spiderbot_exit(0);
-        self = player;
-        return 0;
-    }
-
-    player.exteriormodeltoclient = spider.tur_head;
-
-    spider.tur_head.angles_x *= -1;
-    spider.angles_x *= -1;
-    //player.angles_x *= -1;
-    makevectors(spider.angles);
-
-    //ad = player.v_angle - (spider.tur_head.angles + spider.angles);
-    ad = player.v_angle -  (spider.tur_head.angles + spider.angles);
-
-    // Rotate head
-    ftmp = cvar("g_vehicle_spiderbot_head_turnspeed") / server_fps;
-    ftmp2 = ftmp * -1;
-    spider.tur_head.angles_y += bound(ftmp2,shortangle_f(ad_y,spider.tur_head.angles_y),ftmp);
-    spider.tur_head.angles_y = bound(cvar("g_vehicle_spiderbot_head_turnlimit") * -1,spider.tur_head.angles_y,cvar("g_vehicle_spiderbot_head_turnlimit"));
-
-    // Pitch head
-    ftmp = cvar("g_vehicle_spiderbot_head_pitchspeed") / server_fps;
-    ftmp2 = ftmp * -1;
-    spider.tur_head.angles_x += bound(ftmp2,shortangle_f(ad_x,spider.tur_head.angles_x),ftmp);
-    spider.tur_head.angles_x = bound(cvar("g_vehicle_spiderbot_head_pitchlimit_down"),spider.tur_head.angles_x,cvar("g_vehicle_spiderbot_head_pitchlimit_up"));
-
-    spider.tur_head.angles_x *= -1;
-    spider.angles_x *= -1;
-    //player.angles_x *= -1;
-
-    // Turn Body
-    ftmp = cvar("g_vehicle_spiderbot_turnspeed") / server_fps;
-    ftmp2 = ftmp * -1;
-    ftmp = bound(ftmp2,spider.tur_head.angles_y,ftmp);
-
-    self = spider;
-    if(spider.flags & FL_ONGROUND)
-    {
-        if(player.BUTTON_JUMP)
-        {
-            player.BUTTON_JUMP = 0;
-            spider.anim_start = MODEL_SPIDERBOT_JUMP_START;
-            spider.anim_end   = MODEL_SPIDERBOT_JUMP_END;
-            spider.velocity   = v_forward * 700 + v_up * 600;
-        }
-        else
-        {
-            if(vlen(player.movement) == 0)
-            {
-                movelib_beak_simple(cvar("g_vehicle_spiderbot_speed_stop"));
-                spider.anim_start = 0;
-                spider.anim_end = 0;
-            }
-            else
-            {
-                spider.angles_y = safeangle(spider.angles_y + ftmp);
-                spider.tur_head.angles_y -= ftmp;
-
-                if(player.movement_x != 0)
-                {
-                    if(player.movement_x > 0)
-                    {
-                        player.movement_x = 1;
-                        spider.anim_start = MODEL_SPIDERBOT_FORWARD_START;
-                        spider.anim_end   = MODEL_SPIDERBOT_FORWARD_END;
-                    }
-                    else if(player.movement_x < 0)
-                    {
-                        player.movement_x = -1;
-                        spider.anim_start = MODEL_SPIDERBOT_BACKWARDS_START;
-                        spider.anim_end   = MODEL_SPIDERBOT_BACKWARDS_END;
-
-                    }
-                    player.movement_y = 0;
-                    movelib_move_simple(normalize(v_forward * player.movement_x),cvar("g_vehicle_spiderbot_speed_walk"),cvar("g_vehicle_spiderbot_movement_inertia"));
-                }
-                else if(player.movement_y != 0)
-                {
-                    if(player.movement_y < 0)
-                    {
-                        player.movement_y = -1;
-                        spider.anim_start = MODEL_SPIDERBOT_LEFT_START;
-                        spider.anim_end   = MODEL_SPIDERBOT_LEFT_END;
-                    }
-                    else if(player.movement_y > 0)
-                    {
-                        player.movement_y = 1;
-                        spider.anim_start = MODEL_SPIDERBOT_RIGHT_START;
-                        spider.anim_end   = MODEL_SPIDERBOT_RIGHT_END;
-                    }
-                    movelib_move_simple(normalize(v_right * player.movement_y),cvar("g_vehicle_spiderbot_speed_strafe"),cvar("g_vehicle_spiderbot_movement_inertia"));
-                }
-
-            }
-        }
-        movelib_groundalign4point(300,100,0.25);
-    }
-
-    anim_do();
-    spiderbot_miniguns_do();
-    spiderbot_rocket_do();
-    vehicle_stdproc_regen();
-
-    player.BUTTON_ATCK = player.BUTTON_ATCK2 = 0;
-    player.rockets = spider.tur_head.frame;
-
-    if(spider.gun2.cnt <= time)
-        player.rockets_reload = 1;
-    else
-        player.rockets_reload = 1 - ((spider.gun2.cnt - time) /spider.attack_finished_single);
-
-    self = player;
-
-    setorigin(player,spider.origin + '0 0 64');
-    player.velocity = spider.velocity;
-
-    return 1;
-}
-
-void spiderbot_think()
-{
-    if(self.flags & FL_ONGROUND)
-    {
-        movelib_beak_simple(cvar("g_vehicle_spiderbot_speed_stop"));
-        //movelib_groundalign4point(300,100);
-    }
-
-    self.nextthink = time;
-}
-
-void spiderbot_enter()
-{
-    self.owner = other;
-
-    self.event_damage         = vehicle_stdproc_damage ;
-    self.colormap             = self.owner.colormap;
-    self.tur_head.colormap    = self.owner.colormap;
-    self.vehicle_hudmodel.viewmodelforclient = self.owner;
-    self.nextthink = 0;
-    self.owner.angles         = self.angles;
-    self.owner.takedamage     = DAMAGE_NO;
-    self.owner.solid          = SOLID_NOT;
-    self.owner.movetype       = MOVETYPE_NOCLIP;
-    self.owner.alpha          = -1;
-    self.owner.PlayerPhysplug = spiderbot_pplug;
-    self.owner.vehicle        = self;
-    self.owner.event_damage   = SUB_Null;
-    self.owner.hud            = HUD_SPIDEBOT;
-    self.owner.vehicle_health = (self.vehicle_health / cvar("g_vehicle_spiderbot_health"));
-    self.owner.vehicle_shield = (self.vehicle_shield / cvar("g_vehicle_spiderbot_shield"));
-    self.team                   = self.owner.team;
-
-    //setorigin(self.owner,self.origin);
-    //setattachment(self.owner,self,"");
-    //setorigin(self.owner,'0 0 0');
-
-    msg_entity = other;
-    WriteByte (MSG_ONE, SVC_SETVIEWPORT);
-    WriteEntity( MSG_ONE, self.vehicle_viewport);
-
-    WriteByte (MSG_ONE, SVC_SETVIEWANGLES);  // 10 = SVC_SETVIEWANGLES
-    WriteAngle(MSG_ONE, self.tur_head.angles_x + self.angles_x);    // tilt
-    WriteAngle(MSG_ONE, self.tur_head.angles_y + self.angles_y);    // yaw
-    WriteAngle(MSG_ONE, 0);    // roll
-    //WriteAngle(MSG_ONE, self.tur_head.angles_z + self.angles_z);    // roll
-
-    //self.owner.view_ofs = '0 0 0';
-    //self.tur_head.nodrawtoclient = self.owner;
-}
-
-void spiderbot_exit(float eject)
-{
-    entity e;
-
-    e = findchain(classname,"spiderbot_rocket");
-    while(e)
-    {
-        if(e.owner == self.owner)
-        {
-            e.realowner = self.owner;
-            e.owner = world;
-            //e.solid = SOLID_BBOX;
-            //e.think = SUB_Null;
-            //e.nextthink = -1;
-        }
-        e = e.chain;
-    }
-
-    self.velocity = '0 0 0';
-
-    msg_entity = self.owner;
-    WriteByte (MSG_ONE, SVC_SETVIEWPORT);
-    WriteEntity( MSG_ONE, self.owner);
-
-    WriteByte (MSG_ONE, SVC_SETVIEWANGLES);  // 10 = SVC_SETVIEWANGLES
-    WriteAngle(MSG_ONE, 0);    // tilt
-    WriteAngle(MSG_ONE, self.angles_y);    // yaw
-    WriteAngle(MSG_ONE, 0);    // roll
-
-    //setattachment(self.owner,world,"");
-    self.think = spiderbot_think;
-    self.nextthink = time;
-    self.owner.takedamage     = DAMAGE_AIM;
-    self.owner.solid          = SOLID_SLIDEBOX;
-    self.owner.movetype       = MOVETYPE_WALK;
-
-    setsize(self.owner,PL_MIN,PL_MAX);
-
-    self.owner.alpha          = 1;
-    self.owner.PlayerPhysplug = SUB_Null;
-    self.owner.vehicle        = world;
-	self.owner.view_ofs       = PL_VIEW_OFS;
-	self.owner.hud            = HUD_NORMAL;
-	self.owner.event_damage   = PlayerDamage;
-
-	self.colormap            = 1024;
-	self.tur_head.colormap   = 1024;
-    self.team                = -1;
-
-	self.vehicle_hudmodel.viewmodelforclient = self;
-	self.tur_head.nodrawtoclient             = self;
-
-    setattachment(self.owner,world,"");
-
-	makevectors(self.angles);
-	if(eject)
-	{
-	    setorigin(self.owner,self.origin + v_forward * 100 + '0 0 64');
-	    self.owner.velocity = (v_up + v_forward * 0.25) * 750;
-	}
-	else
-        setorigin(self.owner,self.origin - v_forward * 200 + '0 0 64');
-
-    self.owner = world;
-}
-
-void spiderbot_touch()
-{
-    if(self.owner)
-    {
-        if(vlen(self.velocity) == 0)
-            return;
-
-        if(other.classname != "player")
-            return;
-
-        //todo: add check for velocity here (so we dont cush players runing onto us from behind)
-
-        Damage(other,self,self.owner,cvar("g_vehicle_spiderbot_crush_dmg"),DEATH_TURRET,'0 0 0', normalize(other.origin - self.origin) * cvar("g_vehicle_spiderbot_crush_force") );
-        return;
-    }
-
-    if(other.classname != "player")
-        return;
-
-    if(other.deadflag != DEAD_NO)
-        return;
-
-    if(other.vehicle != world)
-        return;
-
-    spiderbot_enter();
-}
-
-float spiderbot_customizeentityforclient()
-{
-    if(self.deadflag == DEAD_DEAD)
-        return FALSE;
-
-    return TRUE;
-}
-
-//void spiderbot_damage(entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force);
-void spiderbot_spawn()
-{
-    self.think = spiderbot_think;
-    self.nextthink = time;
-
-    self.vehicle_health = CCVAR("_health");
-    self.vehicle_shield = CCVAR("_shield");
-    self.event_damage = vehicle_stdproc_damage;
-    self.iscreature = TRUE;
-    self.movetype   = MOVETYPE_WALK;
-    self.solid      = SOLID_SLIDEBOX;
-    self.takedamage = DAMAGE_AIM;
-    self.touch      = spiderbot_touch;
-    self.alpha      = self.tur_head.alpha = self.gun1.alpha = self.gun2.alpha = 1;
-    self.tur_head.angles = '0 0 0';
-	self.colormap = 1024;
-	self.tur_head.colormap = 1024;
-	self.deadflag    = DEAD_NO;
-    self.bot_attack = TRUE;
-
-    setsize(self,spiderbot_MIN,spiderbot_MAX);
-    setorigin(self,self.tur_aimpos);
-    pointparticles(particleeffectnum("teleport"), self.origin + '0 0 64', '0 0 0', 1);
-}
-
-void spiderbot_blowup()
-{
-    sound (self, CHAN_PROJECTILE, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
-    pointparticles(particleeffectnum("rocket_explode"), findbetterlocation (self.origin, 16), '0 0 0', 1);
-
-    RadiusDamage (self, self, 250, 15, 250, world, 250, DEATH_TURRET, world);
-
-    self.alpha = self.tur_head.alpha = self.gun1.alpha = self.gun2.alpha = -1;
-    self.nextthink  = time + 10;
-    self.think      = spiderbot_spawn;
-
-    setorigin(self,self.tur_aimpos);
-}
-
-void spiderbot_die()
-{
-
-    self.health = 0;
-    self.event_damage = SUB_Null;
-    self.iscreature = FALSE;
-    self.solid      = SOLID_NOT;
-    self.takedamage = DAMAGE_NO;
-    self.touch      = SUB_Null;
-    self.nextthink  = time + random() * 2;
-    self.think      = spiderbot_blowup;
-    self.deadflag    = DEAD_DEAD;
-	self.vehicle_hudmodel.viewmodelforclient = self;
-	self.frame = 0;
-	self.tur_head.frame = 0;
-
-}
-
-void vewhicle_spiderbot_dinit()
-{
-
-    server_fps = (1 / sys_ticrate);
-
-    addstat(STAT_HUD, AS_INT,  hud);
-	addstat(STAT_SPIDERBOT_ROCKETS, AS_INT,   rockets);
-	addstat(STAT_SPIDERBOT_RELOAD,  AS_FLOAT, rockets_reload);
-	addstat(STAT_SPIDERBOT_HEAT,    AS_FLOAT, vehicle_heat);
-	addstat(STAT_SPIDERBOT_HEALTH,  AS_FLOAT, vehicle_health);
-	addstat(STAT_SPIDERBOT_SHIELD,  AS_FLOAT, vehicle_shield);
-
-    if (self.netname == "")      self.netname     = "spiderbot";
-
-    self.tur_head = spawn();
-    self.gun1 = spawn();
-    self.gun2 = spawn();
-    self.vehicle_viewport = spawn();
-    self.gravity = 2;
-    self.vehicle_hudmodel = spawn();
-    self.vehicle_flags = VHF_HASSHIELD | VHF_SHIELDREGEN | VHF_HEALTHREGEN;
-    self.cvar_basename = "g_vehicle_spiderbot";
-
-    setmodel (self.vehicle_hudmodel, "models/spiderbot/cp.md3");
-    setmodel (self.vehicle_viewport, "models/null.md3");
-    setmodel(self,"models/spiderbot/spiderbot.dpm");
-    setmodel(self.tur_head,"models/spiderbot/spiderbot_top.dpm");
-    setmodel(self.gun1,"models/spiderbot/spiderbot_barrels.dpm");
-    setmodel(self.gun2,"models/spiderbot/spiderbot_barrels.dpm");
-
-    setattachment(self.tur_head,self,"tag_head");
-    setattachment(self.vehicle_hudmodel,self.tur_head,"");
-    setattachment(self.vehicle_viewport,self.vehicle_hudmodel,"");
-    setattachment(self.gun1,self.tur_head,"tag_hardpoint01");
-    setattachment(self.gun2,self.tur_head,"tag_hardpoint02");
-
-    self.tur_head.owner = self;
-    self.customizeentityforclient          = spiderbot_customizeentityforclient;
-
-    setorigin(self.vehicle_viewport,'35 0 -14');
-    self.tur_aimpos = self.origin;
-    spiderbot_spawn();
-
-    self.vehicle_die = spiderbot_die;
-    self.vehicle_exit = spiderbot_exit;
-}
-
-void spawnfunc_vehicle_spiderbot()
-{
-    // g_turrets_common_precash();
-
-    precache_model ( "models/spiderbot/cr.md3");
-    precache_model ( "models/vhshield.md3");
-    precache_model ( "models/spiderbot/cp.md3");
-    precache_model ( "models/spiderbot/spiderbot.dpm");
-    precache_model ( "models/spiderbot/spiderbot_top.dpm");
-    precache_model ( "models/spiderbot/spiderbot_barrels.dpm");
-
-    precache_model ( "models/turrets/rocket.md3");
-    precache_sound ( "weapons/rocket_impact.wav" );
-
-    self.team                = -1;
-    self.think = vewhicle_spiderbot_dinit;
-    self.nextthink = time + 0.5;
-}
+		setmodel(self,"");
+		return;
+	}
+
+	self.frame = self.frame + 2;
+	self.alpha = self.alpha - 0.2;
+	self.nextthink = time + 0.02;
+}
+
+void spiderbot_minigun_fire(entity gun,float trail)
+{
+
+    entity flash;
+    vector v;
+    v = gettaginfo(gun,gettagindex(gun,"barrels"));
+    v_forward = normalize(v_forward);
+
+    sound (gun, CHAN_WEAPON, "weapons/uzi_fire.wav", VOL_BASE, ATTN_NORM);
+
+    fireBullet (v, v_forward, cvar("g_vehicle_spiderbot_minigun_spread"), cvar("g_vehicle_spiderbot_minigun_damage"),
+        cvar("g_vehicle_spiderbot_minigun_spread"), DEATH_TURRET, 0);
+
+    if not (gun.enemy)
+    {
+        gun.enemy = spawn();
+        setattachment(gun.enemy , gun, "barrels");
+        setorigin(gun.enemy ,gun.enemy.origin + '48 0 0');
+    }
+
+    flash = gun.enemy; //spawn();
+    setmodel(flash, "models/uziflash.md3"); // precision set below
+    flash.think = spiderbot_minigun_fire_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;
+    if(trail)
+        trailparticles(self, particleeffectnum("EF_MGTURRETTRAIL"), v, trace_endpos);
+}
+
+void spiderbot_miniguns_do()
+{
+    if ((self.owner.BUTTON_ATCK) && (self.owner.vehicle_heat < 1) && (self.tur_head.attack_finished_single < time))
+    {
+
+        self.gun1.angles_z += 36;
+        self.gun2.angles_z -= 36;
+        if(self.gun1.angles_z >= 360)
+        {
+            self.gun1.angles_z = 0;
+            self.gun2.angles_z = 360;
+        }
+
+        self = self.owner;
+        if(self.uzi_bulletcounter == 1)
+        {
+            spiderbot_minigun_fire(self.vehicle.gun1,0);
+            spiderbot_minigun_fire(self.vehicle.gun2,1);
+            self.uzi_bulletcounter = 0;
+        }
+        else
+        {
+            spiderbot_minigun_fire(self.vehicle.gun1,1);
+            spiderbot_minigun_fire(self.vehicle.gun2,0);
+            self.uzi_bulletcounter += 1;
+        }
+
+        self = self.vehicle;
+        self.owner.vehicle_heat += cvar("g_vehicle_spiderbot_minigun_heat");
+        if(self.owner.vehicle_heat >= 1)
+        {
+            self.vehicle_heat = 1;
+            self.owner.vehicle_heat = 1;
+            self.tur_head.attack_finished_single = (1/(cvar("g_vehicle_spiderbot_minigun_cooldown") * server_fps))+time;
+        }
+        else
+            self.tur_head.attack_finished_single = cvar("g_vehicle_spiderbot_minigun_refire") + time;
+
+        return;
+    }
+    else
+        if(self.vehicle_heat != 0)
+        {
+            self.vehicle_heat = max(self.vehicle_heat - cvar("g_vehicle_spiderbot_minigun_cooldown"),0);
+            if(self.tur_head.attack_finished_single < time)
+            {
+                self.vehicle_heat = 0;
+                self.owner.vehicle_heat = 0;
+            }
+            else
+            {
+                if(self.tur_head.uzi_bulletcounter < time)
+                {
+                    self.tur_head.uzi_bulletcounter = time + 0.2;
+                    self.owner.vehicle_heat  = self.vehicle_heat;
+                }
+                else
+                    self.owner.vehicle_heat = 1;
+            }
+        }
+        else
+            self.owner.vehicle_heat = max(self.owner.vehicle_heat - cvar("g_vehicle_spiderbot_minigun_cooldown"),0);
+
+}
+
+float spiderbot_pplug()
+{
+    vector ad;
+    entity player,spider;
+    float ftmp,ftmp2;
+
+    player = self;
+    spider = self.vehicle;
+
+/*
+	self.BUTTON_ATCK = 0;
+	self.button1 = 0;
+	self.BUTTON_JUMP = 0;
+	self.BUTTON_ATCK2 = 0;
+
+
+	self.BUTTON_HOOK = 0;
+	self.BUTTON_INFO = 0;
+	self.button8 = 0;
+	self.BUTTON_CHAT = 0;
+	self.BUTTON_USE = 0;
+*/
+
+    player.BUTTON_ZOOM = 0;
+    player.BUTTON_CROUCH = 0;
+
+
+    if(player.BUTTON_USE)
+    {
+        self = spider;
+        spiderbot_exit(0);
+        self = player;
+        return 0;
+    }
+
+    player.exteriormodeltoclient = spider.tur_head;
+
+    spider.tur_head.angles_x *= -1;
+    spider.angles_x *= -1;
+    //player.angles_x *= -1;
+    makevectors(spider.angles);
+
+    //ad = player.v_angle - (spider.tur_head.angles + spider.angles);
+    ad = player.v_angle -  (spider.tur_head.angles + spider.angles);
+
+    // Rotate head
+    ftmp = cvar("g_vehicle_spiderbot_head_turnspeed") / server_fps;
+    ftmp2 = ftmp * -1;
+    spider.tur_head.angles_y += bound(ftmp2,shortangle_f(ad_y,spider.tur_head.angles_y),ftmp);
+    spider.tur_head.angles_y = bound(cvar("g_vehicle_spiderbot_head_turnlimit") * -1,spider.tur_head.angles_y,cvar("g_vehicle_spiderbot_head_turnlimit"));
+
+    // Pitch head
+    ftmp = cvar("g_vehicle_spiderbot_head_pitchspeed") / server_fps;
+    ftmp2 = ftmp * -1;
+    spider.tur_head.angles_x += bound(ftmp2,shortangle_f(ad_x,spider.tur_head.angles_x),ftmp);
+    spider.tur_head.angles_x = bound(cvar("g_vehicle_spiderbot_head_pitchlimit_down"),spider.tur_head.angles_x,cvar("g_vehicle_spiderbot_head_pitchlimit_up"));
+
+    spider.tur_head.angles_x *= -1;
+    spider.angles_x *= -1;
+    //player.angles_x *= -1;
+
+    // Turn Body
+    ftmp = cvar("g_vehicle_spiderbot_turnspeed") / server_fps;
+    ftmp2 = ftmp * -1;
+    ftmp = bound(ftmp2,spider.tur_head.angles_y,ftmp);
+
+    self = spider;
+    if(spider.flags & FL_ONGROUND)
+    {
+        if(player.BUTTON_JUMP)
+        {
+            player.BUTTON_JUMP = 0;
+            spider.anim_start = MODEL_SPIDERBOT_JUMP_START;
+            spider.anim_end   = MODEL_SPIDERBOT_JUMP_END;
+            spider.velocity   = v_forward * 700 + v_up * 600;
+        }
+        else
+        {
+            if(vlen(player.movement) == 0)
+            {
+                movelib_beak_simple(cvar("g_vehicle_spiderbot_speed_stop"));
+                spider.anim_start = 0;
+                spider.anim_end = 0;
+            }
+            else
+            {
+                spider.angles_y = safeangle(spider.angles_y + ftmp);
+                spider.tur_head.angles_y -= ftmp;
+
+                if(player.movement_x != 0)
+                {
+                    if(player.movement_x > 0)
+                    {
+                        player.movement_x = 1;
+                        spider.anim_start = MODEL_SPIDERBOT_FORWARD_START;
+                        spider.anim_end   = MODEL_SPIDERBOT_FORWARD_END;
+                    }
+                    else if(player.movement_x < 0)
+                    {
+                        player.movement_x = -1;
+                        spider.anim_start = MODEL_SPIDERBOT_BACKWARDS_START;
+                        spider.anim_end   = MODEL_SPIDERBOT_BACKWARDS_END;
+
+                    }
+                    player.movement_y = 0;
+                    movelib_move_simple(normalize(v_forward * player.movement_x),cvar("g_vehicle_spiderbot_speed_walk"),cvar("g_vehicle_spiderbot_movement_inertia"));
+                }
+                else if(player.movement_y != 0)
+                {
+                    if(player.movement_y < 0)
+                    {
+                        player.movement_y = -1;
+                        spider.anim_start = MODEL_SPIDERBOT_LEFT_START;
+                        spider.anim_end   = MODEL_SPIDERBOT_LEFT_END;
+                    }
+                    else if(player.movement_y > 0)
+                    {
+                        player.movement_y = 1;
+                        spider.anim_start = MODEL_SPIDERBOT_RIGHT_START;
+                        spider.anim_end   = MODEL_SPIDERBOT_RIGHT_END;
+                    }
+                    movelib_move_simple(normalize(v_right * player.movement_y),cvar("g_vehicle_spiderbot_speed_strafe"),cvar("g_vehicle_spiderbot_movement_inertia"));
+                }
+
+            }
+        }
+        movelib_groundalign4point(300,100,0.25);
+    }
+
+    anim_do();
+    spiderbot_miniguns_do();
+    spiderbot_rocket_do();
+    vehicle_stdproc_regen();
+
+    player.BUTTON_ATCK = player.BUTTON_ATCK2 = 0;
+    player.rockets = spider.tur_head.frame;
+
+    if(spider.gun2.cnt <= time)
+        player.rockets_reload = 1;
+    else
+        player.rockets_reload = 1 - ((spider.gun2.cnt - time) /spider.attack_finished_single);
+
+    self = player;
+
+    setorigin(player,spider.origin + '0 0 64');
+    player.velocity = spider.velocity;
+
+    return 1;
+}
+
+void spiderbot_think()
+{
+    if(self.flags & FL_ONGROUND)
+    {
+        movelib_beak_simple(cvar("g_vehicle_spiderbot_speed_stop"));
+        //movelib_groundalign4point(300,100);
+    }
+
+    self.nextthink = time;
+}
+
+void spiderbot_enter()
+{
+    self.owner = other;
+
+    self.event_damage         = vehicle_stdproc_damage ;
+    self.colormap             = self.owner.colormap;
+    self.tur_head.colormap    = self.owner.colormap;
+    self.vehicle_hudmodel.viewmodelforclient = self.owner;
+    self.nextthink = 0;
+    self.owner.angles         = self.angles;
+    self.owner.takedamage     = DAMAGE_NO;
+    self.owner.solid          = SOLID_NOT;
+    self.owner.movetype       = MOVETYPE_NOCLIP;
+    self.owner.alpha          = -1;
+    self.owner.PlayerPhysplug = spiderbot_pplug;
+    self.owner.vehicle        = self;
+    self.owner.event_damage   = SUB_Null;
+    self.owner.hud            = HUD_SPIDEBOT;
+    self.owner.vehicle_health = (self.vehicle_health / cvar("g_vehicle_spiderbot_health"));
+    self.owner.vehicle_shield = (self.vehicle_shield / cvar("g_vehicle_spiderbot_shield"));
+    self.team                   = self.owner.team;
+
+    //setorigin(self.owner,self.origin);
+    //setattachment(self.owner,self,"");
+    //setorigin(self.owner,'0 0 0');
+
+    msg_entity = other;
+    WriteByte (MSG_ONE, SVC_SETVIEWPORT);
+    WriteEntity( MSG_ONE, self.vehicle_viewport);
+
+    WriteByte (MSG_ONE, SVC_SETVIEWANGLES);  // 10 = SVC_SETVIEWANGLES
+    WriteAngle(MSG_ONE, self.tur_head.angles_x + self.angles_x);    // tilt
+    WriteAngle(MSG_ONE, self.tur_head.angles_y + self.angles_y);    // yaw
+    WriteAngle(MSG_ONE, 0);    // roll
+    //WriteAngle(MSG_ONE, self.tur_head.angles_z + self.angles_z);    // roll
+
+    //self.owner.view_ofs = '0 0 0';
+    //self.tur_head.nodrawtoclient = self.owner;
+}
+
+void spiderbot_exit(float eject)
+{
+    entity e;
+
+    e = findchain(classname,"spiderbot_rocket");
+    while(e)
+    {
+        if(e.owner == self.owner)
+        {
+            e.realowner = self.owner;
+            e.owner = world;
+            //e.solid = SOLID_BBOX;
+            //e.think = SUB_Null;
+            //e.nextthink = -1;
+        }
+        e = e.chain;
+    }
+
+    self.velocity = '0 0 0';
+
+    msg_entity = self.owner;
+    WriteByte (MSG_ONE, SVC_SETVIEWPORT);
+    WriteEntity( MSG_ONE, self.owner);
+
+    WriteByte (MSG_ONE, SVC_SETVIEWANGLES);  // 10 = SVC_SETVIEWANGLES
+    WriteAngle(MSG_ONE, 0);    // tilt
+    WriteAngle(MSG_ONE, self.angles_y);    // yaw
+    WriteAngle(MSG_ONE, 0);    // roll
+
+    //setattachment(self.owner,world,"");
+    self.think = spiderbot_think;
+    self.nextthink = time;
+    self.owner.takedamage     = DAMAGE_AIM;
+    self.owner.solid          = SOLID_SLIDEBOX;
+    self.owner.movetype       = MOVETYPE_WALK;
+
+    setsize(self.owner,PL_MIN,PL_MAX);
+
+    self.owner.alpha          = 1;
+    self.owner.PlayerPhysplug = SUB_Null;
+    self.owner.vehicle        = world;
+	self.owner.view_ofs       = PL_VIEW_OFS;
+	self.owner.hud            = HUD_NORMAL;
+	self.owner.event_damage   = PlayerDamage;
+
+	self.colormap            = 1024;
+	self.tur_head.colormap   = 1024;
+    self.team                = -1;
+
+	self.vehicle_hudmodel.viewmodelforclient = self;
+	self.tur_head.nodrawtoclient             = self;
+
+    setattachment(self.owner,world,"");
+
+	makevectors(self.angles);
+	if(eject)
+	{
+	    setorigin(self.owner,self.origin + v_forward * 100 + '0 0 64');
+	    self.owner.velocity = (v_up + v_forward * 0.25) * 750;
+	}
+	else
+        setorigin(self.owner,self.origin - v_forward * 200 + '0 0 64');
+
+    self.owner = world;
+}
+
+void spiderbot_touch()
+{
+    if(self.owner)
+    {
+        if(vlen(self.velocity) == 0)
+            return;
+
+        if(other.classname != "player")
+            return;
+
+        //todo: add check for velocity here (so we dont cush players runing onto us from behind)
+
+        Damage(other,self,self.owner,cvar("g_vehicle_spiderbot_crush_dmg"),DEATH_TURRET,'0 0 0', normalize(other.origin - self.origin) * cvar("g_vehicle_spiderbot_crush_force") );
+        return;
+    }
+
+    if(other.classname != "player")
+        return;
+
+    if(other.deadflag != DEAD_NO)
+        return;
+
+    if(other.vehicle != world)
+        return;
+
+    spiderbot_enter();
+}
+
+float spiderbot_customizeentityforclient()
+{
+    if(self.deadflag == DEAD_DEAD)
+        return FALSE;
+
+    return TRUE;
+}
+
+//void spiderbot_damage(entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force);
+void spiderbot_spawn()
+{
+    self.think = spiderbot_think;
+    self.nextthink = time;
+
+    self.vehicle_health = CCVAR("_health");
+    self.vehicle_shield = CCVAR("_shield");
+    self.event_damage = vehicle_stdproc_damage;
+    self.iscreature = TRUE;
+    self.movetype   = MOVETYPE_WALK;
+    self.solid      = SOLID_SLIDEBOX;
+    self.takedamage = DAMAGE_AIM;
+    self.touch      = spiderbot_touch;
+    self.alpha      = self.tur_head.alpha = self.gun1.alpha = self.gun2.alpha = 1;
+    self.tur_head.angles = '0 0 0';
+	self.colormap = 1024;
+	self.tur_head.colormap = 1024;
+	self.deadflag    = DEAD_NO;
+    self.bot_attack = TRUE;
+
+    setsize(self,spiderbot_MIN,spiderbot_MAX);
+    setorigin(self,self.tur_aimpos);
+    pointparticles(particleeffectnum("teleport"), self.origin + '0 0 64', '0 0 0', 1);
+}
+
+void spiderbot_blowup()
+{
+    sound (self, CHAN_PROJECTILE, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
+    pointparticles(particleeffectnum("rocket_explode"), findbetterlocation (self.origin, 16), '0 0 0', 1);
+
+    RadiusDamage (self, self, 250, 15, 250, world, 250, DEATH_TURRET, world);
+
+    self.alpha = self.tur_head.alpha = self.gun1.alpha = self.gun2.alpha = -1;
+    self.nextthink  = time + 10;
+    self.think      = spiderbot_spawn;
+
+    setorigin(self,self.tur_aimpos);
+}
+
+void spiderbot_die()
+{
+
+    self.health = 0;
+    self.event_damage = SUB_Null;
+    self.iscreature = FALSE;
+    self.solid      = SOLID_NOT;
+    self.takedamage = DAMAGE_NO;
+    self.touch      = SUB_Null;
+    self.nextthink  = time + random() * 2;
+    self.think      = spiderbot_blowup;
+    self.deadflag    = DEAD_DEAD;
+	self.vehicle_hudmodel.viewmodelforclient = self;
+	self.frame = 0;
+	self.tur_head.frame = 0;
+
+}
+
+void vewhicle_spiderbot_dinit()
+{
+
+    server_fps = (1 / sys_ticrate);
+
+    addstat(STAT_HUD, AS_INT,  hud);
+	addstat(STAT_SPIDERBOT_ROCKETS, AS_INT,   rockets);
+	addstat(STAT_SPIDERBOT_RELOAD,  AS_FLOAT, rockets_reload);
+	addstat(STAT_SPIDERBOT_HEAT,    AS_FLOAT, vehicle_heat);
+	addstat(STAT_SPIDERBOT_HEALTH,  AS_FLOAT, vehicle_health);
+	addstat(STAT_SPIDERBOT_SHIELD,  AS_FLOAT, vehicle_shield);
+
+    if (self.netname == "")      self.netname     = "spiderbot";
+
+    self.tur_head = spawn();
+    self.gun1 = spawn();
+    self.gun2 = spawn();
+    self.vehicle_viewport = spawn();
+    self.gravity = 2;
+    self.vehicle_hudmodel = spawn();
+    self.vehicle_flags = VHF_HASSHIELD | VHF_SHIELDREGEN | VHF_HEALTHREGEN;
+    self.cvar_basename = "g_vehicle_spiderbot";
+
+    setmodel (self.vehicle_hudmodel, "models/spiderbot/cp.md3");
+    setmodel (self.vehicle_viewport, "models/null.md3");
+    setmodel(self,"models/spiderbot/spiderbot.dpm");
+    setmodel(self.tur_head,"models/spiderbot/spiderbot_top.dpm");
+    setmodel(self.gun1,"models/spiderbot/spiderbot_barrels.dpm");
+    setmodel(self.gun2,"models/spiderbot/spiderbot_barrels.dpm");
+
+    setattachment(self.tur_head,self,"tag_head");
+    setattachment(self.vehicle_hudmodel,self.tur_head,"");
+    setattachment(self.vehicle_viewport,self.vehicle_hudmodel,"");
+    setattachment(self.gun1,self.tur_head,"tag_hardpoint01");
+    setattachment(self.gun2,self.tur_head,"tag_hardpoint02");
+
+    self.tur_head.owner = self;
+    self.customizeentityforclient          = spiderbot_customizeentityforclient;
+
+    setorigin(self.vehicle_viewport,'35 0 -14');
+    self.tur_aimpos = self.origin;
+    spiderbot_spawn();
+
+    self.vehicle_die = spiderbot_die;
+    self.vehicle_exit = spiderbot_exit;
+}
+
+void spawnfunc_vehicle_spiderbot()
+{
+    // g_turrets_common_precash();
+
+    precache_model ( "models/spiderbot/cr.md3");
+    precache_model ( "models/vhshield.md3");
+    precache_model ( "models/spiderbot/cp.md3");
+    precache_model ( "models/spiderbot/spiderbot.dpm");
+    precache_model ( "models/spiderbot/spiderbot_top.dpm");
+    precache_model ( "models/spiderbot/spiderbot_barrels.dpm");
+
+    precache_model ( "models/turrets/rocket.md3");
+    precache_sound ( "weapons/rocket_impact.wav" );
+
+    self.team                = -1;
+    self.think = vewhicle_spiderbot_dinit;
+    self.nextthink = time + 0.5;
+}


Property changes on: branches/nexuiz-2.0/data/qcsrc/server/vehicles/spiderbot.qc
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: branches/nexuiz-2.0/data/qcsrc/server/vehicles/vehicles.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/vehicles/vehicles.qc	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/qcsrc/server/vehicles/vehicles.qc	2009-07-11 14:59:28 UTC (rev 7191)
@@ -1,183 +1,183 @@
-void vehicle_stdproc_enter()
-{
-    self.owner = other;
-
-    msg_entity = other;
-    WriteByte (MSG_ONE, SVC_SETVIEWPORT);
-    WriteEntity( MSG_ONE, self.vehicle_viewport);
-
-    WriteByte (MSG_ONE, SVC_SETVIEWANGLES);
-    WriteAngle(MSG_ONE, self.vehicle_viewport.angles_x + self.angles_x);    // tilt
-    WriteAngle(MSG_ONE, self.vehicle_viewport.angles_y + self.angles_y);    // yaw
-    WriteAngle(MSG_ONE, self.vehicle_viewport.angles_z + self.angles_z);    // flip
-
-    //setattachment(other,self,"");
-    self.nextthink = 0;
-    self.owner.takedamage     = DAMAGE_NO;
-    self.owner.solid          = SOLID_NOT;
-    self.owner.alpha          = -1;
-    //self.owner.PlayerPhysplug = spiderbot_pplug;
-    self.owner.vehicle           = self;
-    self.owner.event_damage   = SUB_Null;
-    self.owner.vehicle_health             = (self.health / cvar("g_vehicle_spiderbot_health"));
-    self.owner.hud            = HUD_SPIDEBOT;
-    self.colormap             = self.owner.colormap;
-    self.tur_head.colormap    = self.owner.colormap;
-    self.vehicle_hudmodel.viewmodelforclient   = self.owner;
-    //self.tur_head.nodrawtoclient = self.owner;
-
-
-}
-
-void vehicle_stdproc_exit(float eject)
-{
-    self.velocity = '0 0 0';
-
-    msg_entity = self.owner;
-    WriteByte (MSG_ONE, SVC_SETVIEWPORT);
-    WriteEntity( MSG_ONE, self.owner);
-
-    //setattachment(self.owner,world,"");
-    //self.think = spiderbot_think;
-    //self.nextthink = time;
-
-    self.owner.takedamage     = DAMAGE_AIM;
-    self.owner.solid          = SOLID_SLIDEBOX;
-    self.owner.alpha          = 1;
-    self.owner.PlayerPhysplug = SUB_Null;
-    self.owner.vehicle        = world;
-	self.owner.view_ofs       = PL_VIEW_OFS;
-	self.owner.hud            = HUD_NORMAL;
-	self.owner.event_damage   = PlayerDamage;
-	self.colormap = 1024;
-	self.tur_head.colormap = 1024;
-	self.vehicle_hudmodel.viewmodelforclient   = self;
-	//self.tur_head.nodrawtoclient = self;
-
-	if(eject)
-	{
-	    makevectors(self.angles);
-	    setorigin(self.owner,self.origin + v_forward * 100);
-	    self.owner.velocity = (v_up + v_forward * 0.25) * 750;
-	}
-	else
-        setorigin(self.owner,self.origin - v_forward * 200);
-
-    self.owner = world;
-}
-
-void vehicle_stdproc_regen()
-{
-    float smax,hmax;
-
-    smax = CCVAR("_shield");
-    hmax = CCVAR("_health");
-
-    if(self.vehicle_flags & VHF_HASSHIELD)
-    if(self.vehicle_flags & VHF_SHIELDREGEN)
-    if(self.vehicle_shield < smax)
-    if(self.dmg_time + CCVAR("_shield_regen_dmgpause") < time)
-    {
-        self.vehicle_shield = min(self.vehicle_shield + CCVAR("_shield_regen") / server_fps,smax);
-
-        if(self.owner)
-            self.owner.vehicle_shield = self.vehicle_shield / cvar(strcat(self.cvar_basename,"_shield"));
-    }
-
-    if(self.vehicle_flags & VHF_HEALTHREGEN)
-    if(self.dmg_time + CCVAR("_health_regen_dmgpause") < time)
-    if(self.vehicle_health < hmax)
-    {
-        self.vehicle_health = min(self.vehicle_health + CCVAR("_health_regen") / server_fps,hmax);
-
-        if(self.owner)
-            self.owner.vehicle_health = self.vehicle_health / CCVAR("_health");
-    }
-}
-
-void shieldhit_think()
-{
-    self.alpha = self.alpha - 0.125;
-    if not(self.alpha <= 0)
-    {
-        self.nextthink = time;
-    }
+void vehicle_stdproc_enter()
+{
+    self.owner = other;
+
+    msg_entity = other;
+    WriteByte (MSG_ONE, SVC_SETVIEWPORT);
+    WriteEntity( MSG_ONE, self.vehicle_viewport);
+
+    WriteByte (MSG_ONE, SVC_SETVIEWANGLES);
+    WriteAngle(MSG_ONE, self.vehicle_viewport.angles_x + self.angles_x);    // tilt
+    WriteAngle(MSG_ONE, self.vehicle_viewport.angles_y + self.angles_y);    // yaw
+    WriteAngle(MSG_ONE, self.vehicle_viewport.angles_z + self.angles_z);    // flip
+
+    //setattachment(other,self,"");
+    self.nextthink = 0;
+    self.owner.takedamage     = DAMAGE_NO;
+    self.owner.solid          = SOLID_NOT;
+    self.owner.alpha          = -1;
+    //self.owner.PlayerPhysplug = spiderbot_pplug;
+    self.owner.vehicle           = self;
+    self.owner.event_damage   = SUB_Null;
+    self.owner.vehicle_health             = (self.health / cvar("g_vehicle_spiderbot_health"));
+    self.owner.hud            = HUD_SPIDEBOT;
+    self.colormap             = self.owner.colormap;
+    self.tur_head.colormap    = self.owner.colormap;
+    self.vehicle_hudmodel.viewmodelforclient   = self.owner;
+    //self.tur_head.nodrawtoclient = self.owner;
+
+
+}
+
+void vehicle_stdproc_exit(float eject)
+{
+    self.velocity = '0 0 0';
+
+    msg_entity = self.owner;
+    WriteByte (MSG_ONE, SVC_SETVIEWPORT);
+    WriteEntity( MSG_ONE, self.owner);
+
+    //setattachment(self.owner,world,"");
+    //self.think = spiderbot_think;
+    //self.nextthink = time;
+
+    self.owner.takedamage     = DAMAGE_AIM;
+    self.owner.solid          = SOLID_SLIDEBOX;
+    self.owner.alpha          = 1;
+    self.owner.PlayerPhysplug = SUB_Null;
+    self.owner.vehicle        = world;
+	self.owner.view_ofs       = PL_VIEW_OFS;
+	self.owner.hud            = HUD_NORMAL;
+	self.owner.event_damage   = PlayerDamage;
+	self.colormap = 1024;
+	self.tur_head.colormap = 1024;
+	self.vehicle_hudmodel.viewmodelforclient   = self;
+	//self.tur_head.nodrawtoclient = self;
+
+	if(eject)
+	{
+	    makevectors(self.angles);
+	    setorigin(self.owner,self.origin + v_forward * 100);
+	    self.owner.velocity = (v_up + v_forward * 0.25) * 750;
+	}
+	else
+        setorigin(self.owner,self.origin - v_forward * 200);
+
+    self.owner = world;
+}
+
+void vehicle_stdproc_regen()
+{
+    float smax,hmax;
+
+    smax = CCVAR("_shield");
+    hmax = CCVAR("_health");
+
+    if(self.vehicle_flags & VHF_HASSHIELD)
+    if(self.vehicle_flags & VHF_SHIELDREGEN)
+    if(self.vehicle_shield < smax)
+    if(self.dmg_time + CCVAR("_shield_regen_dmgpause") < time)
+    {
+        self.vehicle_shield = min(self.vehicle_shield + CCVAR("_shield_regen") / server_fps,smax);
+
+        if(self.owner)
+            self.owner.vehicle_shield = self.vehicle_shield / cvar(strcat(self.cvar_basename,"_shield"));
+    }
+
+    if(self.vehicle_flags & VHF_HEALTHREGEN)
+    if(self.dmg_time + CCVAR("_health_regen_dmgpause") < time)
+    if(self.vehicle_health < hmax)
+    {
+        self.vehicle_health = min(self.vehicle_health + CCVAR("_health_regen") / server_fps,hmax);
+
+        if(self.owner)
+            self.owner.vehicle_health = self.vehicle_health / CCVAR("_health");
+    }
+}
+
+void shieldhit_think()
+{
+    self.alpha = self.alpha - 0.125;
+    if not(self.alpha <= 0)
+    {
+        self.nextthink = time;
+    }
     else
     {
-        setmodel(self,"");
-        self.alpha = -1;
-    }
-    //self.think = SUB_Remove;
-}
-
-void vehicle_stdproc_damage(entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force)
-{
-
-    float ddmg_take;
-
-    self.dmg_time = time;
-
-    if((self.vehicle_flags & VHF_HASSHIELD) && (self.vehicle_shield > 0))
-    {
-        if not (self.tur_head.enemy)
-            self.tur_head.enemy = spawn();
-
-        entity sh;
-
-        sh = self.tur_head.enemy;
-        sh.colormod = '1 1 1';
-        sh.alpha = 0.5;
-        sh.scale  = (128 / vlen(self.maxs - self.mins))*2;
-        //sh.scale = 1.25;
-
-        sh.effects = EF_LOWPRECISION;
-        sh.angles = vectoangles(normalize(hitloc - self.origin)) - self.angles;
-
-        setmodel(sh,"models/vhshield.md3");
-        setattachment(sh,self,"");
-        sh.think = shieldhit_think;
-        sh.nextthink = time;
-
-
-        self.vehicle_shield -= damage;
-        if(self.vehicle_shield < 0)
-        {
-            sh.colormod = '10 0 -1';
-            ddmg_take = fabs(self.vehicle_shield);
-            self.vehicle_shield = 0;
-
-            self.vehicle_health -= ddmg_take;
-        }
-    }
-    else
-        self.vehicle_health -= damage;
-
-
-    if(self.owner)
-    {
-        self.owner.vehicle_health = self.vehicle_health / CCVAR("_health");
-
-        if(self.vehicle_flags & VHF_HASSHIELD)
-            self.owner.vehicle_shield = self.vehicle_shield / cvar(strcat(self.cvar_basename,"_shield"));
-
-    }
-
-    if(self.vehicle_health <= 0)
-    {
-        if(self.owner)
-            self.vehicle_exit(VHEF_EJECT);
-
-        self.vehicle_die();
-    }
-
-
-}
-
-void bugmenot()
-{
-    self.vehicle_exit       = self.vehicle_exit;
-    self.vehicle_enter      = self.vehicle_exit;
-    self.vehicle_die        = self.vehicle_exit;
-    self.vehicle_spawn      = self.vehicle_exit;
-    self.vehicle_message    = self.vehicle_exit;
-}
+        setmodel(self,"");
+        self.alpha = -1;
+    }
+    //self.think = SUB_Remove;
+}
+
+void vehicle_stdproc_damage(entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force)
+{
+
+    float ddmg_take;
+
+    self.dmg_time = time;
+
+    if((self.vehicle_flags & VHF_HASSHIELD) && (self.vehicle_shield > 0))
+    {
+        if not (self.tur_head.enemy)
+            self.tur_head.enemy = spawn();
+
+        entity sh;
+
+        sh = self.tur_head.enemy;
+        sh.colormod = '1 1 1';
+        sh.alpha = 0.5;
+        sh.scale  = (128 / vlen(self.maxs - self.mins))*2;
+        //sh.scale = 1.25;
+
+        sh.effects = EF_LOWPRECISION;
+        sh.angles = vectoangles(normalize(hitloc - self.origin)) - self.angles;
+
+        setmodel(sh,"models/vhshield.md3");
+        setattachment(sh,self,"");
+        sh.think = shieldhit_think;
+        sh.nextthink = time;
+
+
+        self.vehicle_shield -= damage;
+        if(self.vehicle_shield < 0)
+        {
+            sh.colormod = '10 0 -1';
+            ddmg_take = fabs(self.vehicle_shield);
+            self.vehicle_shield = 0;
+
+            self.vehicle_health -= ddmg_take;
+        }
+    }
+    else
+        self.vehicle_health -= damage;
+
+
+    if(self.owner)
+    {
+        self.owner.vehicle_health = self.vehicle_health / CCVAR("_health");
+
+        if(self.vehicle_flags & VHF_HASSHIELD)
+            self.owner.vehicle_shield = self.vehicle_shield / cvar(strcat(self.cvar_basename,"_shield"));
+
+    }
+
+    if(self.vehicle_health <= 0)
+    {
+        if(self.owner)
+            self.vehicle_exit(VHEF_EJECT);
+
+        self.vehicle_die();
+    }
+
+
+}
+
+void bugmenot()
+{
+    self.vehicle_exit       = self.vehicle_exit;
+    self.vehicle_enter      = self.vehicle_exit;
+    self.vehicle_die        = self.vehicle_exit;
+    self.vehicle_spawn      = self.vehicle_exit;
+    self.vehicle_message    = self.vehicle_exit;
+}


Property changes on: branches/nexuiz-2.0/data/qcsrc/server/vehicles/vehicles.qc
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: branches/nexuiz-2.0/data/qcsrc/server/vehicles/vehicles.qh
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/vehicles/vehicles.qh	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/qcsrc/server/vehicles/vehicles.qh	2009-07-11 14:59:28 UTC (rev 7191)
@@ -1,52 +1,52 @@
-//#define VEHICLES_ENABLED
-#ifdef VEHICLES_ENABLED
-
-#message "with tZork vehicles (experimental)"
-
-float SVC_SETVIEWPORT = 5;    // Net.Protocol 0x05
-float SVC_SETVIEWANGLES = 10; // Net.Protocol 0x0A
-float SVC_UPDATEENTITY = 128; // Net.Protocol 0x80
-
-#define CCVAR(part) cvar(strcat(self.cvar_basename,part))
-//.string cvar_basename;
-
-.float vehicle_flags;
-#define VHF_HASSHIELD 2
-#define VHF_SHIELDREGEN 4
-#define VHF_HEALTHREGEN 8
-
-.float hud;
-.float rockets;
-.float rockets_reload;
-.entity gun1;
-.entity gun2;
-
-.float vehicle_health;
-.float vehicle_shield;
-.float vehicle_heat;
-
-.entity vehicle;
-.entity vehicle_viewport;
-.entity vehicle_hudmodel;
-
-.float anim_start;
-.float anim_end;
-
-.float dmg_time;
-
-float server_fps;
-
-#define VHEF_NORMAL 0
-#define VHEF_EJECT 1
-
-.void(float exit_flags) vehicle_exit;
-.void() vehicle_enter;
-.void() vehicle_die;
-.void() vehicle_spawn;
-.float(float message) vehicle_message;
-
-#include "vehicles.qc"
-#include "spiderbot.qc"
-#include "racer.qc"
-
-#endif
+//#define VEHICLES_ENABLED
+#ifdef VEHICLES_ENABLED
+
+#message "with tZork vehicles (experimental)"
+
+float SVC_SETVIEWPORT = 5;    // Net.Protocol 0x05
+float SVC_SETVIEWANGLES = 10; // Net.Protocol 0x0A
+float SVC_UPDATEENTITY = 128; // Net.Protocol 0x80
+
+#define CCVAR(part) cvar(strcat(self.cvar_basename,part))
+//.string cvar_basename;
+
+.float vehicle_flags;
+#define VHF_HASSHIELD 2
+#define VHF_SHIELDREGEN 4
+#define VHF_HEALTHREGEN 8
+
+.float hud;
+.float rockets;
+.float rockets_reload;
+.entity gun1;
+.entity gun2;
+
+.float vehicle_health;
+.float vehicle_shield;
+.float vehicle_heat;
+
+.entity vehicle;
+.entity vehicle_viewport;
+.entity vehicle_hudmodel;
+
+.float anim_start;
+.float anim_end;
+
+.float dmg_time;
+
+float server_fps;
+
+#define VHEF_NORMAL 0
+#define VHEF_EJECT 1
+
+.void(float exit_flags) vehicle_exit;
+.void() vehicle_enter;
+.void() vehicle_die;
+.void() vehicle_spawn;
+.float(float message) vehicle_message;
+
+#include "vehicles.qc"
+#include "spiderbot.qc"
+#include "racer.qc"
+
+#endif


Property changes on: branches/nexuiz-2.0/data/qcsrc/server/vehicles/vehicles.qh
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: branches/nexuiz-2.0/data/qcsrc/server/verbstack.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/verbstack.qc	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/qcsrc/server/verbstack.qc	2009-07-11 14:59:28 UTC (rev 7191)
@@ -1,200 +1,200 @@
-/// Some default stacks.
-.entity verbs_idle;
-.entity verbs_attack;
-.entity verbs_move;
-
-/// This global gets set to the verb in question each time the stack manager calls verb_call
-entity verb;
-
-/// Execure this verb
-#define VCM_DO     0
-/// Return the value of this verb. Return VS_CALL_REMOVE to delete it.
-#define VCM_EVAL   1
-/// This verb is beeing removed NOW (not sent when verb_call returns VS_CALL_REMOVE)
-#define VCM_REMOVE 2
-
-/// Verb callback
-.float(float message) verb_call;
-
-/// Points to this verb's stack.
-.entity  verbstack;
-
-/// Static value of this verb
-.float verb_static_value;
-
-/// verb_call returns this when a verb in not doable
-#define VS_CALL_NO        0
-/// verb_call(VCM_DO) returns this when a verb is executing
-#define VS_CALL_YES_DOING -1
-/// verb_call(VCM_DO) returns this when a verb did execure and is done
-#define VS_CALL_YES_DONE  -2
-/// verb_call(VCM_DO) returns this when a verb should be deleted by the stack manager
-#define VS_CALL_REMOVE    -3
-
-/**
-    Push a new verb onto the specified stack. Set vrb_life to make it time-limited.
-**/
-entity verbstack_push(entity stack, float(float eval) vrb_call, float val_static, float vrb_life,entity verb_owner)
-{
-    entity vrb;
-
-    if not(stack)
-        return world;
-
-    if not(vrb_call)
-        return world;
-
-    vrb                   = spawn();
-    vrb.owner             = verb_owner;
-    vrb.verbstack         = stack;
-    vrb.verb_call         = vrb_call;
-    vrb.verb_static_value = val_static;
-
-    if(vrb_life)
-    {
-        vrb.think     = SUB_Remove;
-        vrb.nextthink = time + vrb_life;
-    }
-
-    return vrb;
-}
-
-/**
-    Find the best verb in this stack and execurte it.
-    ALso remove any verbs returning VS_CALL_REMOVE on VCM_EVAL or VCM_DO
-**/
-float verbstack_pop(entity stack)
-{
-    entity vrb, bestverb, oldself;
-    float  value, bestvalue;
-
-    oldself = self;
-
-    vrb = findchainentity(verbstack,stack);
-    while(vrb)
-    {
-        verb  = vrb;
-        vrb   = vrb.chain;
-        self  = verb.owner;
-        value = verb.verb_call(VCM_EVAL);
-
-        if(value < 0)
-        {
-            if(value == VS_CALL_REMOVE)
-                remove(verb);
-        }
-        else
-        {
-            if(value > bestvalue)
-            {
-                bestverb  = verb;
-                bestvalue = value;
-            }
-        }
-    }
-
-    if(bestverb)
-    {
-        verb  = bestverb;
-        self  = verb.owner;
-        value = verb.verb_call(VCM_DO);
-
-        if(value == VS_CALL_REMOVE)
-            remove(bestverb);
-    }
-
-    self = oldself;
-
-    return value;
-}
-
-float verbstack_popfifo(entity stack)
-{
-    entity oldself;
-    float ret;
-
-    oldself = self;
-    verb = findentity(stack,verbstack,stack);
-    if not (verb)
-        ret = 0;
-    else
-    {
-        self = verb.owner;
-        ret = verb.verb_call(VCM_DO);
-
-        if(ret == VS_CALL_REMOVE)
-            remove(verb);
-    }
-
-    self = oldself;
-    return ret;
-}
-
-/**
-    Find the best verb in this stack and return it.
-    ALso remove any verbs returning VS_CALL_REMOVE on VCM_EVAL.
-**/
-entity verbstack_pull(entity stack)
-{
-    entity vrb;
-    entity bestverb, oldself;
-    float  value, bestvalue;
-
-    oldself = self;
-
-    vrb = findchainentity(verbstack,stack);
-    while(vrb)
-    {
-        self = vrb.owner;
-
-        verb  = vrb;
-        vrb   = vrb.chain;
-        value = verb.verb_call(VCM_EVAL);
-
-        if(value > 0)
-        {
-            if(value == VS_CALL_REMOVE)
-                remove(verb);
-        }
-        else
-        {
-            if(value > bestvalue)
-            {
-                bestverb = verb;
-                bestvalue = value;
-            }
-        }
-    }
-
-    self = oldself;
-
-    return bestverb;
-}
-
-entity verbstack_pullfifo(entity stack)
-{
-    return findentity(stack,verbstack,stack);
-}
-
-/**
-    Delete every verb on this stack, signaling them with VCM_REMOVE first.
-**/
-void verbstack_flush(entity stack)
-{
-    entity vrb, oldself;
-
-    oldself = self;
-
-    vrb = findchainentity(verbstack,stack);
-    while(vrb)
-    {
-        self = vrb.owner;
-
-        verb = vrb;
-        vrb  = vrb.chain;
-        verb.verb_call(VCM_REMOVE);
-        remove(verb);
-    }
-
-    self = oldself;
-}
+/// Some default stacks.
+.entity verbs_idle;
+.entity verbs_attack;
+.entity verbs_move;
+
+/// This global gets set to the verb in question each time the stack manager calls verb_call
+entity verb;
+
+/// Execure this verb
+#define VCM_DO     0
+/// Return the value of this verb. Return VS_CALL_REMOVE to delete it.
+#define VCM_EVAL   1
+/// This verb is beeing removed NOW (not sent when verb_call returns VS_CALL_REMOVE)
+#define VCM_REMOVE 2
+
+/// Verb callback
+.float(float message) verb_call;
+
+/// Points to this verb's stack.
+.entity  verbstack;
+
+/// Static value of this verb
+.float verb_static_value;
+
+/// verb_call returns this when a verb in not doable
+#define VS_CALL_NO        0
+/// verb_call(VCM_DO) returns this when a verb is executing
+#define VS_CALL_YES_DOING -1
+/// verb_call(VCM_DO) returns this when a verb did execure and is done
+#define VS_CALL_YES_DONE  -2
+/// verb_call(VCM_DO) returns this when a verb should be deleted by the stack manager
+#define VS_CALL_REMOVE    -3
+
+/**
+    Push a new verb onto the specified stack. Set vrb_life to make it time-limited.
+**/
+entity verbstack_push(entity stack, float(float eval) vrb_call, float val_static, float vrb_life,entity verb_owner)
+{
+    entity vrb;
+
+    if not(stack)
+        return world;
+
+    if not(vrb_call)
+        return world;
+
+    vrb                   = spawn();
+    vrb.owner             = verb_owner;
+    vrb.verbstack         = stack;
+    vrb.verb_call         = vrb_call;
+    vrb.verb_static_value = val_static;
+
+    if(vrb_life)
+    {
+        vrb.think     = SUB_Remove;
+        vrb.nextthink = time + vrb_life;
+    }
+
+    return vrb;
+}
+
+/**
+    Find the best verb in this stack and execurte it.
+    ALso remove any verbs returning VS_CALL_REMOVE on VCM_EVAL or VCM_DO
+**/
+float verbstack_pop(entity stack)
+{
+    entity vrb, bestverb, oldself;
+    float  value, bestvalue;
+
+    oldself = self;
+
+    vrb = findchainentity(verbstack,stack);
+    while(vrb)
+    {
+        verb  = vrb;
+        vrb   = vrb.chain;
+        self  = verb.owner;
+        value = verb.verb_call(VCM_EVAL);
+
+        if(value < 0)
+        {
+            if(value == VS_CALL_REMOVE)
+                remove(verb);
+        }
+        else
+        {
+            if(value > bestvalue)
+            {
+                bestverb  = verb;
+                bestvalue = value;
+            }
+        }
+    }
+
+    if(bestverb)
+    {
+        verb  = bestverb;
+        self  = verb.owner;
+        value = verb.verb_call(VCM_DO);
+
+        if(value == VS_CALL_REMOVE)
+            remove(bestverb);
+    }
+
+    self = oldself;
+
+    return value;
+}
+
+float verbstack_popfifo(entity stack)
+{
+    entity oldself;
+    float ret;
+
+    oldself = self;
+    verb = findentity(stack,verbstack,stack);
+    if not (verb)
+        ret = 0;
+    else
+    {
+        self = verb.owner;
+        ret = verb.verb_call(VCM_DO);
+
+        if(ret == VS_CALL_REMOVE)
+            remove(verb);
+    }
+
+    self = oldself;
+    return ret;
+}
+
+/**
+    Find the best verb in this stack and return it.
+    ALso remove any verbs returning VS_CALL_REMOVE on VCM_EVAL.
+**/
+entity verbstack_pull(entity stack)
+{
+    entity vrb;
+    entity bestverb, oldself;
+    float  value, bestvalue;
+
+    oldself = self;
+
+    vrb = findchainentity(verbstack,stack);
+    while(vrb)
+    {
+        self = vrb.owner;
+
+        verb  = vrb;
+        vrb   = vrb.chain;
+        value = verb.verb_call(VCM_EVAL);
+
+        if(value > 0)
+        {
+            if(value == VS_CALL_REMOVE)
+                remove(verb);
+        }
+        else
+        {
+            if(value > bestvalue)
+            {
+                bestverb = verb;
+                bestvalue = value;
+            }
+        }
+    }
+
+    self = oldself;
+
+    return bestverb;
+}
+
+entity verbstack_pullfifo(entity stack)
+{
+    return findentity(stack,verbstack,stack);
+}
+
+/**
+    Delete every verb on this stack, signaling them with VCM_REMOVE first.
+**/
+void verbstack_flush(entity stack)
+{
+    entity vrb, oldself;
+
+    oldself = self;
+
+    vrb = findchainentity(verbstack,stack);
+    while(vrb)
+    {
+        self = vrb.owner;
+
+        verb = vrb;
+        vrb  = vrb.chain;
+        verb.verb_call(VCM_REMOVE);
+        remove(verb);
+    }
+
+    self = oldself;
+}


Property changes on: branches/nexuiz-2.0/data/qcsrc/server/verbstack.qc
___________________________________________________________________
Name: svn:eol-style
   + native


Property changes on: branches/nexuiz-2.0/data/qcsrc/server/vote.qc
___________________________________________________________________
Name: svn:eol-style
   + native


Property changes on: branches/nexuiz-2.0/data/qcsrc/server/vote.qh
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: branches/nexuiz-2.0/data/qcsrc/server/w_campingrifle.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/w_campingrifle.qc	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/qcsrc/server/w_campingrifle.qc	2009-07-11 14:59:28 UTC (rev 7191)
@@ -1,13 +1,23 @@
-//Camping rifle Primary mode: manually operated bolt*, Secondary: full automatic** --MikeeUSA--
+//Camping rifle Primary mode: manually operated bolt*, Secondary: full automatic**
 //* Manually operating the bolt means that all the power of the gas is used to propell the bullet. In this mode the bolt is prevented from moving backwards in response to the firing of the bullet.
 //** In fully automatic mode some of the gas is used to extract and reload the next cartrige, thus there is less power and range.
 
-.float campingrifle_bulletcounter;
+float W_CampingRifle_CheckMaxBullets()
+{
+	float maxbulls;
+	maxbulls = cvar("g_balance_campingrifle_magazinecapacity");
+	if not(self.items & IT_UNLIMITED_WEAPON_AMMO)
+		maxbulls = min(maxbulls, floor(self.ammo_nails / min(cvar("g_balance_campingrifle_primary_ammo"), cvar("g_balance_campingrifle_secondary_ammo"))));
+	if(self.campingrifle_bulletcounter > maxbulls)
+		self.campingrifle_bulletcounter = maxbulls;
+	return (self.campingrifle_bulletcounter == maxbulls);
+}
 
 void W_Campingrifle_ReloadedAndReady()
 {
 	float t;
-	self.campingrifle_bulletcounter = 0;
+	self.campingrifle_bulletcounter = cvar("g_balance_campingrifle_magazinecapacity");
+	W_CampingRifle_CheckMaxBullets();
 	t = ATTACK_FINISHED(self) - cvar("g_balance_campingrifle_reloadtime") - 1;
 	ATTACK_FINISHED(self) = t;
 	w_ready();
@@ -17,8 +27,14 @@
 {
 	float t;
 
-	if (self.campingrifle_bulletcounter == 0)
+	if (self.campingrifle_bulletcounter >= cvar("g_balance_campingrifle_magazinecapacity"))
 		return;
+
+	if(self.ammo_nails < min(cvar("g_balance_campingrifle_primary_ammo"), cvar("g_balance_campingrifle_secondary_ammo")))
+	{
+		self.campingrifle_bulletcounter = -1; // reload later
+		return;
+	}
 	
 	if (self.weaponentity)
 	{
@@ -35,12 +51,14 @@
 	ATTACK_FINISHED(self) = t;
 
 	weapon_thinkf(WFRAME_RELOAD, cvar("g_balance_campingrifle_reloadtime"), W_Campingrifle_ReloadedAndReady);
+
+	self.campingrifle_bulletcounter = -1;
 }
 
 void W_Campingrifle_CheckReloadAndReady()
 {
 	w_ready();
-	if (self.campingrifle_bulletcounter >= cvar("g_balance_campingrifle_magazinecapacity"))
+	if (self.campingrifle_bulletcounter <= 0)
 		W_Campingrifle_Reload();
 	else
 		w_ready();
@@ -69,7 +87,7 @@
 	if (cvar("g_casings") >= 2)
 		SpawnCasing (((random () * 50 + 50) * v_right) - (v_forward * (random () * 25 + 25)) - ((random () * 5 - 70) * v_up), 2, vectoangles(v_forward),'0 250 0', 100, 3, self);
 	
-	self.campingrifle_bulletcounter = self.campingrifle_bulletcounter + 1;
+	self.campingrifle_bulletcounter = self.campingrifle_bulletcounter - 1;
 }
 
 void W_Campingrifle_Attack()
@@ -90,6 +108,7 @@
 .float bot_secondary_campingriflemooth;
 float w_campingrifle(float req)
 {
+	float full;
 	if (req == WR_AIM)
 	{
 		self.BUTTON_ATCK=FALSE;
@@ -115,7 +134,7 @@
 	}
 	else if (req == WR_THINK)
 	{
-		if(self.campingrifle_bulletcounter < 0)
+		if(self.campingrifle_bulletcounter < 0) // forced reload (e.g. because interrupted)
 		{
 			if(self.switchweapon == self.weapon)
 			if(self.weaponentity.state == WS_READY)
@@ -149,9 +168,11 @@
 	else if (req == WR_SETUP)
 	{
 		weapon_setup(WEP_CAMPINGRIFLE);
+
+		full = W_CampingRifle_CheckMaxBullets();
 		if(cvar("g_balance_campingrifle_auto_reload_after_changing_weapons"))
-		if(self.campingrifle_bulletcounter != 0)
-			self.campingrifle_bulletcounter = -1;
+			if(!full)
+				self.campingrifle_bulletcounter = -1;
 	}
 	else if (req == WR_CHECKAMMO1)
 		return self.ammo_nails >= cvar("g_balance_campingrifle_primary_ammo");


Property changes on: branches/nexuiz-2.0/data/qcsrc/server/w_campingrifle.qc
___________________________________________________________________
Name: svn:eol-style
   + native


Property changes on: branches/nexuiz-2.0/data/qcsrc/server/w_hlac.qc
___________________________________________________________________
Name: svn:eol-style
   + native


Property changes on: branches/nexuiz-2.0/data/qcsrc/server/w_hook.qc
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: branches/nexuiz-2.0/data/qcsrc/server/w_minstanex.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/w_minstanex.qc	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/qcsrc/server/w_minstanex.qc	2009-07-11 14:59:28 UTC (rev 7191)
@@ -5,7 +5,7 @@
 	float flying;
 	flying = IsFlying(self); // do this BEFORE to make the trace values from FireRailgunBullet last
 
-	W_SetupShot (self, TRUE, 5, "weapons/minstanexfire.wav", 0);
+	W_SetupShot (self, TRUE, 0, "weapons/minstanexfire.wav", 0);
 
 	yoda = 0;
 	damage_goodhits = 0;


Property changes on: branches/nexuiz-2.0/data/qcsrc/server/w_minstanex.qc
___________________________________________________________________
Name: svn:eol-style
   + native


Property changes on: branches/nexuiz-2.0/data/qcsrc/server/w_porto.qc
___________________________________________________________________
Name: svn:eol-style
   + native


Property changes on: branches/nexuiz-2.0/data/qcsrc/server/w_seeker.qc
___________________________________________________________________
Name: svn:eol-style
   + native


Property changes on: branches/nexuiz-2.0/data/qcsrc/server/w_tuba.qc
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: branches/nexuiz-2.0/data/qcsrc/server/waypointsprites.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/waypointsprites.qc	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/qcsrc/server/waypointsprites.qc	2009-07-11 14:59:28 UTC (rev 7191)
@@ -27,22 +27,35 @@
 
 void WaypointSprite_UpdateHealth(entity e, float f)
 {
-	if(f != e.health)
+	f = bound(0, f, e.max_health);
+	if(f != e.health || e.pain_finished)
 	{
 		e.health = f;
+		e.pain_finished = 0;
 		e.SendFlags |= 0x80;
 	}
 }
 
 void WaypointSprite_UpdateMaxHealth(entity e, float f)
 {
-	if(f != e.max_health)
+	if(f != e.max_health || e.pain_finished)
 	{
 		e.max_health = f;
+		e.pain_finished = 0;
 		e.SendFlags |= 0x80;
 	}
 }
 
+void WaypointSprite_UpdateBuildFinished(entity e, float f)
+{
+	if(f != e.pain_finished || e.max_health)
+	{
+		e.max_health = 0;
+		e.pain_finished = f;
+		e.SendFlags |= 0x80;
+	}
+}
+
 void WaypointSprite_UpdateOrigin(entity e, vector o)
 {
 	if(o != e.origin)
@@ -192,17 +205,33 @@
 
 float WaypointSprite_SendEntity(entity to, float sendflags)
 {
+	float dt;
+
 	WriteByte(MSG_ENTITY, ENT_CLIENT_WAYPOINT);
 
 	sendflags = sendflags & 0x7F;
 	
-	if(self.max_health)
+	if(g_nexball)
+		sendflags &~= 0x80;
+	else if(self.max_health || (self.pain_finished && (time < self.pain_finished + 0.25)))
 		sendflags |= 0x80;
 
 	WriteByte(MSG_ENTITY, sendflags);
 
-	if(self.max_health)
-		WriteByte(MSG_ENTITY, (self.health / self.max_health) * 255.0);
+	if(sendflags & 0x80)
+	{
+		if(self.max_health)
+		{
+			WriteByte(MSG_ENTITY, (self.health / self.max_health) * 191.0);
+		}
+		else
+		{
+			dt = self.pain_finished - time;
+			dt = bound(0, dt * 32, 16383);
+			WriteByte(MSG_ENTITY, (dt & 0xFF00) / 256 + 192);
+			WriteByte(MSG_ENTITY, (dt & 0x00FF));
+		}
+	}
 
 	if(sendflags & 64)
 	{
@@ -367,8 +396,15 @@
 	entity carrier
 )
 {
+	entity e;
 	WaypointSprite_Kill(carrier.waypointsprite_attached); // FC overrides attached
-	return WaypointSprite_Spawn(spr, 0, 0, carrier, '0 0 64', world, carrier.team, carrier, waypointsprite_attachedforcarrier, FALSE);
+	e = WaypointSprite_Spawn(spr, 0, 0, carrier, '0 0 64', world, carrier.team, carrier, waypointsprite_attachedforcarrier, FALSE);
+	if(e)
+	{
+		WaypointSprite_UpdateMaxHealth(e, '1 0 0' * healtharmor_maxdamage(start_health, start_armorvalue, cvar("g_balance_armor_blockpercent")) * 2);
+		WaypointSprite_UpdateHealth(e, '1 0 0' * healtharmor_maxdamage(carrier.health, carrier.armorvalue, cvar("g_balance_armor_blockpercent")));
+	}
+	return e;
 }
 
 void WaypointSprite_DetachCarrier(entity carrier)

Copied: branches/nexuiz-2.0/data/scripts/cyberparcour01.shader (from rev 7188, trunk/data/scripts/cyberparcour01.shader)
===================================================================
--- branches/nexuiz-2.0/data/scripts/cyberparcour01.shader	                        (rev 0)
+++ branches/nexuiz-2.0/data/scripts/cyberparcour01.shader	2009-07-11 14:59:28 UTC (rev 7191)
@@ -0,0 +1,44 @@
+//------------------------------------------------------------------------------
+// Shaders for the CyberParcour map project by sev
+// All editor images are placed in textures/cyberparcour01_shaders/
+//------------------------------------------------------------------------------
+
+textures/cyberparcour01_shaders/celshader
+{
+    qer_editorimage textures/cyberparcour01_shaders/celshader.tga
+
+    q3map_notjunc
+    q3map_nonplanar
+    q3map_bounce 0.0
+    q3map_shadeangle 120
+    q3map_texturesize 1 1
+    q3map_invert
+    q3map_offset -2.0
+
+    surfaceparm nolightmap
+    surfaceparm trans
+    surfaceparm nonsolid
+    surfaceparm nomarks
+
+    {
+        map textures/cyberparcour01_textures/black.tga
+        rgbGen identity
+    }
+}
+
+textures/cyberparcour01_shaders/sky
+{
+        qer_editorimage textures/cyberparcour01_shaders/sky.tga
+
+        surfaceparm sky
+        surfaceparm noimpact
+        surfaceparm nolightmap
+        surfaceparm nodlight
+        surfaceparm nomarks
+
+        nopicmip
+        nomipmaps
+
+        skyparms env/desert/desert - -
+        q3map_sunExt 1 0.975 0.95 300 315 50 0 16
+}

Modified: branches/nexuiz-2.0/data/scripts/eX.shader
===================================================================
--- branches/nexuiz-2.0/data/scripts/eX.shader	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/scripts/eX.shader	2009-07-11 14:59:28 UTC (rev 7191)
@@ -130,15 +130,28 @@
 	}	
 }
 
-textures/eX/eX_floor_grate_03
-{
-	qer_EditorImage		textures/eX/eX_floor_grate_03.tga
-	{
-		map textures/eX/eX_floor_grate_03
-	}
-	{
-		map $lightmap
-	}	
+textures/eX/eX_floor_grate03
+{
+	qer_editorimage textures/eX/eX_floor_grate03.tga
+	surfaceparm alphashadow
+	surfaceparm trans
+	surfaceparm nomarks
+	surfaceparm metalsteps
+	cull disable
+	nopicmip
+	{
+		map textures/eX/eX_floor_grate03.tga
+		rgbGen identity
+		depthWrite
+		alphafunc GT0
+	}
+	{
+		map $lightmap
+		blendfunc blend
+		rgbGen identity
+		tcGen lightmap
+		depthFunc equal
+	}
 }
 
 textures/eX/eX_floor_mtl_grate_01
@@ -757,17 +770,6 @@
 	}
 }
 
-textures/eX/eX_floor_grate03
-{
-	qer_EditorImage textures/eX/eX_floor_grate03.tga
-	{
-		map textures/eX/eX_floor_grate03
-	}
-	{
-		map $lightmap
-	}
-}
-
 textures/eX/eXmetalBase06rust
 {
 	qer_EditorImage textures/eX/eXmetalBase06rust.tga

Modified: branches/nexuiz-2.0/data/scripts/entities.def
===================================================================
--- branches/nexuiz-2.0/data/scripts/entities.def	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/scripts/entities.def	2009-07-11 14:59:28 UTC (rev 7191)
@@ -839,6 +839,7 @@
 angle: direction in which player will look when teleported, OR use
 angles: pitch and yaw when coming out of the teleporter (also specifies the direction the player will aim when coming out)
 cnt: weight for random selection, in case a teleporter points at multiple misc_teleporter_dest
+speed: maximum speed cap for the teleported player (if -1, teleported players will have no speed)
 */
 
 /*QUAKED onslaught_controlpoint (0 .5 .8) (-32 -32 0) (32 32 128) 
@@ -1219,20 +1220,32 @@
 _celshader: Sets the cel shader used for this geometry. Note: omit the "textures/" prefix.
 */
 
-/*QUAKED trigger_race_checkpoint (0 1 0) ? NOTOUCH STRICTTRIGGER CRUSH
+/*QUAKED trigger_race_checkpoint (0 1 0) ? NOTOUCH STRICTTRIGGER CRUSH FINISH
 A checkpoint, for the race game mode. Be sure to make them quite long, so they actually catch a player reliably!
 -------- KEYS --------
-cnt: Number of the checkpoint. 0 for finish line, and at least two other checkpoints have to exist. They MUST be touched in sequential order!
+cnt: Number of the checkpoint. 0 for start/finish line, and at least two other checkpoints have to exist. They MUST be touched in sequential order!
 message: Death message, when touching checkpoints in the wrong order.
 message2: Death message when someone gets pushed into this (default: "was thrown into a world of hurt by"). The # character is replaced by the attacker name if present (and it instead does not get appended to the end)
 targetname: Name of the checkpoint. info_player_race can target this to assign a spawn to a checkpoint. Also used for triggering a checkpoint by an event.
 target: when the checkpoint is passed, these entities are triggered. Useful for forcing items in certain areas using trigger_items
+race_penalty: when set, this penalty time is given if passing this checkpoint, and the checkpoint does not show up with a sprite. Useful for invisible checkpoints to detect driving around the intended checkpoint
+race_penalty_reason: reason to display when the penalty time is imposed. Default: "missing a checkpoint"
 -------- SPAWNFLAGS --------
 NOTOUCH: the checkpoint will not become active when touched, it HAS to be targeted
 STRICTTRIGGER: only trigger the targets when the checkpoint actually was reached in a valid way (that is, not when going back)
 CRUSH: the checkpoint kills when used at the wrong time
+FINISH: when set on the last checkpoint (i.e. the one with highest cnt), it is marked as finish line and the CP with cnt=0 is the start line
 */
 
+/*QUAKED trigger_race_penalty (0 1 0) ? NOTOUCH
+A penalty trigger.
+-------- KEYS --------
+race_penalty: this penalty time is given if passing this trigger
+race_penalty_reason: reason to display when the penalty time is imposed. Default: "leaving the track"
+-------- SPAWNFLAGS --------
+NOTOUCH: the trigger will not become active when touched, it HAS to be targeted
+*/
+
 /*QUAKED info_player_race (1 0.5 0) (-16 -16 -24) (16 16 45) 
 Race spawn point.
 NOTE for race_place: when the race starts after the qualifying, the player with the fastest map ends up at the info_player_race with race_place 1, and so on. If there are too many players, or if someone comes in later, he will spawn at an info_player_race with race_place not set. So for each trigger_race_checkpoint, there must be at least one corresponding info_player_race with race_place NOT set.
@@ -1240,7 +1253,7 @@
 target: this should point to a trigger_race_checkpoint to decide when this spawning point is active. The checkpoint has to be AFTER this spawn.
 target2: trigger all entities with this targetname when someone spawns
 cnt: weight of spawn point for random selection. Set to a lower value if you have many spawn points close together. Default value is 1.
-race_place: if target points to the trigger_race_checkpoint with cnt 0 (finish line), this sets which place the spawn corresponds to; the special value 0 stands for spawns for players who come in later (have to be behind the ones with race_place set to an actual place), and -1 marks the spawnpoint for qualifying mode only
+race_place: if target points to the trigger_race_checkpoint with cnt 0 (finish line), this sets which place the spawn corresponds to; the special value 0 stands for spawns for players who come in later (have to be behind the ones with race_place set to an actual place), and -1 marks the spawnpoint for qualifying mode only; any race map must have spawnpoints with race_place being 1, 2, 3 or it gets marked as a frustrating map
 restriction: when 1, only bots can spawn here; when 2, only humans can spawn here (be careful with these, or the game will crash because someone cannot spawn)
 */
 

Modified: branches/nexuiz-2.0/data/scripts/shaderlist.txt
===================================================================
--- branches/nexuiz-2.0/data/scripts/shaderlist.txt	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/scripts/shaderlist.txt	2009-07-11 14:59:28 UTC (rev 7191)
@@ -2,6 +2,7 @@
 blacksky
 cel
 common
+cyberparcour01
 desertfactory
 domination
 dsi
@@ -35,6 +36,7 @@
 morphed
 nexdm18_rmx
 official_cmp1
+onslaught
 portals
 race
 racetrack
@@ -43,18 +45,22 @@
 savdm6ish
 sav-graysky1
 sav-liquids
+sbshield
 sfx
 shotgun
+spiderbot
 stralenex1
 stralenex8
 strength
 swamp
+teamfx
 terrain_alphafade
 terrain_dotproduct2
 terrain_dotproduct2projected
 test3
 toxic
 tree
+tuba
 turrets
 tznex01
 water

Modified: branches/nexuiz-2.0/data/scripts/strength.shader
===================================================================
--- branches/nexuiz-2.0/data/scripts/strength.shader	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/scripts/strength.shader	2009-07-11 14:59:28 UTC (rev 7191)
@@ -499,28 +499,5 @@
 		map textures/evil6_lights/e6v_light_glow.jpg
 		blendfunc add
 	}
-}
-
-textures/eX/eX_floor_grate03
-{
-	qer_editorimage textures/eX/eX_floor_grate03.tga
-	surfaceparm alphashadow
-	surfaceparm trans
-	surfaceparm nomarks
-	surfaceparm metalsteps
-	cull disable
-	nopicmip
-	{
-		map textures/eX/eX_floor_grate03.tga
-		rgbGen identity
-		depthWrite
-		alphafunc GT0
-	}
-	{
-		map $lightmap
-		blendfunc blend
-		rgbGen identity
-		tcGen lightmap
-		depthFunc equal
-	}
-}
+}
+

Modified: branches/nexuiz-2.0/data/scripts/teamfx.shader
===================================================================
--- branches/nexuiz-2.0/data/scripts/teamfx.shader	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/scripts/teamfx.shader	2009-07-11 14:59:28 UTC (rev 7191)
@@ -39,4 +39,82 @@
 	blendfunc add
 }
 
-}
\ No newline at end of file
+}
+
+teamfx/bluering
+{
+surfaceparm trans
+{
+	map models/teamfx/blobblue.tga
+	blendfunc add
+}
+}
+teamfx/redring
+{
+surfaceparm trans
+{
+	map models/teamfx/blobyellow.tga
+	blendfunc add
+}
+}
+teamfx/yellowring
+{
+surfaceparm trans
+{
+	map models/teamfx/blobpink.tga
+	blendfunc add
+}
+}
+teamfx/pinkring
+{
+surfaceparm trans
+{
+	map models/teamfx/blobpink.tga
+	blendfunc add
+}
+}
+teamfx/flare
+{
+surfaceparm trans
+deformVertexes autosprite
+{
+	map models/teamfx/flare.tga
+	blendfunc add
+}
+}
+teamfx/rayblue
+{
+surfaceparm trans
+deformVertexes autosprite
+{
+	map models/teamfx/rayblue.tga
+	blendfunc add
+}
+}
+teamfx/rayred
+{
+surfaceparm trans
+deformVertexes autosprite
+{
+	map models/teamfx/rayred.tga
+	blendfunc add
+}
+}
+teamfx/rayyellow
+{
+surfaceparm trans
+deformVertexes autosprite
+{
+	map models/teamfx/rayyellow.tga
+	blendfunc add
+}
+}
+teamfx/raypink
+{
+surfaceparm trans
+deformVertexes autosprite
+{
+	map models/teamfx/raypink.tga
+	blendfunc add
+}
+}

Copied: branches/nexuiz-2.0/data/sound/cyberparcour01 (from rev 7188, trunk/data/sound/cyberparcour01)

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

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

Copied: branches/nexuiz-2.0/data/textures/cyberparcour01_shaders (from rev 7188, trunk/data/textures/cyberparcour01_shaders)

Copied: branches/nexuiz-2.0/data/textures/cyberparcour01_textures (from rev 7188, trunk/data/textures/cyberparcour01_textures)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/032-01c_r.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/032-01c_r.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/032-01c_r_norm.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/032-01c_r_norm.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/032-02c_r.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/032-02c_r.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/032-02c_r_norm.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/032-02c_r_norm.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/032-03c_r.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/032-03c_r.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/032-03c_r_norm.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/032-03c_r_norm.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/032-04c_r.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/032-04c_r.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/032-04c_r_norm.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/032-04c_r_norm.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/032-04d_r.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/032-04d_r.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/032-04d_r_norm.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/032-04d_r_norm.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/032-04e_r.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/032-04e_r.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/032-04f_r.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/032-04f_r.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/032-05c_r.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/032-05c_r.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/032-05c_r_norm.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/032-05c_r_norm.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/032-05d_r.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/032-05d_r.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/032-05d_r_norm.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/032-05d_r_norm.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/032-06c_r.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/032-06c_r.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/032-06c_r_norm.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/032-06c_r_norm.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/048-01a_r.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/048-01a_r.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/048-01a_r_norm.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/048-01a_r_norm.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/048-01c_r.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/048-01c_r.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/048-01c_r_norm.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/048-01c_r_norm.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/048-02c_r.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/048-02c_r.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/048-02c_r_norm.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/048-02c_r_norm.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/048-02d_r.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/048-02d_r.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/048-02d_r_norm.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/048-02d_r_norm.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/048-02g_r.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/048-02g_r.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/048-02g_r_norm.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/048-02g_r_norm.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/048-02h_r.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/048-02h_r.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/048-02h_r_norm.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/048-02h_r_norm.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/064-01c_r.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/064-01c_r.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/064-01c_r_norm.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/064-01c_r_norm.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/064-02c_r.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/064-02c_r.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/064-02c_r_norm.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/064-02c_r_norm.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/064-03a_r.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/064-03a_r.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/064-03a_r_norm.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/064-03a_r_norm.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/064-03b_r.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/064-03b_r.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/064-03b_r_norm.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/064-03b_r_norm.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/064-03c_r.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/064-03c_r.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/064-03c_r_norm.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/064-03c_r_norm.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/064-04a_r.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/064-04a_r.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/064-04a_r_norm.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/064-04a_r_norm.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/064-04c_r.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/064-04c_r.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/064-04c_r_norm.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/064-04c_r_norm.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/064-05b_r.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/064-05b_r.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/064-05b_r_norm.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/064-05b_r_norm.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/064-05c_r.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/064-05c_r.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/064-05c_r_norm.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/064-05c_r_norm.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/064-06c_r.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/064-06c_r.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/064-06c_r_norm.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/064-06c_r_norm.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/064-07c_r.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/064-07c_r.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/064-07c_r_norm.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/064-07c_r_norm.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/064-07d_r.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/064-07d_r.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/064-07d_r_norm.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/064-07d_r_norm.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/096-01c_r.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/096-01c_r.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/096-01c_r_norm.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/096-01c_r_norm.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/128-03a_r.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/128-03a_r.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/128-03a_r_norm.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/128-03a_r_norm.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/128-04c_r.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/128-04c_r.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/128-04c_r_norm.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/128-04c_r_norm.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/128-04d_r.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/128-04d_r.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/128-04d_r_norm.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/128-04d_r_norm.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/128-comb1_r.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/128-comb1_r.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/128-comb1_r_norm.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/128-comb1_r_norm.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/s064-01c_r.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/s064-01c_r.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/s064-01c_r_norm.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/s064-01c_r_norm.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/s064-01d_r.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/s064-01d_r.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/s064-01d_r_norm.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/s064-01d_r_norm.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/s064-01e_r.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/s064-01e_r.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/s064-01e_r_norm.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/s064-01e_r_norm.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/s064-01f_r.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/s064-01f_r.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/s064-01f_r_norm.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/s064-01f_r_norm.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/s064-02c_r.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/s064-02c_r.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/s064-02c_r_norm.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/s064-02c_r_norm.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/s064-02d_r.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/s064-02d_r.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/s064-02d_r_norm.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/s064-02d_r_norm.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/s064-03c_r.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/s064-03c_r.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/s064-03c_r_norm.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/s064-03c_r_norm.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/s064-03d_r.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/s064-03d_r.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/s064-03d_r_norm.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/s064-03d_r_norm.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/s064-04c_r.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/s064-04c_r.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/s064-04c_r_norm.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/s064-04c_r_norm.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/s064-04d_r.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/s064-04d_r.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/s064-04d_r_norm.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/s064-04d_r_norm.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/s128-01c_r.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/s128-01c_r.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/s128-01c_r_glow.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/s128-01c_r_glow.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/s128-01c_r_norm.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/s128-01c_r_norm.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/s128-01d_r.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/s128-01d_r.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/s128-01d_r_glow.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/s128-01d_r_glow.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/s128-01d_r_norm.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/s128-01d_r_norm.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/s128-02c_r.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/s128-02c_r.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/s128-02c_r_norm.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/s128-02c_r_norm.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/s128-02d_r.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/s128-02d_r.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/s128-02d_r_norm.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/s128-02d_r_norm.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/s128-04c_r.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/s128-04c_r.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/s128-04c_r_norm.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/s128-04c_r_norm.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/s128-04d_r.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/s128-04d_r.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/s128-04d_r_norm.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/s128-04d_r_norm.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/t064-02c_r.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/t064-02c_r.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/t064-02c_r_norm.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/t064-02c_r_norm.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/t064-02d_r.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/t064-02d_r.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/t064-02d_r_norm.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/t064-02d_r_norm.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/v064-01c_r.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/v064-01c_r.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/v064-01c_r_norm.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/v064-01c_r_norm.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/v064-01d_r.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/v064-01d_r.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/v064-01d_r_norm.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/v064-01d_r_norm.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/v064-02c_r.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/v064-02c_r.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/v064-02c_r_norm.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/v064-02c_r_norm.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/v064-02d_r.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/v064-02d_r.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/v064-02d_r_norm.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/v064-02d_r_norm.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/v064-03c_r.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/v064-03c_r.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/v064-03c_r_norm.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/v064-03c_r_norm.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/v064-03d_r.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/v064-03d_r.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/v064-03d_r_norm.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/v064-03d_r_norm.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/v096-01b_r.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/v096-01b_r.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/v096-01b_r_norm.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/v096-01b_r_norm.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/v096-01c_r.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/v096-01c_r.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/v096-01c_r_norm.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/v096-01c_r_norm.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/v128-01c_r.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/v128-01c_r.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/v128-01c_r_norm.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/v128-01c_r_norm.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/v128-01d_r.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/v128-01d_r.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/v128-01d_r_norm.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/v128-01d_r_norm.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/v128-02c_r.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/v128-02c_r.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/v128-02c_r_norm.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/v128-02c_r_norm.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/v128-02d_r.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/v128-02d_r.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/v128-02d_r_norm.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/v128-02d_r_norm.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/v128-03c_r.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/v128-03c_r.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/v128-03c_r_norm.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/v128-03c_r_norm.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/v128-03d_r.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/v128-03d_r.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/v128-03d_r_norm.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/v128-03d_r_norm.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/v128-03g_r.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/v128-03g_r.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/v128-03g_r_norm.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/v128-03g_r_norm.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/v128-04c_r.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/v128-04c_r.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/v128-04c_r_norm.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/v128-04c_r_norm.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/v128-04d_r.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/v128-04d_r.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/v128-04d_r_norm.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/v128-04d_r_norm.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/v128-04g_r.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/v128-04g_r.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/egyptsoc_trim/v128-04g_r_norm.tga (from rev 7188, trunk/data/textures/egyptsoc_trim/v128-04g_r_norm.tga)
===================================================================
(Binary files differ)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Modified: branches/nexuiz-2.0/data/textures/insurrectionist.tga
===================================================================
(Binary files differ)

Modified: branches/nexuiz-2.0/data/textures/insurrectionist_glow.tga
===================================================================
(Binary files differ)

Modified: branches/nexuiz-2.0/data/textures/lycanthrope.tga
===================================================================
(Binary files differ)

Deleted: branches/nexuiz-2.0/data/textures/lycanthrope_bump.tga
===================================================================
(Binary files differ)

Modified: branches/nexuiz-2.0/data/textures/lycanthrope_gloss.tga
===================================================================
(Binary files differ)

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

Modified: branches/nexuiz-2.0/data/textures/pyria.tga
===================================================================
(Binary files differ)

Modified: branches/nexuiz-2.0/data/textures/pyria_glow.tga
===================================================================
(Binary files differ)

Modified: branches/nexuiz-2.0/data/textures/pyria_pants.tga
===================================================================
(Binary files differ)

Modified: branches/nexuiz-2.0/data/textures/pyria_shirt.tga
===================================================================
(Binary files differ)

Modified: branches/nexuiz-2.0/data/textures/shock.tga
===================================================================
(Binary files differ)

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

Modified: branches/nexuiz-2.0/data/tooltips.db
===================================================================
--- branches/nexuiz-2.0/data/tooltips.db	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/tooltips.db	2009-07-11 14:59:28 UTC (rev 7191)
@@ -201,3 +201,5 @@
 \cl_teamradar_background_alpha\-
 \cl_hidewaypoints\-
 \cl_shownames\-
+
+\crosshair_hittest\None: do not do hit tests for the crosshair; TrueAim: blur the crosshair when you would not hit the wall; Enemies: also enlarge the crosshair when you would hit an enemy

Modified: branches/nexuiz-2.0/data/weapons.cfg
===================================================================
--- branches/nexuiz-2.0/data/weapons.cfg	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/data/weapons.cfg	2009-07-11 14:59:28 UTC (rev 7191)
@@ -398,7 +398,7 @@
 
 set g_balance_campingrifle_magazinecapacity 8
 set g_balance_campingrifle_reloadtime 2 // matches reload anim
-set g_balance_campingrifle_auto_reload_after_changing_weapons 1
+set g_balance_campingrifle_auto_reload_after_changing_weapons 0
 set g_balance_campingrifle_primary_damage 60
 set g_balance_campingrifle_primary_headshotaddeddamage 100
 set g_balance_campingrifle_primary_spread 0

Copied: branches/nexuiz-2.0/misc/mediasource/hud/numbers.png (from rev 7188, trunk/misc/mediasource/hud/numbers.png)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/misc/mediasource/hud/numbers_outline.png (from rev 7188, trunk/misc/mediasource/hud/numbers_outline.png)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/misc/mediasource/hud/sb_scoreboard_bg.xcf (from rev 7188, trunk/misc/mediasource/hud/sb_scoreboard_bg.xcf)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/misc/mediasource/hud/sprite-to-num.sh (from rev 7188, trunk/misc/mediasource/hud/sprite-to-num.sh)
===================================================================
--- branches/nexuiz-2.0/misc/mediasource/hud/sprite-to-num.sh	                        (rev 0)
+++ branches/nexuiz-2.0/misc/mediasource/hud/sprite-to-num.sh	2009-07-11 14:59:28 UTC (rev 7191)
@@ -0,0 +1,157 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+<head>
+<title>Nexuiz - Alientrap Development</title>
+<meta http-equiv="content-type" content="text/html; charset=utf-8" />
+<meta name="description" content="Redmine" />
+<meta name="keywords" content="issue,bug,tracker" />
+<link href="/stylesheets/application.css?1241613297" media="all" rel="stylesheet" type="text/css" />
+<script src="/javascripts/prototype.js?1238935462" type="text/javascript"></script>
+<script src="/javascripts/effects.js?1238935462" type="text/javascript"></script>
+<script src="/javascripts/dragdrop.js?1238935462" type="text/javascript"></script>
+<script src="/javascripts/controls.js?1238935462" type="text/javascript"></script>
+<script src="/javascripts/application.js?1238935462" type="text/javascript"></script>
+<link href="/stylesheets/jstoolbar.css?1238935462" media="screen" rel="stylesheet" type="text/css" />
+<!--[if IE]>
+    <style type="text/css">
+      * html body{ width: expression( document.documentElement.clientWidth < 900 ? '900px' : '100%' ); }
+      body {behavior: url(/stylesheets/csshover.htc?1238935462);}
+    </style>
+<![endif]-->
+  <style type="text/css">
+.question { background-color:#FFEBC1; border:2px solid #FDBD3B; margin-bottom:12px; padding:0px 4px 8px 4px; }
+td.formatted_questions { text-align: left; white-space: normal}
+td.formatted_questions ol { margin-top: 0px; margin-bottom: 0px; }
+  </style>
+ <link href="/plugin_assets/redmine_vote/stylesheets/stylesheet.css?1241479970" media="screen" rel="stylesheet" type="text/css" />
+<!-- page specific tags -->
+    <link href="/stylesheets/scm.css?1238935462" media="screen" rel="stylesheet" type="text/css" /></head>
+<body>
+<div id="wrapper">
+<div id="top-menu">
+    <div id="account">
+        <ul><li><a href="/login" class="login">Sign in</a></li>
+<li><a href="/account/register" class="register">Register</a></li></ul>    </div>
+    
+    <ul><li><a href="/" class="home">Home</a></li>
+<li><a href="/projects" class="projects">Projects</a></li>
+<li><a href="http://www.redmine.org/guide" class="help">Help</a></li></ul></div>
+      
+<div id="header">
+    <div id="quick-search">
+        <form action="/search/index/nexuiz" method="get">
+        <a href="/search/index/nexuiz" accesskey="4">Search</a>:
+        <input accesskey="f" class="small" id="q" name="q" size="20" type="text" />
+        </form>
+        
+    </div>
+    
+    <h1>Nexuiz</h1>
+    
+    <div id="main-menu">
+        <ul><li><a href="/projects/show/nexuiz" class="overview">Overview</a></li>
+<li><a href="/projects/activity/nexuiz" class="activity">Activity</a></li>
+<li><a href="/projects/roadmap/nexuiz" class="roadmap">Roadmap</a></li>
+<li><a href="/projects/nexuiz/issues" class="issues">Issues</a></li>
+<li><a href="/projects/nexuiz/news" class="news">News</a></li>
+<li><a href="/projects/nexuiz/documents" class="documents">Documents</a></li>
+<li><a href="/wiki/nexuiz" class="wiki">Wiki</a></li>
+<li><a href="/projects/list_files/nexuiz" class="files">Files</a></li>
+<li><a href="/repositories/show/nexuiz" class="repository">Repository</a></li>
+<li><a href="/ezfaq/index/nexuiz" class="ezfaq">FAQ</a></li></ul>
+    </div>
+</div>
+
+<div class="nosidebar" id="main">
+    <div id="sidebar">        
+        
+        
+    </div>
+    
+    <div id="content">
+				
+        <h2>sprite-to-num.sh</h2>
+
+<div class="attachments">
+<p>fruitiex's script to slice them - 
+   <span class="author">-z-, 06/28/2009 10:56 AM</span></p>
+<p><a href="/attachments/download/273/sprite-to-num.sh">Download</a>   <span class="size">(470 Bytes)</span></p>
+
+</div>
+&nbsp;
+<div class="autoscroll">
+<table class="filecontent CodeRay">
+<tbody>
+
+
+<tr><th class="line-num" id="L1"><a href="#L1">1</a></th><td class="line-code"><pre>#!/bin/bash
+</pre></td></tr>
+
+
+<tr><th class="line-num" id="L2"><a href="#L2">2</a></th><td class="line-code"><pre>offset=0
+</pre></td></tr>
+
+
+<tr><th class="line-num" id="L3"><a href="#L3">3</a></th><td class="line-code"><pre>numsize=64
+</pre></td></tr>
+
+
+<tr><th class="line-num" id="L4"><a href="#L4">4</a></th><td class="line-code"><pre>i=0
+</pre></td></tr>
+
+
+<tr><th class="line-num" id="L5"><a href="#L5">5</a></th><td class="line-code"><pre>while [ $i -lt 13 ];do convert -crop $((numsize))x$numsize+$offset+0 numbers.png num_$i.tga;convert -crop $((numsize))x$numsize+$offset+0 numbers_outline.png num_$((i))_stroke.tga;offset=$((offset+$numsize));i=$((i+1));done
+</pre></td></tr>
+
+
+<tr><th class="line-num" id="L6"><a href="#L6">6</a></th><td class="line-code"><pre>mv num_10.tga num_minus.tga
+</pre></td></tr>
+
+
+<tr><th class="line-num" id="L7"><a href="#L7">7</a></th><td class="line-code"><pre>mv num_10_stroke.tga num_minus_stroke.tga
+</pre></td></tr>
+
+
+<tr><th class="line-num" id="L8"><a href="#L8">8</a></th><td class="line-code"><pre>
+</pre></td></tr>
+
+
+<tr><th class="line-num" id="L9"><a href="#L9">9</a></th><td class="line-code"><pre>mv num_11.tga num_plus.tga
+</pre></td></tr>
+
+
+<tr><th class="line-num" id="L10"><a href="#L10">10</a></th><td class="line-code"><pre>mv num_11_stroke.tga num_plus_stroke.tga
+</pre></td></tr>
+
+
+<tr><th class="line-num" id="L11"><a href="#L11">11</a></th><td class="line-code"><pre>
+</pre></td></tr>
+
+
+<tr><th class="line-num" id="L12"><a href="#L12">12</a></th><td class="line-code"><pre>mv num_12.tga num_colon.tga
+</pre></td></tr>
+
+
+<tr><th class="line-num" id="L13"><a href="#L13">13</a></th><td class="line-code"><pre>mv num_12_stroke.tga num_colon_stroke.tga
+</pre></td></tr>
+
+
+</tbody>
+</table>
+</div>
+
+
+
+        
+    </div>
+</div>
+
+<div id="ajax-indicator" style="display:none;"><span>Loading...</span></div>
+	
+<div id="footer">
+    Powered by <a href="http://www.redmine.org/">Redmine</a> &copy; 2006-2009 Jean-Philippe Lang
+</div>
+</div>
+
+</body>
+</html>

Modified: branches/nexuiz-2.0/misc/netradiant-NexuizPack/nexuiz.game/data/entities.def
===================================================================
--- branches/nexuiz-2.0/misc/netradiant-NexuizPack/nexuiz.game/data/entities.def	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/misc/netradiant-NexuizPack/nexuiz.game/data/entities.def	2009-07-11 14:59:28 UTC (rev 7191)
@@ -839,6 +839,7 @@
 angle: direction in which player will look when teleported, OR use
 angles: pitch and yaw when coming out of the teleporter (also specifies the direction the player will aim when coming out)
 cnt: weight for random selection, in case a teleporter points at multiple misc_teleporter_dest
+speed: maximum speed cap for the teleported player (if -1, teleported players will have no speed)
 */
 
 /*QUAKED onslaught_controlpoint (0 .5 .8) (-32 -32 0) (32 32 128) 
@@ -1219,10 +1220,10 @@
 _celshader: Sets the cel shader used for this geometry. Note: omit the "textures/" prefix.
 */
 
-/*QUAKED trigger_race_checkpoint (0 1 0) ? NOTOUCH STRICTTRIGGER CRUSH
+/*QUAKED trigger_race_checkpoint (0 1 0) ? NOTOUCH STRICTTRIGGER CRUSH FINISH
 A checkpoint, for the race game mode. Be sure to make them quite long, so they actually catch a player reliably!
 -------- KEYS --------
-cnt: Number of the checkpoint. 0 for finish line, and at least two other checkpoints have to exist. They MUST be touched in sequential order!
+cnt: Number of the checkpoint. 0 for start/finish line, and at least two other checkpoints have to exist. They MUST be touched in sequential order!
 message: Death message, when touching checkpoints in the wrong order.
 message2: Death message when someone gets pushed into this (default: "was thrown into a world of hurt by"). The # character is replaced by the attacker name if present (and it instead does not get appended to the end)
 targetname: Name of the checkpoint. info_player_race can target this to assign a spawn to a checkpoint. Also used for triggering a checkpoint by an event.
@@ -1231,6 +1232,7 @@
 NOTOUCH: the checkpoint will not become active when touched, it HAS to be targeted
 STRICTTRIGGER: only trigger the targets when the checkpoint actually was reached in a valid way (that is, not when going back)
 CRUSH: the checkpoint kills when used at the wrong time
+FINISH: when set on the last checkpoint (i.e. the one with highest cnt), it is marked as finish line and the CP with cnt=0 is the start line
 */
 
 /*QUAKED info_player_race (1 0.5 0) (-16 -16 -24) (16 16 45) 
@@ -1240,7 +1242,7 @@
 target: this should point to a trigger_race_checkpoint to decide when this spawning point is active. The checkpoint has to be AFTER this spawn.
 target2: trigger all entities with this targetname when someone spawns
 cnt: weight of spawn point for random selection. Set to a lower value if you have many spawn points close together. Default value is 1.
-race_place: if target points to the trigger_race_checkpoint with cnt 0 (finish line), this sets which place the spawn corresponds to; the special value 0 stands for spawns for players who come in later (have to be behind the ones with race_place set to an actual place), and -1 marks the spawnpoint for qualifying mode only
+race_place: if target points to the trigger_race_checkpoint with cnt 0 (finish line), this sets which place the spawn corresponds to; the special value 0 stands for spawns for players who come in later (have to be behind the ones with race_place set to an actual place), and -1 marks the spawnpoint for qualifying mode only; any race map must have spawnpoints with race_place being 1, 2, 3 or it gets marked as a frustrating map
 restriction: when 1, only bots can spawn here; when 2, only humans can spawn here (be careful with these, or the game will crash because someone cannot spawn)
 */
 

Modified: branches/nexuiz-2.0/misc/tools/midi2cfg-ng.conf
===================================================================
--- branches/nexuiz-2.0/misc/tools/midi2cfg-ng.conf	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/misc/tools/midi2cfg-ng.conf	2009-07-11 14:59:28 UTC (rev 7191)
@@ -1,6 +1,6 @@
 raw set places_tuba "tUba1 tUba2 tUba3 tUba4 tUba5 tUba6 tUba7 tUba8 tUba9 tUba10 tUba11 tUba12 tUba13 tUba14 tUba15 tUba16 tUba17 tUba18 tUba19 tUba20 tUba21 tUba22 tUba23 tUba24"
 raw set places_percussion "tChr1 tChr2 tChr3 tChr4 tChr5 tChr6 tChr7 tChr8 tChr9 tChr10 tChr11 tChr12 tChr13 tChr14 tChr15 tChr16 tChr17 tChr18 tChr19"
-raw set places_end "end1 end2 end3 end4 end5 end6 end7 end8 end9 end10 end11 end12 end13 end14 end15 end16 end17 end18 end19 end20 end21 end22 end23 end24 end25 end26 end27 end28 end29 end30 end31 end32 end33 end34 end35 end36 end37 end38 end39 end40 end41 end42 end43 end44 end45 end46 end47 end48 end49 end50 end51 end52 end53 end54 end55 end56 end57"
+raw set places_end "end1 end2 end3 end4 end5 end6 end7 end8 end9 end10 end11 end12 end13 end14 end15 end16 end17 end24 end25 end26 end27 end28 end29 end30 end31 end32 end33 end34 end35 end36 end37 end38 end39 end40 end41 end42 end43 end44 end45 end46 end47 end48 end49 end50 end51 end52 end53 end54 end55 end56 end57"
 
 bot tuba
 	channels 1 2 3 4 5 6 7 8 9 11 12 13 14 15 16

Modified: branches/nexuiz-2.0/server/server.cfg
===================================================================
--- branches/nexuiz-2.0/server/server.cfg	2009-07-11 14:55:44 UTC (rev 7190)
+++ branches/nexuiz-2.0/server/server.cfg	2009-07-11 14:59:28 UTC (rev 7191)
@@ -18,7 +18,7 @@
 //log_file "server.log"	// server console output will also be copied to this file. This: "${serverconfig}.log" uses variable substitution to make the logfile have the same name as your config file with .log appended which is useful if you run several servers
 
 // List of maps to play on the server.  Set to "" to autodetect (which would enumerate ALL maps.  Maps that don't support the current game mode will be skipped, so you don't need to remove them here.
-//g_maplist "accident aggressor aneurysm basement basementctf bleach bloodprison bloodprisonctf bluesky darkzone desertfactory dieselpower dismal downer eggandbacon evilspace farewell final_rage ons-reborn racetrack reslimed ruiner runningman runningman_1on1remix runningmanctf silvercity skyway slimepit soylent starship stormkeep strength toxic warfare"
+//g_maplist "accident aggressor aneurysm basement basementctf bleach bloodprison bloodprisonctf bluesky cyberparcour01 darkzone desertfactory dieselpower dismal downer eggandbacon evilspace farewell final_rage ons-reborn racetrack reslimed ruiner runningman runningman_1on1remix runningmanctf silvercity skyway slimepit soylent starship stormkeep strength toxic warfare"
 //g_maplist_shuffle 1	// 0 always selects the next map out of g_maplist (but then better set g_maplist_votable 0 below to prevent repetitive votes), 1 will select random maps each time
 //g_maplist_mostrecent_count 3	// number of maps that have to be played before a map can be repeated
 
@@ -31,6 +31,7 @@
 //g_runematch_point_limit -1	// frag/point limit for RUNE
 //g_keyhunt_point_limit -1	// frag/point limit for KH
 //g_lms_lives_override -1	// lives for LMS
+//g_nexball_goallimit -1	// goals for NEXBALL
 
 //g_ctf_win_mode 0	// CTF win mode: 0 = caps only, 1 = caps + points as tie breaker, 2 = points only
 //g_ctf_ignore_frags 1	// set to 1 to ignore kills except for FC kills
@@ -39,7 +40,7 @@
 //g_keyhunt_teams_override -1	// teams for KH
 
 // GAME MODE: what type of server do you want to host?
-// possible values: dm (deathmatch), tdm (team deathmatch), dom (domination), ctf (ctf), rune (runematch), lms (last man standing), arena (arena), kh (keyhunt), as (assault), ons (onslaught), race (race)
+// possible values: dm (deathmatch), tdm (team deathmatch), dom (domination), ctf (ctf), rune (runematch), lms (last man standing), arena (arena), kh (keyhunt), as (assault), ons (onslaught), race (race), nexball (nexball)
 //gametype dm
 
 



More information about the nexuiz-commits mailing list