[nexuiz-commits] r7442 - in branches/nexuiz-2.0: . Docs Docs/htmlfiles data data/maps data/models/desertfactory/objects_metal data/models/desertfactory/objects_plants data/models/desertfactory/objects_wood data/models/desertfactory/structure_metal data/models/desertfactory/structure_stone data/models/desertfactory/structure_wood data/models/spiderbot data/models/sprites data/qcsrc/client data/qcsrc/common data/qcsrc/menu/nexuiz data/qcsrc/server data/qcsrc/server/vehicles misc/buildfiles/brand misc/buildfiles/osx/Nexuiz-SDL.app/Contents/MacOS misc/buildfiles/osx/Nexuiz.app/Contents/MacOS misc/buildfiles/w32 misc/mediasource/hud misc/mediasource/menuskins/wickedz/background_builder misc/netradiant-NexuizPack/nexuiz.game/data misc/tools misc/tools/ttf2conchars server

DONOTREPLY at icculus.org DONOTREPLY at icculus.org
Sat Aug 15 15:18:20 EDT 2009


Author: div0
Date: 2009-08-15 15:18:18 -0400 (Sat, 15 Aug 2009)
New Revision: 7442

Added:
   branches/nexuiz-2.0/data/apply-eol-style.sh
   branches/nexuiz-2.0/data/eol-style.txt
   branches/nexuiz-2.0/data/find-eol-style.sh
   branches/nexuiz-2.0/data/models/spiderbot/spiderbot.dpm.framegroups
   branches/nexuiz-2.0/misc/buildfiles/osx/Nexuiz-SDL.app/Contents/MacOS/libogg.0.dylib
   branches/nexuiz-2.0/misc/buildfiles/osx/Nexuiz-SDL.app/Contents/MacOS/libtheora.0.dylib
   branches/nexuiz-2.0/misc/buildfiles/osx/Nexuiz-SDL.app/Contents/MacOS/libvorbisenc.2.0.6.dylib
   branches/nexuiz-2.0/misc/buildfiles/osx/Nexuiz-SDL.app/Contents/MacOS/libvorbisenc.2.dylib
   branches/nexuiz-2.0/misc/buildfiles/osx/Nexuiz-SDL.app/Contents/MacOS/libvorbisenc.dylib
   branches/nexuiz-2.0/misc/buildfiles/osx/Nexuiz-SDL.app/Contents/MacOS/libvorbisfile.3.dylib
   branches/nexuiz-2.0/misc/buildfiles/osx/Nexuiz.app/Contents/MacOS/libogg.0.dylib
   branches/nexuiz-2.0/misc/buildfiles/osx/Nexuiz.app/Contents/MacOS/libtheora.0.dylib
   branches/nexuiz-2.0/misc/buildfiles/osx/Nexuiz.app/Contents/MacOS/libvorbisenc.2.0.6.dylib
   branches/nexuiz-2.0/misc/buildfiles/osx/Nexuiz.app/Contents/MacOS/libvorbisenc.2.dylib
   branches/nexuiz-2.0/misc/buildfiles/osx/Nexuiz.app/Contents/MacOS/libvorbisenc.dylib
   branches/nexuiz-2.0/misc/buildfiles/osx/Nexuiz.app/Contents/MacOS/libvorbisfile.3.dylib
Removed:
   branches/nexuiz-2.0/misc/buildfiles/osx/Nexuiz-SDL.app/Contents/MacOS/libvorbisenc.dylib
   branches/nexuiz-2.0/misc/buildfiles/osx/Nexuiz.app/Contents/MacOS/libvorbisenc.dylib
Modified:
   branches/nexuiz-2.0/.patchsets
   branches/nexuiz-2.0/Docs/htmlfiles/make-htmlfiles.sh
   branches/nexuiz-2.0/Docs/mapping.txt
   branches/nexuiz-2.0/data/Makefile
   branches/nexuiz-2.0/data/build-compat-pack.sh
   branches/nexuiz-2.0/data/check-sounds.sh
   branches/nexuiz-2.0/data/defaultNexuiz.cfg
   branches/nexuiz-2.0/data/maps/aggressor.instantaction
   branches/nexuiz-2.0/data/maps/aneurysm.instantaction
   branches/nexuiz-2.0/data/maps/basement.instantaction
   branches/nexuiz-2.0/data/maps/bloodprison.instantaction
   branches/nexuiz-2.0/data/maps/campaignNexuiz25.txt
   branches/nexuiz-2.0/data/maps/compile_bloodprisonctf.sh
   branches/nexuiz-2.0/data/maps/darkzone.instantaction
   branches/nexuiz-2.0/data/maps/desertfactory.bgs
   branches/nexuiz-2.0/data/maps/desertfactory.bgs-maker.pl
   branches/nexuiz-2.0/data/maps/downer.instantaction
   branches/nexuiz-2.0/data/maps/entmerge.rb
   branches/nexuiz-2.0/data/maps/farewell.instantaction
   branches/nexuiz-2.0/data/maps/ons-reborn.bsp
   branches/nexuiz-2.0/data/maps/ons-reborn.map
   branches/nexuiz-2.0/data/maps/ons-reborn.mapinfo
   branches/nexuiz-2.0/data/maps/runningmanctf.waypoints.hardwired
   branches/nexuiz-2.0/data/maps/slimepit.instantaction
   branches/nexuiz-2.0/data/maps/strength.sh
   branches/nexuiz-2.0/data/maps/tutorial.mapinfo
   branches/nexuiz-2.0/data/maps/warfare.instantaction
   branches/nexuiz-2.0/data/models/desertfactory/objects_metal/compile.sh
   branches/nexuiz-2.0/data/models/desertfactory/objects_plants/compile.sh
   branches/nexuiz-2.0/data/models/desertfactory/objects_wood/compile.sh
   branches/nexuiz-2.0/data/models/desertfactory/structure_metal/compile.sh
   branches/nexuiz-2.0/data/models/desertfactory/structure_stone/compile.sh
   branches/nexuiz-2.0/data/models/desertfactory/structure_wood/compile.sh
   branches/nexuiz-2.0/data/models/sprites/make-sprites.sh
   branches/nexuiz-2.0/data/qcsrc/client/View.qc
   branches/nexuiz-2.0/data/qcsrc/client/miscfunctions.qc
   branches/nexuiz-2.0/data/qcsrc/client/sbar.qc
   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/util.qc
   branches/nexuiz-2.0/data/qcsrc/common/util.qh
   branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/dialog_multiplayer_create_mapinfo.c
   branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/dialog_multiplayer_join_serverinfo.c
   branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/dialog_settings_input.c
   branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/serverlist.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/server/bots.qc
   branches/nexuiz-2.0/data/qcsrc/server/cl_client.qc
   branches/nexuiz-2.0/data/qcsrc/server/cl_impulse.qc
   branches/nexuiz-2.0/data/qcsrc/server/cl_physics.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/ctf.qc
   branches/nexuiz-2.0/data/qcsrc/server/g_damage.qc
   branches/nexuiz-2.0/data/qcsrc/server/g_tetris.qc
   branches/nexuiz-2.0/data/qcsrc/server/havocbot.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/progs.src
   branches/nexuiz-2.0/data/qcsrc/server/t_items.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/w_hlac.qc
   branches/nexuiz-2.0/data/qcsrc/server/w_minstanex.qc
   branches/nexuiz-2.0/data/qcsrc/server/w_rocketlauncher.qc
   branches/nexuiz-2.0/data/qcsrc/server/w_uzi.qc
   branches/nexuiz-2.0/data/tooltips.db
   branches/nexuiz-2.0/data/unit_tesla.cfg
   branches/nexuiz-2.0/data/update-cvarcount.sh
   branches/nexuiz-2.0/data/weaponsNexrun.cfg
   branches/nexuiz-2.0/misc/buildfiles/brand/nexbrand.sh
   branches/nexuiz-2.0/misc/buildfiles/osx/Nexuiz-SDL.app/Contents/MacOS/libogg.dylib
   branches/nexuiz-2.0/misc/buildfiles/osx/Nexuiz-SDL.app/Contents/MacOS/libtheora.0.3.4.dylib
   branches/nexuiz-2.0/misc/buildfiles/osx/Nexuiz-SDL.app/Contents/MacOS/libtheora.dylib
   branches/nexuiz-2.0/misc/buildfiles/osx/Nexuiz-SDL.app/Contents/MacOS/libvorbis.0.4.3.dylib
   branches/nexuiz-2.0/misc/buildfiles/osx/Nexuiz-SDL.app/Contents/MacOS/libvorbisfile.3.3.2.dylib
   branches/nexuiz-2.0/misc/buildfiles/osx/Nexuiz-SDL.app/Contents/MacOS/libvorbisfile.dylib
   branches/nexuiz-2.0/misc/buildfiles/osx/Nexuiz.app/Contents/MacOS/libogg.dylib
   branches/nexuiz-2.0/misc/buildfiles/osx/Nexuiz.app/Contents/MacOS/libtheora.0.3.4.dylib
   branches/nexuiz-2.0/misc/buildfiles/osx/Nexuiz.app/Contents/MacOS/libtheora.dylib
   branches/nexuiz-2.0/misc/buildfiles/osx/Nexuiz.app/Contents/MacOS/libvorbis.0.4.3.dylib
   branches/nexuiz-2.0/misc/buildfiles/osx/Nexuiz.app/Contents/MacOS/libvorbisfile.3.3.2.dylib
   branches/nexuiz-2.0/misc/buildfiles/osx/Nexuiz.app/Contents/MacOS/libvorbisfile.dylib
   branches/nexuiz-2.0/misc/buildfiles/w32/libtheora.dll
   branches/nexuiz-2.0/misc/buildfiles/w32/ogg.dll
   branches/nexuiz-2.0/misc/buildfiles/w32/vorbis.dll
   branches/nexuiz-2.0/misc/buildfiles/w32/vorbisenc.dll
   branches/nexuiz-2.0/misc/buildfiles/w32/vorbisfile.dll
   branches/nexuiz-2.0/misc/mediasource/hud/sprite-to-num.sh
   branches/nexuiz-2.0/misc/mediasource/menuskins/wickedz/background_builder/append.sh
   branches/nexuiz-2.0/misc/netradiant-NexuizPack/nexuiz.game/data/default_shaderlist.txt
   branches/nexuiz-2.0/misc/netradiant-NexuizPack/nexuiz.game/data/entities.def
   branches/nexuiz-2.0/misc/netradiant-NexuizPack/nexuiz.game/data/turrets.def
   branches/nexuiz-2.0/misc/tools/autoshader.sh
   branches/nexuiz-2.0/misc/tools/brightspot.sh
   branches/nexuiz-2.0/misc/tools/csqcarchive.sh
   branches/nexuiz-2.0/misc/tools/demotc-race-record-extractor.sh
   branches/nexuiz-2.0/misc/tools/jpeg-if-not-alpha.sh
   branches/nexuiz-2.0/misc/tools/makebuild.sh
   branches/nexuiz-2.0/misc/tools/testbuild.sh
   branches/nexuiz-2.0/misc/tools/ttf2conchars/foo.sh
   branches/nexuiz-2.0/nexuiz-linux-glx.sh
   branches/nexuiz-2.0/nexuiz-linux-sdl.sh
   branches/nexuiz-2.0/server/server.cfg
   branches/nexuiz-2.0/server/server_havoc_linux.sh
   branches/nexuiz-2.0/server/server_havoc_mac.sh
   branches/nexuiz-2.0/server/server_havoc_windows.bat
   branches/nexuiz-2.0/server/server_linux.sh
   branches/nexuiz-2.0/server/server_mac.sh
   branches/nexuiz-2.0/server/server_windows.bat
Log:
r7377 | div0 | 2009-08-07 04:27:06 -0400 (Fri, 07 Aug 2009) | 2 lines
more eol-style
r7378 | div0 | 2009-08-07 05:30:33 -0400 (Fri, 07 Aug 2009) | 2 lines
correctly apply friction_on_land to support Nexuiz 1.5 physics properly
r7379 | div0 | 2009-08-07 05:33:33 -0400 (Fri, 07 Aug 2009) | 2 lines
rename the OK button to Close in the map info dialog
r7380 | div0 | 2009-08-07 05:34:09 -0400 (Fri, 07 Aug 2009) | 2 lines
also rename the button in server info
r7382 | div0 | 2009-08-07 09:59:17 -0400 (Fri, 07 Aug 2009) | 2 lines
weapon force factor
r7383 | div0 | 2009-08-07 10:28:48 -0400 (Fri, 07 Aug 2009) | 2 lines
also make projectile speed variable :P
r7384 | mand1nga | 2009-08-07 12:51:39 -0400 (Fri, 07 Aug 2009) | 3 lines
Added jetpack support for bots
To use it add -DBOT_JETPACK_NAVIGATION to FTQECCFLAGS in data/Makefile (will be enabled by default after the next release)
r7385 | div0 | 2009-08-07 14:57:04 -0400 (Fri, 07 Aug 2009) | 2 lines
force a low bgmvolume in the tutorial so one can hear the voice
r7386 | mand1nga | 2009-08-08 00:10:17 -0400 (Sat, 08 Aug 2009) | 1 line
Fix "controlpoint under attack" sound spam
r7387 | mand1nga | 2009-08-08 00:34:44 -0400 (Sat, 08 Aug 2009) | 1 line
Better fix
r7388 | div0 | 2009-08-08 08:42:07 -0400 (Sat, 08 Aug 2009) | 2 lines
fix accidentally not commented out stuff in gamecommand markup
r7389 | div0 | 2009-08-08 11:26:11 -0400 (Sat, 08 Aug 2009) | 2 lines
s/type race/type rc/g
r7390 | div0 | 2009-08-08 11:35:18 -0400 (Sat, 08 Aug 2009) | 2 lines
add a weapon_seeker() function that spawns the RL
r7391 | div0 | 2009-08-08 11:49:24 -0400 (Sat, 08 Aug 2009) | 2 lines
disable resizable again, thanks to SDL+Windows 7 sucking
r7392 | mrbougo | 2009-08-08 11:58:16 -0400 (Sat, 08 Aug 2009) | 1 line
add if_client alias, fix cvar hashes (why did it need fixing?)
r7393 | div0 | 2009-08-08 12:50:52 -0400 (Sat, 08 Aug 2009) | 2 lines
fix seeker->RL
r7394 | div0 | 2009-08-08 13:29:26 -0400 (Sat, 08 Aug 2009) | 2 lines
fix unused var
r7395 | div0 | 2009-08-08 16:03:42 -0400 (Sat, 08 Aug 2009) | 4 lines
tetris: fix rotation; set impulse from 200 to 100; change keys (now UP rotates, SPACE drops to bottom)
enable tetris by fteqcc -DTETRIS
r7396 | div0 | 2009-08-08 16:11:33 -0400 (Sat, 08 Aug 2009) | 2 lines
proper key repeat for tetris
r7397 | div0 | 2009-08-08 16:12:55 -0400 (Sat, 08 Aug 2009) | 2 lines
hehe, make it look better lined up
r7398 | div0 | 2009-08-08 16:34:44 -0400 (Sat, 08 Aug 2009) | 2 lines
impluse cleanup
r7399 | div0 | 2009-08-08 16:45:09 -0400 (Sat, 08 Aug 2009) | 3 lines
-DTETRIS: let konami code start tetris
otherwise: let konami code do impulse 99
r7400 | div0 | 2009-08-09 05:39:14 -0400 (Sun, 09 Aug 2009) | 2 lines
partial VS support for tetris; all that's missing is code to set up VS games
r7401 | div0 | 2009-08-09 05:39:32 -0400 (Sun, 09 Aug 2009) | 2 lines
properly clear the centerprint of tetris
r7402 | m0rfar | 2009-08-09 05:55:52 -0400 (Sun, 09 Aug 2009) | 1 line
sbar_showbinds better description (#429)
r7403 | div0 | 2009-08-09 06:07:28 -0400 (Sun, 09 Aug 2009) | 2 lines
working tetris VS mode!
r7404 | div0 | 2009-08-09 06:12:43 -0400 (Sun, 09 Aug 2009) | 2 lines
allow playing tetris while spectating
r7405 | div0 | 2009-08-09 06:29:16 -0400 (Sun, 09 Aug 2009) | 2 lines
tetris: no longer switch fonts
r7406 | div0 | 2009-08-09 06:31:22 -0400 (Sun, 09 Aug 2009) | 2 lines
adjust tetris levels to match gameboy tetris better
r7407 | div0 | 2009-08-09 06:35:24 -0400 (Sun, 09 Aug 2009) | 2 lines
recolor tetris start message
r7408 | div0 | 2009-08-09 06:58:00 -0400 (Sun, 09 Aug 2009) | 2 lines
more gameover time; newline fix
r7409 | div0 | 2009-08-09 07:15:40 -0400 (Sun, 09 Aug 2009) | 2 lines
add two newlines :P
r7410 | m0rfar | 2009-08-09 08:41:08 -0400 (Sun, 09 Aug 2009) | 1 line
ons_reborn player spawn point in solid. Bug #467
r7411 | m0rfar | 2009-08-09 08:53:59 -0400 (Sun, 09 Aug 2009) | 1 line
enable jetpacks for reborn
r7412 | div0 | 2009-08-09 13:47:18 -0400 (Sun, 09 Aug 2009) | 2 lines
make tetris easier to play (better tiles)
r7413 | div0 | 2009-08-09 13:49:48 -0400 (Sun, 09 Aug 2009) | 2 lines
comment fix
r7414 | div0 | 2009-08-09 14:38:31 -0400 (Sun, 09 Aug 2009) | 2 lines
tetris: SRS rotation
r7415 | div0 | 2009-08-09 14:47:58 -0400 (Sun, 09 Aug 2009) | 2 lines
bucket-of-seven randomization
r7416 | div0 | 2009-08-09 14:50:35 -0400 (Sun, 09 Aug 2009) | 2 lines
switch I with J for better coloring
r7417 | div0 | 2009-08-09 14:52:39 -0400 (Sun, 09 Aug 2009) | 2 lines
make the bucket work
r7418 | div0 | 2009-08-09 14:54:24 -0400 (Sun, 09 Aug 2009) | 2 lines
fix the bucket
r7419 | mrbougo | 2009-08-10 05:45:48 -0400 (Mon, 10 Aug 2009) | 1 line
using a regular dash instead of unsupported unicode :P
r7420 | mrbougo | 2009-08-10 15:20:20 -0400 (Mon, 10 Aug 2009) | 1 line
fix flag moving  on return
r7421 | mand1nga | 2009-08-10 20:57:45 -0400 (Mon, 10 Aug 2009) | 1 line
Fix frozen bots when joining a campaign level with F5 (Issue #469)
r7422 | mrbougo | 2009-08-11 04:44:27 -0400 (Tue, 11 Aug 2009) | 1 line
new OSX libs from merlijn
r7423 | tzork | 2009-08-11 10:41:49 -0400 (Tue, 11 Aug 2009) | 1 line
make spiderbot use framegroups, fix HUD_SPIDEBOT typo.
r7424 | tzork | 2009-08-11 10:47:24 -0400 (Tue, 11 Aug 2009) | 1 line
Wops, need more files for the HUD_SPIDEBOT fix.
r7425 | tzork | 2009-08-11 10:49:25 -0400 (Tue, 11 Aug 2009) | 1 line
Patches #434 from terencehill
r7426 | div0 | 2009-08-11 15:07:02 -0400 (Tue, 11 Aug 2009) | 2 lines
fix wallhugging bug
r7427 | div0 | 2009-08-12 01:08:35 -0400 (Wed, 12 Aug 2009) | 2 lines
clean up sprite maker
r7428 | div0 | 2009-08-12 02:09:33 -0400 (Wed, 12 Aug 2009) | 2 lines
rebuilt all the Xiph.org libs; now capturevideo doesn't crash any more on win32
r7429 | m0rfar | 2009-08-12 12:22:42 -0400 (Wed, 12 Aug 2009) | 1 line
eol style native
r7430 | mrbougo | 2009-08-12 13:25:46 -0400 (Wed, 12 Aug 2009) | 1 line
forcing unix line endings on sh files and the makefile, fixing mixed line endings on the makebuild script
r7431 | mrbougo | 2009-08-12 15:05:11 -0400 (Wed, 12 Aug 2009) | 1 line
CRLF forced on bat files
r7432 | div0 | 2009-08-13 06:13:47 -0400 (Thu, 13 Aug 2009) | 2 lines
LETS_TEST_FTEQCC
r7433 | mrbougo | 2009-08-13 10:41:53 -0400 (Thu, 13 Aug 2009) | 1 line
shootfromeye, requested by FruitieX
r7434 | m0rfar | 2009-08-13 14:41:32 -0400 (Thu, 13 Aug 2009) | 2 lines
add piece-o-cake to default maplist
and new cvar hashes apparently
r7435 | div0 | 2009-08-14 01:20:31 -0400 (Fri, 14 Aug 2009) | 2 lines
fix number display
r7436 | div0 | 2009-08-14 06:27:25 -0400 (Fri, 14 Aug 2009) | 6 lines
race/cts: clip movement vector to the "keyboard axes" (i.e. forward, right, or diagonal) as countermeasure to strafebot.
Please test whether it has any negative impact to keyboard users.
It currently makes race/cts unplayable for joystick users... we need a similar feature in the engine to fix that (to make cl_movement match again).
r7437 | div0 | 2009-08-14 06:57:19 -0400 (Fri, 14 Aug 2009) | 2 lines
don't cause roundoff errors if we don't really NEED to clip the velocity to keyboard axes
r7438 | div0 | 2009-08-14 08:04:19 -0400 (Fri, 14 Aug 2009) | 2 lines
cts/race: enable cl_movecliptokeyboard (new in engine) to prevent prediction errors
r7439 | tzork | 2009-08-15 01:26:47 -0400 (Sat, 15 Aug 2009) | 5 lines
Fix funky bug that waprs players to the spiderbot when a bot enter it.
Prevent bots from entering the spiderbot for now (they havent a clue how to use it yet)
Support .team to have them usable only to the members of the matching .team.
Respawn in the original spot and angle.
Fix zoom on rocket fire if user had nexgun selected while entering.
r7440 | mand1nga | 2009-08-15 07:21:19 -0400 (Sat, 15 Aug 2009) | 1 line
Play again "X minutes left" announcers if match time was changed
r7441 | div0 | 2009-08-15 13:50:28 -0400 (Sat, 15 Aug 2009) | 2 lines
more netfps (40 now)


Modified: branches/nexuiz-2.0/.patchsets
===================================================================
--- branches/nexuiz-2.0/.patchsets	2009-08-15 17:50:28 UTC (rev 7441)
+++ branches/nexuiz-2.0/.patchsets	2009-08-15 19:18:18 UTC (rev 7442)
@@ -1,2 +1,2 @@
 master = svn://svn.icculus.org/nexuiz/trunk
-revisions_applied = 1-7376
+revisions_applied = 1-7441


Property changes on: branches/nexuiz-2.0/Docs/htmlfiles/make-htmlfiles.sh
___________________________________________________________________
Name: svn:eol-style
   + LF

Modified: branches/nexuiz-2.0/Docs/mapping.txt
===================================================================
--- branches/nexuiz-2.0/Docs/mapping.txt	2009-08-15 17:50:28 UTC (rev 7441)
+++ branches/nexuiz-2.0/Docs/mapping.txt	2009-08-15 19:18:18 UTC (rev 7442)
@@ -119,7 +119,7 @@
 Key Hunt        | type kh    <pointlimit> <timelimit> <teams>                                         | 2, 3, or 4 teams
 Assault         | type as                 <timelimit>                                                 | never uses points
 Onslaught       | type ons                <timelimit>                                                 | never uses points
-Race            | type race               <timelimit> <qualifyingtimelimit> <laplimit> <teamlaplimit> | g_race_teams: teamlaplimit is used instead of laplimit
+Race            | type rc                 <timelimit> <qualifyingtimelimit> <laplimit> <teamlaplimit> | g_race_teams: teamlaplimit is used instead of laplimit
 CTS             | type cts                <timelimit> <skill>                                         | never uses points
 
 


Property changes on: branches/nexuiz-2.0/data/Makefile
___________________________________________________________________
Name: svn:eol-style
   - native
   + LF

Copied: branches/nexuiz-2.0/data/apply-eol-style.sh (from rev 7441, trunk/data/apply-eol-style.sh)
===================================================================
--- branches/nexuiz-2.0/data/apply-eol-style.sh	                        (rev 0)
+++ branches/nexuiz-2.0/data/apply-eol-style.sh	2009-08-15 19:18:18 UTC (rev 7442)
@@ -0,0 +1,14 @@
+#!/bin/sh
+
+while read -r EXT EOLSTYLE; do
+	echo "Fixing $EXT..."
+	find . -name .svn -prune -o -type f \( -name "*.$EXT" -o -name "$EXT" \) -print0 | \
+		case "$EOLSTYLE" in
+			1)
+				xargs -0 svn propset svn:eol-style native
+				;;
+			0)
+				xargs -0 svn propdel svn:eol-style
+				;;
+		esac
+done <eol-style.txt


Property changes on: branches/nexuiz-2.0/data/build-compat-pack.sh
___________________________________________________________________
Name: svn:eol-style
   - native
   + LF


Property changes on: branches/nexuiz-2.0/data/check-sounds.sh
___________________________________________________________________
Name: svn:eol-style
   - native
   + LF

Modified: branches/nexuiz-2.0/data/defaultNexuiz.cfg
===================================================================
--- branches/nexuiz-2.0/data/defaultNexuiz.cfg	2009-08-15 17:50:28 UTC (rev 7441)
+++ branches/nexuiz-2.0/data/defaultNexuiz.cfg	2009-08-15 19:18:18 UTC (rev 7442)
@@ -16,15 +16,17 @@
 // server about changes)
 alias setreport "set \"$1\" \"$2\" ; sendcvar \"$1\""
 
-// detect dedicated server
+// detect dedicated server or client
 alias "_detect_dedicated_$qport" "$*"
 alias "_detect_dedicated_0" ""
 alias if_dedicated "_detect_dedicated_$qport $*"
+alias if_client "$*"
+if_dedicated alias if_client ""
 
 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 aed586a22dba9cc4fc03e03d90e60d6e
+set cvar_check_default 78d0ce73981951ab9fe404a9607908c9
 
 // Nexuiz version (formatted for machines)
 // used to determine if a client version is compatible
@@ -396,6 +398,9 @@
 set bot_ai_bunnyhop_startdistance 250 "Run to goals located further than this distance"
 set bot_ai_bunnyhop_stopdistance 220 "Stop jumping after reaching this distance to the goal"
 set bot_ai_bunnyhop_firstjumpdelay 0.5 "Start running to the goal only if it was seen for more than N seconds"
+set bot_god 0 "god mode for bots"
+set bot_ai_navigation_jetpack 1 "Enable bots to navigat maps using the jetpack"
+set bot_ai_navigation_jetpack_mindistance 2500 "Bots will try fly to objects located farther than this distance"
 // Better don't touch these, there are hard to tweak!
 set bot_ai_aimskill_order_mix_1st 0.01 "Amount of the 1st filter output to apply to the aiming angle"
 set bot_ai_aimskill_order_mix_2nd 0.1 "Amount of the 1st filter output to apply to the aiming angle"
@@ -407,7 +412,6 @@
 set bot_ai_aimskill_order_filter_3th 0.2 "Acceleration filter"
 set bot_ai_aimskill_order_filter_4th 0.4 "Position prediction filter. Used rarely"
 set bot_ai_aimskill_order_filter_5th 0.5 "Movement prediction filter. Used rarely"
-set bot_god 0 "god mode for bots"
 
 // waypoint editor enable
 set g_waypointeditor 0
@@ -459,7 +463,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 cyberparcour01 darkzone desertfactory dieselpower 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 downer eggandbacon evilspace farewell final_rage nr_piece-o-cake 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"
@@ -1306,7 +1310,7 @@
 // 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"
 seta menu_slist_showempty 1 "show servers even if they are no empty and have no opponents to play against"
-set menu_slist_modfilter "!havoc"
+set menu_slist_modfilter "=" // set to either: !modname or modname. modname of = means "same as we are running now".
 
 // for menu weapon arena
 set menu_weaponarena_with_laser 0 "also enable the Laser in this weapon arena"
@@ -1409,8 +1413,8 @@
 alias sbar_font "loadfont user1 $*; loadfont user2 ${*}-big; sbar_columns_set"
 seta sbar_columns default
 sbar_font gfx/vera-sans
-seta sbar_showbinds 1	"0 disables display of keybinds, 1 enables it, 2 displays longer strings"
-seta sbar_showbinds_limit 2	"display so many found keybinds, 0 for unlimited"
+seta sbar_showbinds 1	"display actions / bound keys in the strings shown during the game. 0 displays only actions, 1 displays only bound keys, 2 displays both"
+seta sbar_showbinds_limit 2	"maximum number of bound keys to show for an action. 0 for unlimited"
 
 // these entities are not referenced by anything directly, they just represent
 // teams and are found by find() when needed
@@ -1592,8 +1596,10 @@
 set g_balance_pause_fuel_rot 5
 set g_balance_pause_fuel_rot_spawn 10
 
-set g_weaponspeedfactor 1 "weapon fire rate multiplier"
+set g_weaponspeedfactor 1 "weapon projectile speed multiplier"
+set g_weaponratefactor 1 "weapon fire rate multiplier"
 set g_weapondamagefactor 1 "weapon damage multiplier"
+set g_weaponforcefactor 1 "weapon force multiplier"
 
 set cl_effects_lightningarc_simple 0
 set cl_effects_lightningarc_segmentlength 64
@@ -1625,4 +1631,4 @@
 
 set g_mapinfo_settemp_acl "+*" "ACL for mapinfo setting cvars"
 
-seta vid_resizable 1
+cl_netfps 60 // moar

Copied: branches/nexuiz-2.0/data/eol-style.txt (from rev 7441, trunk/data/eol-style.txt)
===================================================================
--- branches/nexuiz-2.0/data/eol-style.txt	                        (rev 0)
+++ branches/nexuiz-2.0/data/eol-style.txt	2009-08-15 19:18:18 UTC (rev 7442)
@@ -0,0 +1,56 @@
+animinfo 1
+ase 0
+bgs 1
+blend 0
+bsp 0
+c 1
+cache 0
+cbp 0
+cfg 1
+db 0
+def 1
+dem 0
+dpm 0
+framegroups 1
+h 1
+hardwired 1
+inc 1
+instantaction 1
+jpg 0
+lmp 0
+Makefile 1
+makespr32 1
+map 0
+mapinfo 1
+md3 0
+mdl 0
+modinfo 1
+obj 0
+ogg 0
+options 1
+pcx 0
+pk3 0
+pl 1
+png 0
+proj 1
+psd 0
+qc 1
+qh 1
+rb 1
+rc 1
+rtlights 0
+sh 1
+shader 1
+skin 1
+sounds 1
+sp2 0
+spr 0
+spr32 0
+src 1
+svg 0
+tga 0
+txt 1
+wav 0
+waypoints 0
+width 1
+zym 0

Copied: branches/nexuiz-2.0/data/find-eol-style.sh (from rev 7441, trunk/data/find-eol-style.sh)
===================================================================
--- branches/nexuiz-2.0/data/find-eol-style.sh	                        (rev 0)
+++ branches/nexuiz-2.0/data/find-eol-style.sh	2009-08-15 19:18:18 UTC (rev 7442)
@@ -0,0 +1,27 @@
+#!/bin/bash
+
+allstatus=$(
+	find . -name .svn -prune -o -type f -print | while IFS= read -r LINE; do
+		ext=${LINE##*/}
+		ext=${ext##*.}
+		if s=`svn propget svn:eol-style "$LINE"`; then
+			case "$s" in
+				*native*)
+					echo "$ext 1"
+					;;
+				*)
+					echo "$ext 0"
+					;;
+			esac
+		fi
+	done | sort -u
+)
+
+mixed=`echo "$allstatus" | rev | cut -c 3- | rev | uniq -d`
+if [ -n "$mixed" ]; then
+	echo "The following file extensions need to be manually fixed:"
+	echo "$mixed"
+	exit 1
+fi
+
+echo "$allstatus" > eol-style.txt


Property changes on: branches/nexuiz-2.0/data/maps/aggressor.instantaction
___________________________________________________________________
Name: svn:eol-style
   + native


Property changes on: branches/nexuiz-2.0/data/maps/aneurysm.instantaction
___________________________________________________________________
Name: svn:eol-style
   + native


Property changes on: branches/nexuiz-2.0/data/maps/basement.instantaction
___________________________________________________________________
Name: svn:eol-style
   + native


Property changes on: branches/nexuiz-2.0/data/maps/bloodprison.instantaction
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: branches/nexuiz-2.0/data/maps/campaignNexuiz25.txt
===================================================================
--- branches/nexuiz-2.0/data/maps/campaignNexuiz25.txt	2009-08-15 17:50:28 UTC (rev 7441)
+++ branches/nexuiz-2.0/data/maps/campaignNexuiz25.txt	2009-08-15 19:18:18 UTC (rev 7442)
@@ -20,7 +20,7 @@
 "ctf","basementctf",1,4,100,,"CTF: Basement","Welcome to the Capture The Flag game mode. Here, you are supposed to take the enemy flag, and bring it back to yours.\n\nAlso, you have to prevent the enemy from doing the same, as you can only capture his flag when your flag is still at your base.\n\nLet's start out easy, with a single bot in the enemy team. 100 points win."
 "ctf","runningmanctf",3,5,100,,"CTF: Running Man","Now that you have played a simple CTF match, let's try one with team mates.\n\nDo not shoot your team mate, and let him protect you while you carry the flag back home."
 "ctf","bloodprisonctf",5,6,150,,"CTF: Blood Prison","Let's try the same with a total of 6 players."
-"ctf","accident",5,7,100,,"CTF: Accident","Enough of the CTF training arenas – you can now play on the real thing, namely, this industrial CTF level which you can find on many online servers too. Just remember that this map is called 'accident'."
+"ctf","accident",5,7,100,,"CTF: Accident","Enough of the CTF training arenas - you can now play on the real thing, namely, this industrial CTF level which you can find on many online servers too. Just remember that this map is called 'accident'."
 "lms","evilspace",3,7,9,"g_weaponarena laser","SPECIAL: [evilspace]","All you get is a Laser.\n\nWell, I think you know how to use it to push the bots off this map into the deadly void..."
 "dom","basement",1,5,70,,"DOM: Basement","Domination: take control points so they show the color of your team, and make the enemies not take yours. Points are awarded for holding a control point.\n\n70 points win."
 "dom","runningman",3,6,100,,"DOM: Running Man","This time it's a bigger map and you get a team mate to help you capture the control points.\n\n3 bots, and 100 points to win."


Property changes on: branches/nexuiz-2.0/data/maps/compile_bloodprisonctf.sh
___________________________________________________________________
Name: svn:eol-style
   + LF


Property changes on: branches/nexuiz-2.0/data/maps/darkzone.instantaction
___________________________________________________________________
Name: svn:eol-style
   + native


Property changes on: branches/nexuiz-2.0/data/maps/desertfactory.bgs
___________________________________________________________________
Name: svn:eol-style
   + native


Property changes on: branches/nexuiz-2.0/data/maps/desertfactory.bgs-maker.pl
___________________________________________________________________
Name: svn:eol-style
   + native


Property changes on: branches/nexuiz-2.0/data/maps/downer.instantaction
___________________________________________________________________
Name: svn:eol-style
   + native


Property changes on: branches/nexuiz-2.0/data/maps/entmerge.rb
___________________________________________________________________
Name: svn:eol-style
   + native


Property changes on: branches/nexuiz-2.0/data/maps/farewell.instantaction
___________________________________________________________________
Name: svn:eol-style
   + native

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

Modified: branches/nexuiz-2.0/data/maps/ons-reborn.map
===================================================================
--- branches/nexuiz-2.0/data/maps/ons-reborn.map	2009-08-15 17:50:28 UTC (rev 7441)
+++ branches/nexuiz-2.0/data/maps/ons-reborn.map	2009-08-15 19:18:18 UTC (rev 7442)
@@ -153004,7 +153004,7 @@
 // entity 90
 {
 "classname" "info_player_deathmatch"
-"origin" "2288 6974 2694"
+"origin" "2288 6950 2694"
 "targetname" "ros"
 "angle" "-90"
 }
@@ -153859,12 +153859,12 @@
 "target" "aba2"
 // brush 0
 {
-( -6312 -624 2640 ) ( -6312 -672 2640 ) ( -6320 -624 2640 ) NULL 0 0 0 0.5 0.5 0 0 0
-( -6312 -624 2640 ) ( -6320 -624 2640 ) ( -6312 -624 2560 ) NULL 0 0 0 0.5 0.5 0 0 0
-( -6312 -624 2640 ) ( -6312 -624 2560 ) ( -6312 -672 2640 ) NULL 0 0 0 0.5 0.5 0 0 0
-( -6320 -672 2560 ) ( -6312 -672 2560 ) ( -6320 -624 2560 ) NULL 0 0 0 0.5 0.5 0 0 0
-( -6320 -672 2560 ) ( -6320 -672 2640 ) ( -6312 -672 2560 ) NULL 0 0 0 0.5 0.5 0 0 0
-( -6320 -672 2560 ) ( -6320 -624 2560 ) ( -6320 -672 2640 ) NULL 0 0 0 0.5 0.5 0 0 0
+( -6312 -624 2640 ) ( -6312 -672 2640 ) ( -6320 -624 2640 ) common/caulk 0 0 0 0.5 0.5 0 0 0
+( -6312 -624 2640 ) ( -6320 -624 2640 ) ( -6312 -624 2560 ) common/caulk 0 0 0 0.5 0.5 0 0 0
+( -6312 -624 2640 ) ( -6312 -624 2560 ) ( -6312 -672 2640 ) common/caulk 0 0 0 0.5 0.5 0 0 0
+( -6320 -672 2560 ) ( -6312 -672 2560 ) ( -6320 -624 2560 ) common/caulk 0 0 0 0.5 0.5 0 0 0
+( -6320 -672 2560 ) ( -6320 -672 2640 ) ( -6312 -672 2560 ) common/caulk 0 0 0 0.5 0.5 0 0 0
+( -6320 -672 2560 ) ( -6320 -624 2560 ) ( -6320 -672 2640 ) common/caulk 0 0 0 0.5 0.5 0 0 0
 }
 }
 // entity 222
@@ -153873,12 +153873,12 @@
 "target" "aba3"
 // brush 0
 {
-( -6312 -624 2872 ) ( -6312 -672 2872 ) ( -6320 -624 2872 ) NULL 0 0 0 0.5 0.5 0 0 0
-( -6312 -624 2872 ) ( -6320 -624 2872 ) ( -6312 -624 2800 ) NULL 0 0 0 0.5 0.5 0 0 0
-( -6312 -624 2872 ) ( -6312 -624 2800 ) ( -6312 -672 2872 ) NULL 0 0 0 0.5 0.5 0 0 0
-( -6320 -672 2800 ) ( -6312 -672 2800 ) ( -6320 -624 2800 ) NULL 0 0 0 0.5 0.5 0 0 0
-( -6320 -672 2800 ) ( -6320 -672 2872 ) ( -6312 -672 2800 ) NULL 0 0 0 0.5 0.5 0 0 0
-( -6320 -672 2800 ) ( -6320 -624 2800 ) ( -6320 -672 2872 ) NULL 0 0 0 0.5 0.5 0 0 0
+( -6312 -624 2872 ) ( -6312 -672 2872 ) ( -6320 -624 2872 ) common/caulk 0 0 0 0.5 0.5 0 0 0
+( -6312 -624 2872 ) ( -6320 -624 2872 ) ( -6312 -624 2800 ) common/caulk 0 0 0 0.5 0.5 0 0 0
+( -6312 -624 2872 ) ( -6312 -624 2800 ) ( -6312 -672 2872 ) common/caulk 0 0 0 0.5 0.5 0 0 0
+( -6320 -672 2800 ) ( -6312 -672 2800 ) ( -6320 -624 2800 ) common/caulk 0 0 0 0.5 0.5 0 0 0
+( -6320 -672 2800 ) ( -6320 -672 2872 ) ( -6312 -672 2800 ) common/caulk 0 0 0 0.5 0.5 0 0 0
+( -6320 -672 2800 ) ( -6320 -624 2800 ) ( -6320 -672 2872 ) common/caulk 0 0 0 0.5 0.5 0 0 0
 }
 }
 // entity 223

Modified: branches/nexuiz-2.0/data/maps/ons-reborn.mapinfo
===================================================================
--- branches/nexuiz-2.0/data/maps/ons-reborn.mapinfo	2009-08-15 17:50:28 UTC (rev 7441)
+++ branches/nexuiz-2.0/data/maps/ons-reborn.mapinfo	2009-08-15 19:18:18 UTC (rev 7442)
@@ -7,3 +7,4 @@
 type ons 20
 cdtrack 8
 size -8224.0 -8224.0 -96.0 8224.0 8224.0 6496.0
+settemp_for_type ons g_jetpack 1
\ No newline at end of file


Property changes on: branches/nexuiz-2.0/data/maps/runningmanctf.waypoints.hardwired
___________________________________________________________________
Name: svn:eol-style
   + native


Property changes on: branches/nexuiz-2.0/data/maps/slimepit.instantaction
___________________________________________________________________
Name: svn:eol-style
   + native


Property changes on: branches/nexuiz-2.0/data/maps/strength.sh
___________________________________________________________________
Name: svn:eol-style
   + LF

Modified: branches/nexuiz-2.0/data/maps/tutorial.mapinfo
===================================================================
--- branches/nexuiz-2.0/data/maps/tutorial.mapinfo	2009-08-15 17:50:28 UTC (rev 7441)
+++ branches/nexuiz-2.0/data/maps/tutorial.mapinfo	2009-08-15 19:18:18 UTC (rev 7442)
@@ -16,4 +16,6 @@
 settemp_for_type all g_balance_falldamage_minspeed 9999
 settemp_for_type all g_balance_kill_delay 1337
 settemp_for_type all g_use_ammunition 0
+settemp_for_type all sv_spectate 0
 clientsettemp_for_type all snd_mutewhenidle 0
+clientsettemp_for_type all bgmvolume 0.1


Property changes on: branches/nexuiz-2.0/data/maps/warfare.instantaction
___________________________________________________________________
Name: svn:eol-style
   + native


Property changes on: branches/nexuiz-2.0/data/models/desertfactory/objects_metal/compile.sh
___________________________________________________________________
Name: svn:eol-style
   - native
   + LF


Property changes on: branches/nexuiz-2.0/data/models/desertfactory/objects_plants/compile.sh
___________________________________________________________________
Name: svn:eol-style
   - native
   + LF


Property changes on: branches/nexuiz-2.0/data/models/desertfactory/objects_wood/compile.sh
___________________________________________________________________
Name: svn:eol-style
   - native
   + LF


Property changes on: branches/nexuiz-2.0/data/models/desertfactory/structure_metal/compile.sh
___________________________________________________________________
Name: svn:eol-style
   - native
   + LF


Property changes on: branches/nexuiz-2.0/data/models/desertfactory/structure_stone/compile.sh
___________________________________________________________________
Name: svn:eol-style
   - native
   + LF


Property changes on: branches/nexuiz-2.0/data/models/desertfactory/structure_wood/compile.sh
___________________________________________________________________
Name: svn:eol-style
   - native
   + LF

Copied: branches/nexuiz-2.0/data/models/spiderbot/spiderbot.dpm.framegroups (from rev 7441, trunk/data/models/spiderbot/spiderbot.dpm.framegroups)
===================================================================
--- branches/nexuiz-2.0/data/models/spiderbot/spiderbot.dpm.framegroups	                        (rev 0)
+++ branches/nexuiz-2.0/data/models/spiderbot/spiderbot.dpm.framegroups	2009-08-15 19:18:18 UTC (rev 7442)
@@ -0,0 +1,6 @@
+1   30  20 1 // forward
+32  30  20 1 // backward
+63  30  20 1 // left
+94  30 20 1 // right
+125 30 20 0 // jump
+0   1   20 0 // idle

Modified: branches/nexuiz-2.0/data/models/sprites/make-sprites.sh
===================================================================
--- branches/nexuiz-2.0/data/models/sprites/make-sprites.sh	2009-08-15 17:50:28 UTC (rev 7441)
+++ branches/nexuiz-2.0/data/models/sprites/make-sprites.sh	2009-08-15 19:18:18 UTC (rev 7442)
@@ -132,7 +132,7 @@
 		pngsprite "${name}_frame$frame" "$color" "$bgcolor" "$text"
 		convert "${name}_frame$frame.png" "${name}_frame$frame.tga"
 		rm -f "${name}_frame$frame.png"
-		args="$args -sprite ${name}_frame$frame.png $(($sprwidth / 2)) $(($sprheight - 1)) $interval"
+		args="$args -sprite ${name}_frame$frame.tga $(($sprwidth / 2)) $(($sprheight - 1)) $interval"
 		frame=$(($frame + 1))
 	done
 	#./makespr32 -o "$name.sp2" -proj 5 -group $args


Property changes on: branches/nexuiz-2.0/data/models/sprites/make-sprites.sh
___________________________________________________________________
Name: svn:eol-style
   - native
   + LF

Modified: branches/nexuiz-2.0/data/qcsrc/client/View.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/client/View.qc	2009-08-15 17:50:28 UTC (rev 7441)
+++ branches/nexuiz-2.0/data/qcsrc/client/View.qc	2009-08-15 19:18:18 UTC (rev 7442)
@@ -549,7 +549,7 @@
 
     float hud;
     hud = getstati(STAT_HUD);
-    if(hud == HUD_SPIDEBOT)
+    if(hud == HUD_SPIDERBOT)
     {
         vector sz;
         CSQC_spider_HUD();
@@ -776,7 +776,7 @@
             Sbar_Draw();
             break;
 
-        case HUD_SPIDEBOT:
+        case HUD_SPIDERBOT:
             CSQC_spider_HUD();
             break;
     }

Modified: branches/nexuiz-2.0/data/qcsrc/client/miscfunctions.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/client/miscfunctions.qc	2009-08-15 17:50:28 UTC (rev 7441)
+++ branches/nexuiz-2.0/data/qcsrc/client/miscfunctions.qc	2009-08-15 19:18:18 UTC (rev 7442)
@@ -14,7 +14,7 @@
 		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;
 	}
@@ -38,25 +38,34 @@
     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);
+        if(announcer_5min)
+        {
+			if(timeleft > 300)
+				announcer_5min = FALSE;
         }
-        
+        else if (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);
-        }
-    }
+    	if (announcer_1min)
+    	{
+			if(timeleft > 60)
+				announcer_1min = FALSE;
+    	}
+    	else if (timelimit > 0 && timeleft < 60) {
+			announcer_1min = TRUE;
+			sound(self, CHAN_VOICE, "announcer/robotic/1minuteremains.wav", VOL_BASEVOICE, ATTN_NONE);
+    	}
+	}
 }
 
 /**
@@ -208,7 +217,7 @@
 float Sbar_GetWidth(float teamcolumnwidth)
 {
 	float f;
-	f = stof(cvar_string("sbar_width"));
+	f = cvar("sbar_width");
 	if(f == 0)
 		f = 640;
 	if(f < 320)
@@ -289,7 +298,7 @@
 }
 
 vector project_3d_to_2d(vector vec)
-{ 
+{
 	vec = cs_project(vec);
 	if(cs_project_is_b0rked > 0)
 	{
@@ -317,14 +326,14 @@
 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

Modified: branches/nexuiz-2.0/data/qcsrc/client/sbar.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/client/sbar.qc	2009-08-15 17:50:28 UTC (rev 7441)
+++ branches/nexuiz-2.0/data/qcsrc/client/sbar.qc	2009-08-15 19:18:18 UTC (rev 7442)
@@ -109,13 +109,13 @@
  	}
 }
 
-void Sbar_DrawXNum (vector pos, float num, float digits, float lettersize, vector rgb, float highlighted, float stroke, float a, float dflags)
+void Sbar_DrawXNum (vector pos, float num, float digits, float lettersize, vector rgb, float highlighted, float stroke, float alpha, float dflags)
 {
 	float l, i;
 	string str, tmp, l_length;
 	float minus;
 	vector vsize, num_color;
-	num_color = rgb;
+	alpha = alpha * sbar_alpha_fg;
 
 	vsize_x = vsize_y = lettersize;
 	vsize_z = 0;
@@ -164,20 +164,23 @@
 
 	if (stroke == 1)
 		num_color = '1 1 1';
+	else
+		num_color = rgb;
 
 	if(minus)
 	{
-		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);
+			drawpic(pos, "gfx/hud/num_minus_stroke", vsize, rgb, alpha, dflags);
+		drawpic(pos, "gfx/hud/num_minus", vsize, num_color, alpha, dflags);
 		pos_x += lettersize;
 	}
 
 	for(i = 0; i < l; ++i)
 	{
-		drawpic(pos, strcat("gfx/hud/num_", substring(str, i, 1)), vsize, num_color, a * sbar_alpha_fg, dflags);
+		tmp = substring(str, i, 1);
 		if (stroke == 1)
-			drawpic(pos, strcat("gfx/hud/num_", substring(str, i, 1), "_stroke"), vsize, rgb, a * sbar_alpha_fg, dflags);
+			drawpic(pos, strcat("gfx/hud/num_", tmp, "_stroke"), vsize, rgb, alpha, dflags);
+		drawpic(pos, strcat("gfx/hud/num_", tmp), vsize, num_color, alpha, dflags);
 		pos_x += lettersize;
 	}
 }

Modified: branches/nexuiz-2.0/data/qcsrc/common/constants.qh
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/common/constants.qh	2009-08-15 17:50:28 UTC (rev 7441)
+++ branches/nexuiz-2.0/data/qcsrc/common/constants.qh	2009-08-15 19:18:18 UTC (rev 7442)
@@ -267,7 +267,7 @@
 
 const float STAT_HUD = 50;
 const float HUD_NORMAL = 0;
-const float HUD_SPIDEBOT = 10;
+const float HUD_SPIDERBOT = 10;
 
 const float STAT_SPIDERBOT_HEALTH  = 60;
 const float STAT_SPIDERBOT_ROCKETS = 61;

Modified: branches/nexuiz-2.0/data/qcsrc/common/gamecommand.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/common/gamecommand.qc	2009-08-15 17:50:28 UTC (rev 7441)
+++ branches/nexuiz-2.0/data/qcsrc/common/gamecommand.qc	2009-08-15 19:18:18 UTC (rev 7442)
@@ -100,20 +100,9 @@
 
 string GameCommand_Markup(string s2)
 {
-	float red, ccase, i, j, x;
+	float red, ccase, i, j;
 	string s, s3;
 
-	x = 0;
-	for(i = 0; i < 16; ++i)
-	{
-		for(j = 0; j < 16; ++j)
-		{
-			print(chr2str(x));
-			++x;
-		}
-		print("\n");
-	}
-
 	GameCommand_MarkupInit();
 
 	s = "";

Modified: branches/nexuiz-2.0/data/qcsrc/common/util.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/common/util.qc	2009-08-15 17:50:28 UTC (rev 7441)
+++ branches/nexuiz-2.0/data/qcsrc/common/util.qc	2009-08-15 19:18:18 UTC (rev 7442)
@@ -1604,3 +1604,15 @@
 	v_z = 0;
 	return v;
 }
+
+string getcurrentmod()
+{
+	float n;
+	string m;
+	m = cvar_string("fs_gamedir");
+	n = tokenize_console(m);
+	if(n == 0)
+		return "data";
+	else
+		return argv(n - 1);
+}

Modified: branches/nexuiz-2.0/data/qcsrc/common/util.qh
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/common/util.qh	2009-08-15 17:50:28 UTC (rev 7441)
+++ branches/nexuiz-2.0/data/qcsrc/common/util.qh	2009-08-15 19:18:18 UTC (rev 7442)
@@ -173,3 +173,5 @@
 
 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
+
+string getcurrentmod();

Modified: branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/dialog_multiplayer_create_mapinfo.c
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/dialog_multiplayer_create_mapinfo.c	2009-08-15 17:50:28 UTC (rev 7441)
+++ branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/dialog_multiplayer_create_mapinfo.c	2009-08-15 19:18:18 UTC (rev 7442)
@@ -153,7 +153,7 @@
 	me.gotoRC(me, me.rows - 1, 0);
 		me.TDempty(me, 0.5);
 
-		me.TD(me, 1, me.columns - 5.5, e = makeNexuizButton("OK", '0 0 0'));
+		me.TD(me, 1, me.columns - 5.5, e = makeNexuizButton("Close", '0 0 0'));
 			e.onClick = Dialog_Close;
 			e.onClickEntity = me;
 		me.TD(me, 1, me.columns - 5.5, me.startButton = e = makeNexuizButton("Play", '0 0 0'));

Modified: branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/dialog_multiplayer_join_serverinfo.c
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/dialog_multiplayer_join_serverinfo.c	2009-08-15 17:50:28 UTC (rev 7441)
+++ branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/dialog_multiplayer_join_serverinfo.c	2009-08-15 19:18:18 UTC (rev 7442)
@@ -168,7 +168,7 @@
 
 	me.gotoRC(me, me.rows - 1, 0);
 
-		me.TD(me, 1, me.columns - 6, e = makeNexuizButton("OK", '0 0 0'));
+		me.TD(me, 1, me.columns - 6, e = makeNexuizButton("Close", '0 0 0'));
 			e.onClick = Dialog_Close;
 			e.onClickEntity = me;
 		me.TD(me, 1, me.columns - 6, e = makeNexuizButton("Join!", '0 0 0'));

Modified: branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/dialog_settings_input.c
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/dialog_settings_input.c	2009-08-15 17:50:28 UTC (rev 7441)
+++ branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/dialog_settings_input.c	2009-08-15 19:18:18 UTC (rev 7442)
@@ -67,9 +67,9 @@
 	me.TR(me);
 		me.TD(me, 1, 1, e = makeNexuizTextLabel(0, "Show binds:"));
 		me.TD(me, 1, 2, e = makeNexuizTextSlider("sbar_showbinds"));
-			e.addValue(e, "None", "0");
-			e.addValue(e, "Short", "1");
-			e.addValue(e, "Long", "2");
+			e.addValue(e, "Actions", "0");
+			e.addValue(e, "Bound keys", "1");
+			e.addValue(e, "Both", "2");
 			e.configureNexuizTextSliderValues(e);
 	me.TR(me);
 		me.TD(me, 1, 3, e = makeNexuizCheckBoxEx(2, 0, "cl_showpressedkeys", "Show pressed keys"));

Modified: branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/serverlist.c
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/serverlist.c	2009-08-15 17:50:28 UTC (rev 7441)
+++ branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/serverlist.c	2009-08-15 19:18:18 UTC (rev 7442)
@@ -213,9 +213,9 @@
 		if(modstr != "")
 		{
 			if(substring(modstr, 0, 1) == "!")
-				sethostcachemaskstring(++m, SLIST_FIELD_MOD, substring(modstr, 1, strlen(modstr) - 1), SLIST_TEST_NOTEQUAL);
+				sethostcachemaskstring(++m, SLIST_FIELD_MOD, resolvemod(substring(modstr, 1, strlen(modstr) - 1)), SLIST_TEST_NOTEQUAL);
 			else
-				sethostcachemaskstring(++m, SLIST_FIELD_MOD, modstr, SLIST_TEST_EQUAL);
+				sethostcachemaskstring(++m, SLIST_FIELD_MOD, resolvemod(modstr), SLIST_TEST_EQUAL);
 		}
 		m = SLIST_MASK_OR - 1;
 		if(s != "")

Modified: branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/util.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/util.qc	2009-08-15 17:50:28 UTC (rev 7441)
+++ branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/util.qc	2009-08-15 19:18:18 UTC (rev 7442)
@@ -358,3 +358,11 @@
 		campaign_won_previous = cvar(strcat("g_campaign", campaign_name, "_won"));
 	}
 }
+
+string resolvemod(string m)
+{
+	if(m == "=")
+		return getcurrentmod();
+	else
+		return m;
+}

Modified: branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/util.qh
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/util.qh	2009-08-15 17:50:28 UTC (rev 7441)
+++ branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/util.qh	2009-08-15 19:18:18 UTC (rev 7442)
@@ -15,3 +15,5 @@
 void loadTooltips();
 void unloadTooltips();
 string getZonedTooltipForIdentifier(string s);
+
+string resolvemod(string m);

Modified: branches/nexuiz-2.0/data/qcsrc/server/bots.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/bots.qc	2009-08-15 17:50:28 UTC (rev 7441)
+++ branches/nexuiz-2.0/data/qcsrc/server/bots.qc	2009-08-15 19:18:18 UTC (rev 7442)
@@ -8,6 +8,10 @@
 float AI_STATUS_WAYPOINT_PERSONAL_LINKING	= 64;	// Waiting for the personal waypoint to be linked
 float AI_STATUS_WAYPOINT_PERSONAL_GOING		= 128;	// Going to a personal waypoint
 float AI_STATUS_WAYPOINT_PERSONAL_REACHED	= 256;	// Personal waypoint reached
+#ifdef BOT_JETPACK_NAVIGATION
+float AI_STATUS_JETPACK_FLYING			= 512;
+float AI_STATUS_JETPACK_LANDING			= 1024;
+#endif
 
 // utilities for path debugging
 #ifdef DEBUG_TRACEWALK
@@ -1745,6 +1749,12 @@
 	return ent;
 }
 
+#ifdef BOT_JETPACK_NAVIGATION
+// fields required for jetpack navigation
+.entity navigation_jetpack_goal;
+.vector navigation_jetpack_point;
+#endif
+
 // updates the best goal according to a weighted calculation of travel cost and item value of a new proposed item
 .void() havocbot_role;
 void() havocbot_role_ctf_offense;
@@ -1752,6 +1762,98 @@
 {
 	if (!e)
 		return;
+
+#ifdef BOT_JETPACK_NAVIGATION
+	// Evaluate path using jetpack
+	if(g_jetpack)
+	if(self.items & IT_JETPACK)
+	if(cvar("bot_ai_navigation_jetpack"))
+	if(vlen(self.origin - e.origin) > cvar("bot_ai_navigation_jetpack_mindistance"))
+	{
+		vector pointa, pointb;
+
+	//	dprint("jetpack ai: evaluating path for ", e.classname,"\n");
+
+		// Point A
+		traceline(self.origin, self.origin + '0 0 65535', MOVE_NORMAL, self);
+		pointa = trace_endpos - '0 0 1';
+
+		// Point B
+		traceline(e.origin, e.origin + '0 0 65535', MOVE_NORMAL, e);
+		pointb = trace_endpos - '0 0 1';
+
+		// Can I see these two points from the sky?
+		traceline(pointa, pointb, MOVE_NORMAL, self);
+
+		if(trace_fraction==1)
+		{
+		//	dprint("jetpack ai: can bridge these two points\n");
+
+			// Lower the altitude of these points as much as possible
+			local float zdistance, xydistance, cost, t, fuel;
+			local vector down, npa, npb;
+
+			down = '0 0 -1' * (PL_MAX_z - PL_MIN_z) * 10;
+
+			do{
+				npa = pointa + down;
+				npb = pointb + down;
+
+				if(npa_z<=self.absmax_z)
+					break;
+
+				if(npb_z<=e.absmax_z)
+					break;
+
+				traceline(npa, npb, MOVE_NORMAL, self);
+				if(trace_fraction==1)
+				{
+					pointa = npa;
+					pointb = npb;
+				}
+			}
+			while(trace_fraction == 1);
+
+
+			// Rough estimation of fuel consumption
+			// (ignores acceleration and current xyz velocity)
+			xydistance = vlen(pointa - pointb);
+			zdistance = fabs(pointa_z - self.origin_z);
+
+			t = zdistance / cvar("g_jetpack_maxspeed_up");
+			t += xydistance / cvar("g_jetpack_maxspeed_side");
+			fuel = t * cvar("g_jetpack_fuel") * 0.8;
+
+		//	dprint("jetpack ai: required fuel ", ftos(fuel), " self.ammo_fuel ", ftos(self.ammo_fuel),"\n");
+
+			// enough fuel ?
+			if(self.ammo_fuel>fuel)
+			{
+				// Estimate cost
+				// (as onground costs calculation is mostly based on distances, here we do the same establishing some relationship
+				//  - between air and ground speeds)
+
+				cost = xydistance / (cvar("g_jetpack_maxspeed_side")/cvar("sv_maxspeed"));
+				cost += zdistance / (cvar("g_jetpack_maxspeed_up")/cvar("sv_maxspeed"));
+				cost *= 1.5;
+
+				// Compare against other goals
+				f = f * rangebias / (rangebias + cost);
+
+				if (navigation_bestrating < f)
+				{
+			//		dprint("jetpack path: added goal", e.classname, " (with rating ", ftos(f), ")\n");
+					navigation_bestrating = f;
+					navigation_add_bestgoal(e);
+					self.navigation_jetpack_goal = e;
+					self.navigation_jetpack_point = pointb;
+				}
+				return;
+			}
+		}
+	}
+	#endif
+
 	//te_wizspike(e.origin);
 	//bprint(etos(e));
 	//bprint("\n");
@@ -1772,13 +1874,14 @@
 	if (e.nearestwaypoint.wpcost < 10000000)
 	{
 		//te_wizspike(e.nearestwaypoint.wpnearestpoint);
-		//dprint(e.classname, " ", ftos(f), "/(1+", ftos((e.nearestwaypoint.wpcost + vlen(e.origin - e.nearestwaypoint.wpnearestpoint))), "/", ftos(rangebias), ") = ");
+	//	dprint(e.classname, " ", ftos(f), "/(1+", ftos((e.nearestwaypoint.wpcost + vlen(e.origin - e.nearestwaypoint.wpnearestpoint))), "/", ftos(rangebias), ") = ");
 		f = f * rangebias / (rangebias + (e.nearestwaypoint.wpcost + vlen(e.origin - e.nearestwaypoint.wpnearestpoint)));
 		//if (self.havocbot_role == havocbot_role_ctf_offense)
 		//dprint("considering ", e.classname, " (with rating ", ftos(f), ")\n");
 		//dprint(ftos(f));
 		if (navigation_bestrating < f)
 		{
+		//	dprint("ground path: added goal ", e.classname, " (with rating ", ftos(f), ")\n");
 			navigation_bestrating = f;
 			navigation_add_bestgoal(e);
 		}
@@ -1800,6 +1903,12 @@
 	// put the entity on the goal stack
 	navigation_pushroute(e);
 
+#ifdef BOT_JETPACK_NAVIGATION
+	if(g_jetpack)
+	if(e==self.navigation_jetpack_goal)
+		return TRUE;
+#endif
+
 	// if it can reach the goal there is nothing more to do
 	if (tracewalk(self, startposition, PL_MIN, PL_MAX, e.origin, bot_navigation_movemode))
 		return TRUE;
@@ -1913,6 +2022,9 @@
 // begin a goal selection session (queries spawnfunc_waypoint network)
 void navigation_goalrating_start()
 {
+#ifdef BOT_JETPACK_NAVIGATION
+	self.navigation_jetpack_goal = world;
+#endif
 	navigation_bestrating = -1;
 	self.navigation_hasgoals = FALSE;
 	navigation_bestgoals_reset();
@@ -1923,6 +2035,7 @@
 void navigation_goalrating_end()
 {
 	navigation_routetogoals();
+//	dprint("best goal ", self.goalcurrent.classname , "\n");
 
 	// Hack: if it can't walk to any goal just move blindly to the first visible waypoint
 	if not (self.navigation_hasgoals)
@@ -2415,6 +2528,8 @@
 	dprint(", ", ftos(applygravity));
 	dprint(");\n");
 	*/
+	shotspeed *= g_weaponspeedfactor;
+	shotspeedupward *= g_weaponspeedfactor;
 	if (!shotspeed)
 	{
 		dprint("bot_aim: WARNING: weapon ", W_Name(self.weapon), " shotspeed is zero!\n");

Modified: branches/nexuiz-2.0/data/qcsrc/server/cl_client.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/cl_client.qc	2009-08-15 17:50:28 UTC (rev 7441)
+++ branches/nexuiz-2.0/data/qcsrc/server/cl_client.qc	2009-08-15 19:18:18 UTC (rev 7442)
@@ -1243,6 +1243,8 @@
 {
 	// send prediction settings to the client
 	stuffcmd(e, "\nin_bindmap 0 0\n");
+	if(g_race || g_cts)
+		stuffcmd(e, "cl_cmd settemp cl_movecliptokeyboard 2\n");
 	/*
 	 * we no longer need to stuff this. Remove this comment block if you feel
 	 * 2.3 and higher (or was it 2.2.3?) don't need these any more
@@ -1553,7 +1555,11 @@
 		remove(self);
 		return;
 	}
-	if (self.owner.BUTTON_CHAT && !self.owner.deadflag)
+	if ((self.owner.BUTTON_CHAT && !self.owner.deadflag)
+#ifdef TETRIS
+		|| self.owner.tetris_on
+#endif
+	)
 		self.model = self.mdl;
 	else
 		self.model = "";
@@ -2329,6 +2335,11 @@
 		self.max_armorvalue = 0;
 	}
 
+#ifdef TETRIS
+	if (TetrisPreFrame())
+		return;
+#endif
+
 	if(frametime)
 		antilag_record(self);
 
@@ -2519,8 +2530,6 @@
 		self.dmg_team = max(0, self.dmg_team - cvar("g_teamdamage_resetspeed") * frametime);
 
 		//self.angles_y=self.v_angle_y + 90;   // temp
-
-		//if (TetrisPreFrame()) return;
 	} else if(gameover) {
 		if (intermission_running)
 			IntermissionThink ();	// otherwise a button could be missed between
@@ -2792,6 +2801,13 @@
 		self.idlekick_lasttimeleft = timeleft;
 	}
 
+#ifdef TETRIS
+	if(self.impulse == 100)
+		ImpulseCommands();
+	if (TetrisPostFrame())
+		return;
+#endif
+
 	if(sv_cheats || self.maycheat)
 		if(Drag_CanDrag(self))
 			if(self.BUTTON_DRAG)
@@ -2847,8 +2863,6 @@
 		if (intermission_running)
 			return;		// intermission or finale
 
-		//if (TetrisPostFrame()) return;
-
 		GetPressedKeys();
 	} else if (self.classname == "observer") {
 		//do nothing

Modified: branches/nexuiz-2.0/data/qcsrc/server/cl_impulse.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/cl_impulse.qc	2009-08-15 17:50:28 UTC (rev 7441)
+++ branches/nexuiz-2.0/data/qcsrc/server/cl_impulse.qc	2009-08-15 19:18:18 UTC (rev 7442)
@@ -489,6 +489,8 @@
 			}
 		}
 	}
-
-	//TetrisImpulses(imp);
+#ifdef TETRIS
+	else if(imp == 100)
+		TetrisImpulse();
+#endif
 }

Modified: branches/nexuiz-2.0/data/qcsrc/server/cl_physics.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/cl_physics.qc	2009-08-15 17:50:28 UTC (rev 7441)
+++ branches/nexuiz-2.0/data/qcsrc/server/cl_physics.qc	2009-08-15 19:18:18 UTC (rev 7442)
@@ -92,6 +92,17 @@
 		mjumpheight = mjumpheight * cvar("g_minstagib_speed_jumpheight");
 	}
 
+	if(!(self.lastflags & FL_ONGROUND))
+	{
+		if(cvar("speedmeter"))
+			dprint(strcat("landing velocity: ", vtos(self.velocity), " (abs: ", ftos(vlen(self.velocity)), ")\n"));
+		if(self.lastground < time - 0.3)
+			self.velocity = self.velocity * (1 - cvar("sv_friction_on_land"));
+		if(self.jumppadcount > 1)
+			dprint(strcat(ftos(self.jumppadcount), "x jumppad combo\n"));
+		self.jumppadcount = 0;
+	}
+
 	self.velocity_z = self.velocity_z + mjumpheight;
 	self.oldvelocity_z = self.velocity_z;
 
@@ -465,6 +476,21 @@
 
 void Nixnex_GiveCurrentWeapon();
 .float() PlayerPhysplug;
+
+string specialcommand = "xwxwxsxsxaxdxaxdx1x ";
+.float specialcommand_pos;
+void SpecialCommand()
+{
+#ifdef TETRIS
+	TetrisImpulse();
+#else
+	if(sv_cheats || self.maycheat)
+		self.impulse = 99;
+	else
+		print("A hollow voice says \"Plugh\".\n");
+#endif
+}
+
 void SV_PlayerPhysics()
 {
 	local vector wishvel, wishdir, v;
@@ -472,12 +498,90 @@
 	string temps;
 	float buttons_prev;
 	float not_allowed_to_move;
+	string c;
+	
+	if(g_race || g_cts)
+	{
+		// if record times matter
+		// ensure nothing EVIL is being done (i.e. strafebot)
+		// this hinders joystick users though
+		// but it still gives SOME analog control
+		// TODO implement this for engine cl_movement code too (basically, clipping to the four axes)
+		wishvel_x = fabs(self.movement_x);
+		wishvel_y = fabs(self.movement_y);
+		if(wishvel_x != 0 && wishvel_y != 0 && wishvel_x != wishvel_y)
+		{
+			wishvel_z = 0;
+			wishspeed = vlen(wishvel);
+			if(wishvel_x >= 2 * wishvel_y)
+			{
+				// pure X motion
+				if(self.movement_x > 0)
+					self.movement_x = wishspeed;
+				else
+					self.movement_x = -wishspeed;
+				self.movement_y = 0;
+			}
+			else if(wishvel_y >= 2 * wishvel_x)
+			{
+				// pure Y motion
+				self.movement_x = 0;
+				if(self.movement_y > 0)
+					self.movement_y = wishspeed;
+				else
+					self.movement_y = -wishspeed;
+			}
+			else
+			{
+				// diagonal
+				if(self.movement_x > 0)
+					self.movement_x = 0.70710678118654752440 * wishspeed;
+				else
+					self.movement_x = -0.70710678118654752440 * wishspeed;
+				if(self.movement_y > 0)
+					self.movement_y = 0.70710678118654752440 * wishspeed;
+				else
+					self.movement_y = -0.70710678118654752440 * wishspeed;
+			}
+		}
+	}
 
+	buttons = self.BUTTON_ATCK + 2 * self.BUTTON_JUMP + 4 * self.BUTTON_ATCK2 + 8 * self.BUTTON_ZOOM + 16 * self.BUTTON_CROUCH + 32 * self.BUTTON_HOOK + 64 * self.BUTTON_USE + 128 * (self.movement_x < 0) + 256 * (self.movement_x > 0) + 512 * (self.movement_y < 0) + 1024 * (self.movement_y > 0);
+
+	if(!buttons)
+		c = "x";
+	else if(buttons == 1)
+		c = "1";
+	else if(buttons == 2)
+		c = " ";
+	else if(buttons == 128)
+		c = "s";
+	else if(buttons == 256)
+		c = "w";
+	else if(buttons == 512)
+		c = "a";
+	else if(buttons == 1024)
+		c = "d";
+	else
+		c = "?";
+
+	if(c == substring(specialcommand, self.specialcommand_pos, 1))
+	{
+		self.specialcommand_pos += 1;
+		if(self.specialcommand_pos >= strlen(specialcommand))
+		{
+			self.specialcommand_pos = 0;
+			SpecialCommand();
+			return;
+		}
+	}
+	else if(self.specialcommand_pos && (c != substring(specialcommand, self.specialcommand_pos - 1, 1)))
+		self.specialcommand_pos = 0;
+	
     if(self.PlayerPhysplug)
         if(self.PlayerPhysplug())
             return;
 
-	buttons = self.BUTTON_ATCK + 2 * self.BUTTON_JUMP + 4 * self.BUTTON_ATCK2 + 8 * self.BUTTON_ZOOM + 16 * self.BUTTON_CROUCH + 32 * self.BUTTON_HOOK + 64 * self.BUTTON_USE;
 	if(!sv_maxidle_spectatorsareidle || self.movetype == MOVETYPE_WALK)
 	{
 		if(buttons != self.buttons_old || self.movement != self.movement_old || self.v_angle != self.v_angle_old)
@@ -917,12 +1021,25 @@
 			self.jumppadcount = 0;
 		}
 
-		if (self.velocity_x || self.velocity_y)
-		if (!(self.flags & FL_JUMPRELEASED) || !self.BUTTON_JUMP)
+#ifdef LETS_TEST_FTEQCC
+		if(self.velocity_x || self.velocity_y)
 		{
-			v = self.velocity;
-			v_z = 0;
-			f = vlen(v);
+			// good
+		}
+		else
+		{
+			if(self.velocity_x)
+				checkclient();
+			if(self.velocity_y)
+				checkclient();
+		}
+#endif
+
+		v = self.velocity;
+		v_z = 0;
+		f = vlen(v);
+		if(f > 0)
+		{
 			if (f < sv_stopspeed)
 				f = 1 - frametime * (sv_stopspeed / f) * sv_friction;
 			else
@@ -932,6 +1049,7 @@
 			else
 				self.velocity = '0 0 0';
 		}
+
 		// acceleration
 		wishdir = normalize(wishvel);
 		wishspeed = vlen(wishvel);

Modified: branches/nexuiz-2.0/data/qcsrc/server/cl_weaponsystem.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/cl_weaponsystem.qc	2009-08-15 17:50:28 UTC (rev 7441)
+++ branches/nexuiz-2.0/data/qcsrc/server/cl_weaponsystem.qc	2009-08-15 19:18:18 UTC (rev 7442)
@@ -7,10 +7,10 @@
 ===========================================================================
 */
 
-float W_WeaponSpeedFactor()
+float W_WeaponRateFactor()
 {
 	float t;
-	t = 1.0 / g_weaponspeedfactor;
+	t = 1.0 / g_weaponratefactor;
 
 	if(g_runematch)
 	{
@@ -640,7 +640,7 @@
 	f = 0;
 	if (self.state == WS_RAISE)
 	{
-		f = (self.owner.weapon_nextthink - time) * g_weaponspeedfactor / cvar("g_balance_weaponswitchdelay");
+		f = (self.owner.weapon_nextthink - time) * g_weaponratefactor / cvar("g_balance_weaponswitchdelay");
 		self.angles_x = -90 * f * f;
 		if (qcweaponanimation)
 		{
@@ -650,7 +650,7 @@
 	}
 	else if (self.state == WS_DROP)
 	{
-		f = 1 - (self.owner.weapon_nextthink - time) * g_weaponspeedfactor / cvar("g_balance_weaponswitchdelay");
+		f = 1 - (self.owner.weapon_nextthink - time) * g_weaponratefactor / cvar("g_balance_weaponswitchdelay");
 		self.angles_x = -90 * f * f;
 		if (qcweaponanimation)
 		{
@@ -1034,7 +1034,7 @@
 			ATTACK_FINISHED(self) = time;
 			//dprint("resetting attack finished to ", ftos(time), "\n");
 		}
-		ATTACK_FINISHED(self) = ATTACK_FINISHED(self) + attacktime * W_WeaponSpeedFactor();
+		ATTACK_FINISHED(self) = ATTACK_FINISHED(self) + attacktime * W_WeaponRateFactor();
 	}
 	self.bulletcounter += 1;
 	//dprint("attack finished ", ftos(ATTACK_FINISHED(self)), "\n");
@@ -1137,7 +1137,7 @@
 				a = self.weaponentity.anim_fire2;
 			else if (fr == WFRAME_RELOAD)
 				a = self.weaponentity.anim_reload;
-			a_z *= g_weaponspeedfactor;
+			a_z *= g_weaponratefactor;
 			setanim(self.weaponentity, a, restartanim == FALSE, restartanim, restartanim);
 		}
 	}
@@ -1151,7 +1151,7 @@
 		backtrace("Tried to override initial weapon think function - should this really happen?");
 	}
 
-	t *= W_WeaponSpeedFactor();
+	t *= W_WeaponRateFactor();
 
 	// VorteX: haste can be added here
 	if (self.weapon_think == w_ready)
@@ -1192,6 +1192,8 @@
 	float nstyle;
 	vector outvelocity;
 
+	mvelocity = mvelocity * g_weaponspeedfactor;
+
 	mdirection = normalize(mvelocity);
 	mspeed = vlen(mvelocity);
 

Modified: branches/nexuiz-2.0/data/qcsrc/server/clientcommands.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/clientcommands.qc	2009-08-15 17:50:28 UTC (rev 7441)
+++ branches/nexuiz-2.0/data/qcsrc/server/clientcommands.qc	2009-08-15 19:18:18 UTC (rev 7442)
@@ -236,6 +236,8 @@
 				PlayerScore_Clear(self);
 				bprint ("^4", self.netname, "^4 is playing now\n");
 				PutClientInServer();
+				if(cvar("g_campaign"))
+					campaign_bots_may_start = 1;
 			}
 			else {
 				//player may not join because of g_maxplayers is set

Modified: branches/nexuiz-2.0/data/qcsrc/server/constants.qh
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/constants.qh	2009-08-15 17:50:28 UTC (rev 7441)
+++ branches/nexuiz-2.0/data/qcsrc/server/constants.qh	2009-08-15 19:18:18 UTC (rev 7442)
@@ -1,4 +1,4 @@
-string CVAR_CHECK_DEFAULT = "aed586a22dba9cc4fc03e03d90e60d6e";
+string CVAR_CHECK_DEFAULT = "78d0ce73981951ab9fe404a9607908c9";
 string CVAR_CHECK_WEAPONS = "a7ca57b891d66754b856e24e5c1745e3";
 
 float	FALSE					= 0;

Modified: branches/nexuiz-2.0/data/qcsrc/server/ctf.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/ctf.qc	2009-08-15 17:50:28 UTC (rev 7441)
+++ branches/nexuiz-2.0/data/qcsrc/server/ctf.qc	2009-08-15 19:18:18 UTC (rev 7442)
@@ -211,6 +211,7 @@
 	e.movetype = MOVETYPE_NONE;
 	if(!e.noalign)
 		e.movetype = MOVETYPE_TOSS;
+	e.velocity = '0 0 0';
 	e.solid = SOLID_TRIGGER;
 	// TODO: play a sound here
 	setorigin(e, e.dropped_origin);

Modified: branches/nexuiz-2.0/data/qcsrc/server/g_damage.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/g_damage.qc	2009-08-15 17:50:28 UTC (rev 7441)
+++ branches/nexuiz-2.0/data/qcsrc/server/g_damage.qc	2009-08-15 19:18:18 UTC (rev 7442)
@@ -706,7 +706,12 @@
 		}
 
 		if not(DEATH_ISSPECIAL(deathtype))
+		{
 			damage *= g_weapondamagefactor;
+			mirrordamage *= g_weapondamagefactor;
+			force = force * g_weaponforcefactor;
+			mirrorforce *= g_weaponforcefactor;
+		}
 
 		// apply strength multiplier
 		if ((attacker.items & IT_STRENGTH) && !g_minstagib)

Modified: branches/nexuiz-2.0/data/qcsrc/server/g_tetris.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/g_tetris.qc	2009-08-15 17:50:28 UTC (rev 7441)
+++ branches/nexuiz-2.0/data/qcsrc/server/g_tetris.qc	2009-08-15 19:18:18 UTC (rev 7442)
@@ -2,28 +2,36 @@
 
 Installation:
 
-in cl_impulse.qc add TetrisImpulses(); to ImpulseCommands
+compile with -DTETRIS
 
-in progs.src add g_tetris.qc after g_subs.qc
-in cl_client.qc add if (TetrisPreFrame()) return; to  PlayerPreThink
-in cl_client.qc add if (TetrisPostFrame()) return; to PlayerPostThink
-
 */
 
+#ifdef TETRIS
+
 .vector tet_org;
 
-.float tetris_on, tet_time, tet_autodown;
+float tet_vs_current_id;
+float tet_vs_current_timeout;
+.float tet_vs_id, tet_vs_addlines;
+.float tet_highest_line;
+.float tetris_on, tet_gameovertime, tet_drawtime, tet_autodown;
 .vector piece_pos;
 .float piece_type, next_piece, tet_score, tet_lines;
+.float tet_piece_bucket;
 
+// tetris_on states:
+//   1 = running
+//   2 = game over
+//   3 = waiting for VS players
+
 var float tet_high_score = 0;
 
 float TET_LINES = 20;
 float TET_WIDTH = 10;
 //character values
-float TET_BORDER = 132;
-float TET_BLOCKS = 132; // +1 = first color, +2, +3;
-float TET_SPACE = 32; // blankness
+float TET_BORDER = 139;
+float TET_BLOCK = 133;
+float TET_SPACE = 160; // blankness
 
 
 
@@ -33,6 +41,8 @@
 float TETKEY_RIGHT = 8;
 float TETKEY_ROTLEFT = 16;
 float TETKEY_ROTRIGHT = 32;
+float TETKEY_DROP = 64;
+string TET_PADDING_RIGHT = "\xA0\xA0\xA0\xA0\xA0\xA0\xA0\xA0\xA0\xA0\xA0\xA0\xA0\xA0"; // get away from crosshair
 
 float PIECES = 7;
 
@@ -43,7 +53,16 @@
 
 float	SVC_CENTERPRINTa		= 26;
 
+float Tetris_Level()
+{ 
+	return ((floor((self.tet_lines / 10)) + 1)); 
+}; 
 
+void tetsnd(string snd)
+{
+	play2(self, strcat("sounds/tetris/", snd));
+}
+
 /*
 *********************************
 
@@ -208,70 +227,44 @@
 	SetLine(y, dat);
 };
 
-
-
 vector PieceShape(float pc)
 {
-
-/*
-1 =
- ##
- ##
-*/
 	if (pc == 1)
-		return '20 20 0'; // 1 * 4 + 1 * 16
-/*
-2 =
+		return '5 5 0'; // O
+	else if (pc == 2)
+		return '1 21 0'; // J
+	else if (pc == 3)
+		return '21 1 0'; // L
+	else if (pc == 4)
+		return '85 0 0'; // I
+	else if (pc == 5)
+		return '5 20 0'; // Z
+	else if (pc == 6)
+		return '20 5 0'; // S
+	else if (pc == 7)
+		return '4 21 0'; // T
+	else
+		return '0 0 0';
+}
 
-####
-*/
+vector PieceCenter(float pc)
+{
+	if(pc == 1)
+		return '1.5 1.5 0'; // O
 	else if (pc == 2)
-		return '85 0 0';
-
-/*
-3 =
-
-###
-#
-*/
+		return '2 2 0'; // J
 	else if (pc == 3)
-		return '21 1 0';
-/*
-4 =
-
-#
-###
-*/
+		return '2 1 0'; // L
 	else if (pc == 4)
-		return '1 21 0';
-/*
-5 =
-##
- ##
-*/
+		return '2.5 1.5 0'; // I
 	else if (pc == 5)
-		return '5 20 0';
-
-/*
-6 =
- ##
-##
-*/
+		return '2 2 0'; // Z
 	else if (pc == 6)
-		return '20 5 0';
-
-/*
-7 =
- #
-###
-*/
+		return '2 2 0'; // S
 	else if (pc == 7)
-		return '4 21 0';
-
-
+		return '2 2 0'; // T
 	else
 		return '0 0 0';
-
 }
 
 // do x 1..4 and y 1..4 in case of rotation
@@ -279,24 +272,35 @@
 {
 	float t;
 	vector piece_dat;
+	float wid;
 
 	// return bits of a piece
+	wid = piece_dat_z + 1;
+	piece_dat = PieceCenter(pc);
 	if (rot == 1) // 90 degrees
 	{
+		// x+cx, y+cy -> -y+cx, x+cy
+		// X, Y       -> -Y+cy+cx, X-cx+cy
+		//   x = X-cx
+		//   y = Y-cy
 		t = y;
-		y = x;
-		x = 5 - t;
+		y = x - piece_dat_x + piece_dat_y;
+		x = -t + piece_dat_x + piece_dat_y;
 	}
 	else if (rot == 2)//180
 	{
-		x = 5 - x;
-		y = 3 - y;
+		x = 2 * piece_dat_x - x;
+		y = 2 * piece_dat_y - y;
 	}
 	else if (rot == 3) // 270
 	{
+		// x+cx, y+cy -> y+cx, -x+cy
+		// X, Y       -> Y-cy+cx, -X+cx+cy
+		//   x = X-cx
+		//   y = Y-cy
 		t = y;
-		y = 5 - x;
-		x = t;
+		y = -x + piece_dat_y + piece_dat_x;
+		x =  t - piece_dat_y + piece_dat_x;
 	}
 	if (x < 1 || y < 1 || x > 4 || y > 2)
 		return 0;
@@ -305,8 +309,6 @@
 		return GetXBlock(x, piece_dat_x); // first row
 	else if (y == 2)
 		return GetXBlock(x, piece_dat_y); // second row
-	else if (y == 3)
-		return GetXBlock(x, piece_dat_z); // third row (doesn't exist)
 	else
 		return 0; // illegal parms
 };
@@ -325,24 +327,17 @@
 
 */
 
-// remove warnings by adding underscores, i hate warnings, warnings suck
-// --blub
-void p6(float _c1, float _c2, float _c3, float _c4, float c5, float c6)
+void WriteTetrisString(string s)
 {
-	WriteChar(MSG_ONE, _c1);
-	WriteChar(MSG_ONE, _c2);
-	WriteChar(MSG_ONE, _c3);
-	WriteChar(MSG_ONE, _c4);
-	WriteChar(MSG_ONE, c5);
-	WriteChar(MSG_ONE, c6);
-};
+	WriteUnterminatedString(MSG_ONE, strconv(0, 2, 2, s));
+}
 
 float pnum(float num, float dig)
 {
 	local float f, i;
 	if (num < 0)
 	{
-		WriteChar(MSG_ONE, 45);
+		WriteChar(MSG_ONE, 173);
 		num = 0 - num;
 	}
 	f = floor(num / 10);
@@ -355,7 +350,7 @@
 		for (i = 0; i < (5 - dig); i = i + 1)
 			WriteChar(MSG_ONE, TET_SPACE);
 	}
-	WriteChar(MSG_ONE, 48 + num);
+	WriteChar(MSG_ONE, 176 + num);
 	return dig;
 };
 
@@ -368,10 +363,16 @@
 	{
 		d = GetSquare(x, ln);
 		if (d)
-			WriteChar(MSG_ONE, TET_BLOCKS + d);
+		{
+			WriteChar(MSG_ONE, '^');
+			WriteChar(MSG_ONE, d * d - 2 * d + 50); // 1, 2, 5
+			WriteChar(MSG_ONE, TET_BLOCK);
+		}
 		else
 			WriteChar(MSG_ONE, TET_SPACE);
 	}
+	WriteChar(MSG_ONE, '^');
+	WriteChar(MSG_ONE, '7');
 	WriteChar(MSG_ONE, TET_BORDER);
 }
 
@@ -379,9 +380,7 @@
 {
 	float x, d, piece_ln, pcolor;
 	vector piece_dat;
-	pcolor = pc & 3;
-	if (pcolor == 0) // 4
-		pcolor = 1;
+	pcolor = mod(pc, 3) + 1;
 	WriteChar(MSG_ONE, TET_SPACE); // pad to 6
 
 	piece_dat = PieceShape(pc);
@@ -393,7 +392,11 @@
 	{
 		d = GetXBlock(x, piece_ln) * pcolor;
 		if (d)
-			WriteChar(MSG_ONE, TET_BLOCKS + d);
+		{
+			WriteChar(MSG_ONE, '^');
+			WriteChar(MSG_ONE, d * d - 2 * d + 50); // 1, 2, 5
+			WriteChar(MSG_ONE, TET_BLOCK);
+		}
 		else
 			WriteChar(MSG_ONE, TET_SPACE);
 	}
@@ -402,50 +405,87 @@
 void Draw_Tetris()
 {
 	float i;
+	entity head;
 	msg_entity = self;
 	WriteChar(MSG_ONE, SVC_CENTERPRINTa);
 	// decoration
 	for (i = 1; i <= (TET_WIDTH + 2); i = i + 1)
 		WriteChar(MSG_ONE, TET_BORDER);
-	p6(' ', ' ', ' ', ' ', ' ', ' ');
+	WriteTetrisString("      ");
+	WriteUnterminatedString(MSG_ONE, TET_PADDING_RIGHT);
 	WriteChar(MSG_ONE, 10);
 	for (i = 1; i <= TET_LINES; i = i + 1)
 	{
-		DrawLine(i);
+		if(self.tetris_on == 2)
+			WriteTetrisString(" GAME  OVER ");
+		else if(self.tetris_on == 3)
+			WriteTetrisString("PLEASE  WAIT");
+		else
+			DrawLine(i);
 		if (i == 1)
-			p6(' ', 'N', 'E', 'X', 'T', ' ');
+			WriteTetrisString(" NEXT ");
 		else if (i == 3)
 			DrawPiece(self.next_piece, 1);
 		else if (i == 4)
 			DrawPiece(self.next_piece, 2);
 		else if (i == 6)
-			p6(' ', 'L', 'I', 'N', 'E', 'S');
+			WriteTetrisString(" LINES");
 		else if (i == 7)
 			pnum(self.tet_lines, 0);
 		else if (i == 9)
-			p6(' ', 'S', 'C', 'O', 'R', 'E');
+			WriteTetrisString(" SCORE");
 		else if (i == 10)
 			pnum(self.tet_score, 0);
 		else if (i == 12)
-			p6(' ', 'H', 'I', 'G', 'H', ' ');
+			WriteTetrisString(" HIGH ");
 		else if (i == 13)
-			p6(' ', 'S', 'C', 'O', 'R', 'E');
+			WriteTetrisString(" SCORE");
 		else if (i == 14)
 			pnum(tet_high_score, 0);
 		else if (i == 16)
-			p6(' ', 'L', 'E', 'V', 'E', 'L');
+			WriteTetrisString(" LEVEL");
 		else if (i == 17)
-			pnum(floor(self.tet_lines / 20)+ 1, 0);
+			pnum(Tetris_Level(), 0);
 		else
-			p6(' ', ' ', ' ', ' ', ' ', ' ');
+			WriteTetrisString("      ");
+		WriteUnterminatedString(MSG_ONE, TET_PADDING_RIGHT);
 		WriteChar(MSG_ONE, 10);
 	}
 	// decoration
 
 	for (i = 1; i <= (TET_WIDTH + 2); i = i + 1)
 		WriteChar(MSG_ONE, TET_BORDER);
-	p6(' ', ' ', ' ', ' ', ' ', ' ');
+	WriteTetrisString("      ");
+	WriteUnterminatedString(MSG_ONE, TET_PADDING_RIGHT);
 	WriteChar(MSG_ONE, 10);
+
+	// VS game status
+	if(self.tet_vs_id)
+	{
+		WriteChar(MSG_ONE, 10);
+		WriteChar(MSG_ONE, 10);
+		if(self.tetris_on == 3)
+		{
+			WriteUnterminatedString(MSG_ONE, strcat("WAITING FOR OTHERS (", ftos(ceil(tet_vs_current_timeout - time)), " SEC)\n"));
+		}
+
+		WriteChar(MSG_ONE, 10);
+		FOR_EACH_REALCLIENT(head) if(head.tetris_on) if(head.tet_vs_id == self.tet_vs_id)
+		{
+			if(head == self)
+				WriteUnterminatedString(MSG_ONE, ">");
+			else
+				WriteUnterminatedString(MSG_ONE, " ");
+			if(head.tetris_on == 2)
+				WriteUnterminatedString(MSG_ONE, "   X_X");
+			else
+				pnum(head.tet_highest_line, 0);
+			WriteUnterminatedString(MSG_ONE, " ");
+			WriteUnterminatedString(MSG_ONE, head.netname);
+			WriteChar(MSG_ONE, 10);
+		}
+	}
+
 	WriteChar(MSG_ONE, 0);
 }
 /*
@@ -466,13 +506,14 @@
 	self.piece_pos = '0 0 0';
 	self.piece_type = 0;
 	self.next_piece = self.tet_lines = self.tet_score = 0;
-
+	self.tet_piece_bucket = 0;
 };
 
-void Tet_GameOver()
+void Tet_GameExit()
 {
-	centerprint(self, "Game Over");
+	centerprint(self, " ");
 	self.tetris_on = 0;
+	self.tet_vs_id = 0;
 	ResetTetris();
 	self.movetype = MOVETYPE_WALK;
 };
@@ -486,14 +527,46 @@
 
 *********************************
 */
+.float tet_piece_bucket;
 float RandomPiece()
 {
-	return floor(random() * PIECES) + 1;
+	float i, j;
+	float p, q;
+	float b;
+	float seen;
+	if(self.tet_piece_bucket > 1)
+	{
+		p = mod(self.tet_piece_bucket, 7);
+		self.tet_piece_bucket = floor(self.tet_piece_bucket / 7);
+		return p + 1;
+	}
+	else
+	{
+		p = floor(random() * 7);
+		seen = pow(2, p);
+		b = 1;
+		for(i = 6; i > 0; --i)
+		{
+			q = floor(random() * i);
+			for(j = 0; j <= q; ++j)
+				if(seen & pow(2, j))
+					++q;
+			if(seen & pow(2, q))
+				error("foo 1");
+			if(q >= 7)
+				error("foo 2");
+			seen |= pow(2, q);
+			b *= 7;
+			b += q;
+		}
+		self.tet_piece_bucket = b;
+		return p + 1;
+	}
 };
 
 void TetAddScore(float n)
 {
-	self.tet_score = self.tet_score + n;
+	self.tet_score = self.tet_score + n * Tetris_Level();
 	if (self.tet_score > tet_high_score)
 		tet_high_score = self.tet_score;
 };
@@ -506,9 +579,9 @@
 	orgx = orgx - 1;
 	orgy = orgy - 1;
 
-	for (y = 1; y < 5; y = y + 1)
+	for (y = 0; y < 5; y = y + 1)
 	{
-		for (x = 1; x < 5; x = x + 1)
+		for (x = 0; x < 5; x = x + 1)
 		{
 			if (PieceMetric(x, y, rot, piece))
 			{
@@ -530,9 +603,9 @@
 	orgx = orgx - 1;
 	orgy = orgy - 1;
 
-	for (y = 1; y < 5; y = y + 1)
+	for (y = 0; y < 5; y = y + 1)
 	{
-		for (x = 1; x < 5; x = x + 1)
+		for (x = 0; x < 5; x = x + 1)
 		{
 			if (PieceMetric(x, y, rot, piece))
 			{
@@ -549,13 +622,11 @@
 	orgx = orgx - 1;
 	orgy = orgy - 1;
 
-	pcolor = piece & 3;
-	if (pcolor == 0) // 4
-		pcolor = 1;
+	pcolor = mod(piece, 3) + 1;
 
-	for (y = 1; y < 5; y = y + 1)
+	for (y = 0; y < 5; y = y + 1)
 	{
-		for (x = 1; x < 5; x = x + 1)
+		for (x = 0; x < 5; x = x + 1)
 		{
 			if (PieceMetric(x, y, rot, piece))
 			{
@@ -568,9 +639,18 @@
 float LINE_LOW = 349525;
 float LINE_HIGH = 699050; // above number times 2
 
+void AddLines(float n)
+{
+	entity head;
+	if(!self.tet_vs_id)
+		return;
+	FOR_EACH_REALCLIENT(head) if(head != self) if(head.tetris_on) if(head.tet_vs_id == self.tet_vs_id)
+		head.tet_vs_addlines += n;
+}
+
 void CompletedLines()
 {
-	float y, cleared, ln;
+	float y, cleared, ln, added, pos, i;
 
 	cleared = 0;
 	y = TET_LINES;
@@ -584,20 +664,63 @@
 		ln = GetLine(y - cleared);
 		SetLine(y, ln);
 	}
+
+	if(cleared >= 4)
+		AddLines(cleared);
+	else if(cleared >= 1)
+		AddLines(cleared - 1);
+
 	self.tet_lines = self.tet_lines + cleared;
 	TetAddScore(cleared * cleared * 10);
+
+	added = self.tet_vs_addlines;
+	self.tet_vs_addlines = 0;
+
+	if(added)
+	{
+		for(y = 1; y <= TET_LINES - added; ++y)
+		{
+			SetLine(y, GetLine(y + added));
+		}
+		for(y = max(1, TET_LINES - added + 1); y <= TET_LINES; ++y)
+		{
+			pos = floor(random() * TET_WIDTH);
+			ln = 0;
+			for(i = 1; i <= TET_WIDTH; ++i)
+				if(i != pos)
+					ln = SetXBlock(i, ln, floor(random() * 3 + 1));
+			SetLine(y, ln);
+		}
+	}
+
+	self.tet_highest_line = 0;
+	for(y = 1; y <= TET_LINES; ++y)
+		if(GetLine(y) != 0)
+		{
+			self.tet_highest_line = TET_LINES + 1 - y;
+			break;
+		}
+
+	if(added)
+		tetsnd("tetadd");
+	else if(cleared >= 4)
+		tetsnd("tetris");
+	else if(cleared)
+		tetsnd("tetline");
+	else
+		tetsnd("tetland");
 };
 
 void HandleGame(float keyss)
 {
 
 	// first off, we need to see if we need a new piece
+	vector piece_data;
 	vector check_pos;
+	vector old_pos;
 	float brand_new;
+	float i;
 	brand_new = 0;
-	if (self.tet_time > time)
-		return;
-	self.tet_time = time + 0.1;
 
 
 	if (self.piece_type == 0)
@@ -618,16 +741,34 @@
 	// next we need to check the piece metrics against what's on the level
 	// based on the key order
 
-	check_pos = self.piece_pos;
+	old_pos = check_pos = self.piece_pos;
 
+	float nudge;
+	nudge = 0;
 	if (keyss & TETKEY_RIGHT)
+	{
 		check_pos_x = check_pos_x + 1;
+		tetsnd("tetmove");
+	}
 	else if (keyss & TETKEY_LEFT)
+	{
 		check_pos_x = check_pos_x - 1;
+		tetsnd("tetmove");
+	}
 	else if (keyss & TETKEY_ROTRIGHT)
+	{
 		check_pos_z = check_pos_z + 1;
+		piece_data = PieceShape(self.piece_type);
+		nudge = 1;
+		tetsnd("tetrot");
+	}
 	else if (keyss & TETKEY_ROTLEFT)
+	{
 		check_pos_z = check_pos_z - 1;
+		piece_data = PieceShape(self.piece_type);
+		nudge = 1;
+		tetsnd("tetrot");
+	}
 	// bounds check
 	if (check_pos_z > 3)
 		check_pos_z = 0;
@@ -638,23 +779,60 @@
 	if (CheckMetrics(self.piece_type, check_pos_x, check_pos_y, check_pos_z))
 		self.piece_pos = check_pos;
 	else if (brand_new)
-		Tet_GameOver();
+	{
+		self.tetris_on = 2;
+		self.tet_gameovertime = time + 5;
+		return;
+	}
+	else
+	{
+		for(i = 1; i <= nudge; ++i)
+		{
+			if(CheckMetrics(self.piece_type, check_pos_x + i, check_pos_y, check_pos_z))
+			{
+				self.piece_pos = check_pos + '1 0 0' * i;
+				break;
+			}
+			else if(CheckMetrics(self.piece_type, check_pos_x - i, check_pos_y, check_pos_z))
+			{
+				self.piece_pos = check_pos - '1 0 0' * i;
+				break;
+			}
+		}
+	}
 	check_pos = self.piece_pos;
-	if (keyss & TETKEY_DOWN)
+	if(keyss & TETKEY_DROP)
+	{
+		// drop to bottom, but do NOT cement it yet
+		// this allows sliding it
+		++check_pos_y;
+		while(CheckMetrics(self.piece_type, check_pos_x, check_pos_y + 1, check_pos_z))
+			++check_pos_y;
+		self.tet_autodown = time + 2 / (1 + Tetris_Level());
+	}
+	else if (keyss & TETKEY_DOWN)
+	{
 		check_pos_y = check_pos_y + 1;
+		self.tet_autodown = time + 2 / (1 + Tetris_Level());
+	}
 	else if (self.tet_autodown < time)
 	{
 		check_pos_y = check_pos_y + 1;
-		self.tet_autodown = time + 1 / (floor(self.tet_lines / 20) + 1);
+		self.tet_autodown = time + 2 / (1 + Tetris_Level());
 	}
 	if (CheckMetrics(self.piece_type, check_pos_x, check_pos_y, check_pos_z))
+	{
+		if(old_pos != check_pos)
+			self.tet_drawtime = 0;
 		self.piece_pos = check_pos;
+	}
 	else
 	{
 		CementPiece(self.piece_type, self.piece_pos_x, self.piece_pos_y, self.piece_pos_z);
 		TetAddScore(1);
 		CompletedLines();
 		self.piece_type = 0;
+		self.tet_drawtime = 0;
 		return;
 	}
 	CementPiece(self.piece_type, self.piece_pos_x, self.piece_pos_y, self.piece_pos_z);
@@ -669,16 +847,35 @@
 */
 
 
-void TetrisImpulses(float imp)
+void TetrisImpulse()
 {
-	if (imp == 200)
+	if(self.tetris_on == 0 || self.tetris_on == 2) // from "off" or "game over"
 	{
-		self.tetris_on = 1;
+		self.tetris_on = 3;
+
+		if(time < tet_vs_current_timeout)
+		{
+			// join VS game
+			self.tet_vs_id = tet_vs_current_id;
+		}
+		else
+		{
+			// start new VS game
+			++tet_vs_current_id;
+			tet_vs_current_timeout = time + 15;
+			self.tet_vs_id = tet_vs_current_id;
+			bprint("^1TET^7R^1IS: ", self.netname, "^1 started a new game. Do ^7impulse 100^1 to join.\n");
+		}
+		self.tet_highest_line = 0;
 		ResetTetris();
 		self.tet_org = self.origin;
 		self.movetype = MOVETYPE_NOCLIP;
-		stuffcmd(self, "cl_bob 0\ncl_rollangle 0\n");
 	}
+	else if(self.tetris_on == 1) // from "on"
+	{
+		Tet_GameExit();
+		self.impulse = 0;
+	}
 };
 
 
@@ -688,11 +885,14 @@
 		return 0;
 
 	self.tet_org = self.origin;
-	if (self.tet_time > time)
+	if (self.tet_drawtime > time)
 		return 1;
 	Draw_Tetris();
+	if(self.tetris_on == 3)
+		self.tet_drawtime = ceil(time - tet_vs_current_timeout + 0.1) + tet_vs_current_timeout;
+	else
+		self.tet_drawtime = time + 0.5;
 	return 1;
-
 };
 float frik_anglemoda(float v)
 {
@@ -712,34 +912,83 @@
 	return answer;
 };
 
+.float tetkey_down, tetkey_rotright, tetkey_left, tetkey_right, tetkey_rotleft, tetkey_drop;
 
+float TetrisKeyRepeat(.float fld, float f)
+{
+	if(f)
+	{
+		if(self.fld == 0) // initial key press
+		{
+			self.fld = time + 0.3;
+			return 1;
+		}
+		else if(time > self.fld)
+		{
+			self.fld = time + 0.1;
+			return 1;
+		}
+		else
+		{
+			// repeating too fast
+			return 0;
+		}
+	}
+	else
+	{
+		self.fld = 0;
+		return 0;
+	}
+}
+
 float TetrisPostFrame()
 {
-	vector mov;
-	float keysa, norm;
+	float keysa;
 
 	keysa = 0;
 
 	if (!self.tetris_on)
 		return 0;
+
+	if(self.tetris_on == 2 && time > self.tet_gameovertime)
+	{
+		Tet_GameExit();
+		return 0;
+	}
+
+	if(self.tetris_on == 3 && time > tet_vs_current_timeout)
+	{
+		self.tetris_on = 1; // start VS game
+		self.tet_drawtime = 0;
+	}
 	
-	if (self.origin != self.tet_org)
+	self.origin = self.tet_org;
+	self.movetype = MOVETYPE_NONE;
+
+	if(self.tetris_on == 1)
 	{
-		self.origin = self.tet_org;
-		if(self.movement_x < 0)
+		if(TetrisKeyRepeat(tetkey_down, self.movement_x < 0))
 			keysa |= TETKEY_DOWN;
-		else if(self.movement_x > 0)
-			keysa |= TETKEY_UP;
-		if(self.movement_y < 0)
+
+		if(TetrisKeyRepeat(tetkey_rotright, self.movement_x > 0))
+			keysa |= TETKEY_ROTRIGHT;
+
+		if(TetrisKeyRepeat(tetkey_left, self.movement_y < 0))
 			keysa |= TETKEY_LEFT;
-		else if(self.movement_y > 0)
+
+		if(TetrisKeyRepeat(tetkey_right, self.movement_y > 0))
 			keysa |= TETKEY_RIGHT;
+		
+		if(TetrisKeyRepeat(tetkey_rotleft, self.BUTTON_CROUCH))
+			keysa |= TETKEY_ROTLEFT;
+
+		if(TetrisKeyRepeat(tetkey_drop, self.BUTTON_JUMP))
+			keysa |= TETKEY_DROP;
+
+		HandleGame(keysa);
 	}
-	if (self.BUTTON_ATCK)
-		keysa = keysa | TETKEY_ROTRIGHT;
-	if (self.BUTTON_JUMP)
-		keysa = keysa | TETKEY_ROTLEFT;
-	HandleGame(keysa);
+
 	return 1;
 };
 
+#endif

Modified: branches/nexuiz-2.0/data/qcsrc/server/havocbot.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/havocbot.qc	2009-08-15 17:50:28 UTC (rev 7441)
+++ branches/nexuiz-2.0/data/qcsrc/server/havocbot.qc	2009-08-15 19:18:18 UTC (rev 7442)
@@ -308,6 +308,70 @@
 	self.movement = '0 0 0';
 	maxspeed = cvar("sv_maxspeed");
 
+#ifdef BOT_JETPACK_NAVIGATION
+	// Jetpack navigation
+	if(self.navigation_jetpack_goal)
+	if(self.goalcurrent==self.navigation_jetpack_goal)
+	if(self.ammo_fuel)
+	{
+		#ifdef DEBUG_BOT_GOALSTACK
+			debuggoalstack();
+			te_wizspike(self.navigation_jetpack_point);
+		#endif
+
+		// Take off
+		if not(self.aistatus & AI_STATUS_JETPACK_FLYING)
+		{
+			// Brake almost completely so it can get a good direction
+			if(vlen(self.velocity)>10)
+				return;
+			self.aistatus |= AI_STATUS_JETPACK_FLYING;
+		}
+
+		makevectors(self.v_angle_y * '0 1 0');
+		dir = normalize(self.navigation_jetpack_point - self.origin);
+
+		// Landing
+		if(self.aistatus & AI_STATUS_JETPACK_LANDING)
+		{
+			// TODO: more accurate landing (with optimum fuel usage)
+			vector p = self.origin - self.goalcurrent.origin; p_z = 0;
+			if( vlen(p) < max(cvar("g_jetpack_maxspeed_side"), vlen(self.velocity)))
+			{
+				// Brake
+				if(fabs(self.velocity_x)>maxspeed)
+				{
+					self.BUTTON_HOOK = TRUE;
+					self.movement_x = dir * v_forward * -maxspeed;
+					return;
+				}
+				// Switch to normal mode
+				self.navigation_jetpack_goal = world;
+				self.aistatus &~= AI_STATUS_JETPACK_LANDING;
+				self.aistatus &~= AI_STATUS_JETPACK_FLYING;
+				return;
+			}
+		}
+		else if(checkpvs(self.origin,self.goalcurrent))
+		{
+			// If I can see the goal switch to landing code
+			self.aistatus &~= AI_STATUS_JETPACK_FLYING;
+			self.aistatus |= AI_STATUS_JETPACK_LANDING;
+			return;
+		}
+
+		// Flying
+		self.BUTTON_HOOK = TRUE;
+		if(self.navigation_jetpack_point_z - PL_MAX_z + PL_MIN_z < self.origin_z)
+		{
+			self.movement_x = dir * v_forward * maxspeed;
+			self.movement_y = dir * v_right * maxspeed;
+		}
+		return;
+	}
+#endif
+
+	// Handling of jump pads
 	if(self.jumppadcount)
 	{
 		if(self.flags & FL_ONGROUND)

Modified: branches/nexuiz-2.0/data/qcsrc/server/miscfunctions.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/miscfunctions.qc	2009-08-15 17:50:28 UTC (rev 7441)
+++ branches/nexuiz-2.0/data/qcsrc/server/miscfunctions.qc	2009-08-15 19:18:18 UTC (rev 7442)
@@ -704,7 +704,9 @@
 float g_weaponarena;
 string g_weaponarena_list;
 float g_weaponspeedfactor;
+float g_weaponratefactor;
 float g_weapondamagefactor;
+float g_weaponforcefactor;
 
 float start_weapons;
 float start_items;
@@ -1076,7 +1078,9 @@
     g_weaponarena = 0;
 
     g_weaponspeedfactor = cvar("g_weaponspeedfactor");
+    g_weaponratefactor = cvar("g_weaponratefactor");
     g_weapondamagefactor = cvar("g_weapondamagefactor");
+    g_weaponforcefactor = cvar("g_weaponforcefactor");
 
     g_pickup_shells                    = cvar("g_pickup_shells");
     g_pickup_shells_max                = cvar("g_pickup_shells_max");

Modified: branches/nexuiz-2.0/data/qcsrc/server/mode_onslaught.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/mode_onslaught.qc	2009-08-15 17:50:28 UTC (rev 7441)
+++ branches/nexuiz-2.0/data/qcsrc/server/mode_onslaught.qc	2009-08-15 19:18:18 UTC (rev 7442)
@@ -993,9 +993,15 @@
 .float waslinked;
 .float cp_bob_spd;
 .vector cp_origin, cp_bob_origin, cp_bob_dmg;
+
+float ons_notification_time_team1;
+float ons_notification_time_team2;
+
 void onslaught_controlpoint_icon_damage(entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force)
 {
 	entity oself;
+	float nag;
+
 	if (damage <= 0)
 		return;
 	if (self.owner.isshielded)
@@ -1009,12 +1015,32 @@
 			}
 		return;
 	}
-	if (time > self.pain_finished)
-		if (attacker.classname == "player")
+
+	if (attacker.classname == "player")
+	{
+		if(self.team == COLOR_TEAM1)
 		{
+			if(time - ons_notification_time_team1 > 10)
+			{
+				nag = TRUE;
+				ons_notification_time_team1 = time;
+			}
+		}
+		else if(self.team == COLOR_TEAM2)
+		{
+			if(time - ons_notification_time_team2 > 10)
+			{
+				nag = TRUE;
+				ons_notification_time_team2 = time;
+			}
+		}
+		else
+			nag = TRUE;
+
+		if(nag)
 			play2team(self.team, "onslaught/controlpoint_underattack.wav");
-			self.pain_finished = time + 10;
-		}
+	}
+
 	self.health = self.health - damage;
 	if(self.owner.iscaptured)
 		WaypointSprite_UpdateHealth(self.owner.sprite, self.health);
@@ -1398,7 +1424,7 @@
 		cc = (COLOR_TEAM2 - 1) * 0x11;
 	else
 		cc = 0;
-	
+
 	//print(etos(self), " rp=", ftos(redpower), " bp=", ftos(bluepower), " ");
 	//print("cc=", ftos(cc), "\n");
 

Modified: branches/nexuiz-2.0/data/qcsrc/server/progs.src
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/progs.src	2009-08-15 17:50:28 UTC (rev 7441)
+++ branches/nexuiz-2.0/data/qcsrc/server/progs.src	2009-08-15 19:18:18 UTC (rev 7442)
@@ -59,6 +59,7 @@
 
 g_subs.qc
 
+g_tetris.qc
 
 runematch.qc
 arena.qc
@@ -109,7 +110,6 @@
 
 t_items.qc
 cl_weapons.qc
-//g_tetris.qc
 cl_impulse.qc
 
 ent_cs.qc

Modified: branches/nexuiz-2.0/data/qcsrc/server/t_items.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/t_items.qc	2009-08-15 17:50:28 UTC (rev 7441)
+++ branches/nexuiz-2.0/data/qcsrc/server/t_items.qc	2009-08-15 19:18:18 UTC (rev 7442)
@@ -1559,3 +1559,9 @@
 	}
 	StartItem ("models/items/g_jetpack.md3", "misc/itempickup.wav", g_pickup_respawntime_powerup, g_pickup_respawntimejitter_powerup, "Jet pack", IT_JETPACK, 0, FL_POWERUP, commodity_pickupevalfunc, BOT_PICKUP_RATING_LOW);
 }
+
+// we no longer have the seeker
+void spawnfunc_weapon_seeker()
+{
+	spawnfunc_weapon_rocketlauncher();
+}

Modified: branches/nexuiz-2.0/data/qcsrc/server/vehicles/spiderbot.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/vehicles/spiderbot.qc	2009-08-15 17:50:28 UTC (rev 7441)
+++ branches/nexuiz-2.0/data/qcsrc/server/vehicles/spiderbot.qc	2009-08-15 19:18:18 UTC (rev 7442)
@@ -20,6 +20,7 @@
 
 #define spiderbot_MIN '-75 -75 5'
 #define spiderbot_MAX '75 75 105'
+#define spiderbot_spawnpnt wkr_spawn
 
 /*
 .void() anim_now;
@@ -116,6 +117,7 @@
 
 */
 
+/*
 void anim_do()
 {
     self.frame = self.frame + 0.8;
@@ -128,6 +130,7 @@
         else
             self.frame = self.anim_start;
 }
+*/
 
 void spiderbot_exit(float eject);
 void spiderbot_enter();
@@ -181,8 +184,14 @@
     vector newdir,olddir;
 
     self.nextthink  = time;
-    if not(self.owner)
+    if (self.owner.deadflag != DEAD_NO)
     {
+        spiderbot_rocket_explode();
+        return;
+    }
+
+    if not (self.owner.vehicle)
+    {
         UpdateCSQCProjectile(self);
         return;
     }
@@ -347,6 +356,13 @@
             self.owner.vehicle_heat = max(self.owner.vehicle_heat - cvar("g_vehicle_spiderbot_minigun_cooldown"),0);
 
 }
+#define SBS_IDLE  0
+#define SBS_JUMP  1
+#define SBS_WALK  2
+#define SBS_BACK  3
+#define SBS_LEFT  4
+#define SBS_RIGHT 5
+.float state;
 
 float spiderbot_pplug()
 {
@@ -373,6 +389,7 @@
 
     player.BUTTON_ZOOM = 0;
     player.BUTTON_CROUCH = 0;
+    player.switchweapon = 0;
 
 
     if(player.BUTTON_USE)
@@ -417,12 +434,15 @@
     self = spider;
     if(spider.flags & FL_ONGROUND)
     {
+        //if(spider.state != SBS_JUMP)
         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;
+            spider.state = SBS_JUMP;
+            spider.frame = 4;
         }
         else
         {
@@ -431,6 +451,8 @@
                 movelib_beak_simple(cvar("g_vehicle_spiderbot_speed_stop"));
                 spider.anim_start = 0;
                 spider.anim_end = 0;
+                spider.state = SBS_IDLE;
+                spider.frame = 5;
             }
             else
             {
@@ -444,13 +466,16 @@
                         player.movement_x = 1;
                         spider.anim_start = MODEL_SPIDERBOT_FORWARD_START;
                         spider.anim_end   = MODEL_SPIDERBOT_FORWARD_END;
+                        spider.state = SBS_WALK;
+                        spider.frame = 0;
                     }
                     else if(player.movement_x < 0)
                     {
                         player.movement_x = -1;
                         spider.anim_start = MODEL_SPIDERBOT_BACKWARDS_START;
                         spider.anim_end   = MODEL_SPIDERBOT_BACKWARDS_END;
-
+                        spider.state = SBS_BACK;
+                        spider.frame = 1;
                     }
                     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"));
@@ -462,12 +487,16 @@
                         player.movement_y = -1;
                         spider.anim_start = MODEL_SPIDERBOT_LEFT_START;
                         spider.anim_end   = MODEL_SPIDERBOT_LEFT_END;
+                        spider.state = SBS_LEFT;
+                        spider.frame = 2;
                     }
                     else if(player.movement_y > 0)
                     {
                         player.movement_y = 1;
                         spider.anim_start = MODEL_SPIDERBOT_RIGHT_START;
                         spider.anim_end   = MODEL_SPIDERBOT_RIGHT_END;
+                        spider.state = SBS_RIGHT;
+                        spider.frame = 3;
                     }
                     movelib_move_simple(normalize(v_right * player.movement_y),cvar("g_vehicle_spiderbot_speed_strafe"),cvar("g_vehicle_spiderbot_movement_inertia"));
                 }
@@ -477,7 +506,7 @@
         movelib_groundalign4point(300,100,0.25);
     }
 
-    anim_do();
+    //anim_do();
     spiderbot_miniguns_do();
     spiderbot_rocket_do();
     vehicle_stdproc_regen();
@@ -511,7 +540,19 @@
 
 void spiderbot_enter()
 {
+    // Remove this when bots know how to use the spiderbot
+    if not (clienttype(other) == CLIENTTYPE_REAL)
+        return;
+
+    self.colormod = self.tur_head.colormod = '0 0 0';
+
+    if(teamplay)
+    if(self.team)
+    if(self.team != other.team)
+        return;
+
     self.owner = other;
+    self.switchweapon = other.switchweapon;
 
     self.event_damage         = vehicle_stdproc_damage ;
     self.colormap             = self.owner.colormap;
@@ -526,7 +567,7 @@
     self.owner.PlayerPhysplug = spiderbot_pplug;
     self.owner.vehicle        = self;
     self.owner.event_damage   = SUB_Null;
-    self.owner.hud            = HUD_SPIDEBOT;
+    self.owner.hud            = HUD_SPIDERBOT;
     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;
@@ -535,16 +576,19 @@
     //setattachment(self.owner,self,"");
     //setorigin(self.owner,'0 0 0');
 
-    msg_entity = other;
-    WriteByte (MSG_ONE, SVC_SETVIEWPORT);
-    WriteEntity( MSG_ONE, self.vehicle_viewport);
+    if(clienttype(other) == CLIENTTYPE_REAL)
+    {
+        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
+        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;
 }
@@ -552,7 +596,7 @@
 void spiderbot_exit(float eject)
 {
     entity e;
-
+    self.frame = 5;
     e = findchain(classname,"spiderbot_rocket");
     while(e)
     {
@@ -567,17 +611,21 @@
         e = e.chain;
     }
 
+    self.owner.switchweapon = self.switchweapon;
+
     self.velocity = '0 0 0';
+    if(clienttype(self.owner) == CLIENTTYPE_REAL)
+    {
+        msg_entity = self.owner;
+        WriteByte (MSG_ONE, SVC_SETVIEWPORT);
+        WriteEntity( MSG_ONE, self.owner);
 
-    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
+    }
 
-    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;
@@ -596,8 +644,17 @@
 
 	self.colormap            = 1024;
 	self.tur_head.colormap   = 1024;
-    self.team                = -1;
 
+    if not (teamplay)
+        self.team                = 0;
+    else
+    {
+        self.team = self.spiderbot_spawnpnt.team ;
+        if (self.team == COLOR_TEAM1) self.colormod = '1.4 0.8 0.8';
+        if (self.team == COLOR_TEAM2) self.colormod = '0.8 0.8 1.4';
+        self.tur_head.colormod = self.colormod;
+    }
+
 	self.vehicle_hudmodel.viewmodelforclient = self;
 	self.tur_head.nodrawtoclient             = self;
 
@@ -654,6 +711,7 @@
 //void spiderbot_damage(entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force);
 void spiderbot_spawn()
 {
+    self.frame = 5;
     self.think = spiderbot_think;
     self.nextthink = time;
 
@@ -673,7 +731,20 @@
     self.bot_attack = TRUE;
 
     setsize(self,spiderbot_MIN,spiderbot_MAX);
-    setorigin(self,self.tur_aimpos);
+
+    setorigin(self,self.spiderbot_spawnpnt.origin);
+    self.angles = self.spiderbot_spawnpnt.angles;
+
+    if (self.team == COLOR_TEAM1)
+        self.colormod = '1.4 0.8 0.8';
+    else if (self.team == COLOR_TEAM2)
+        self.colormod = '0.8 0.8 1.4';
+    else
+        self.colormod = '0 0 0';
+
+    self.tur_head.colormod = self.colormod;
+
+
     pointparticles(particleeffectnum("teleport"), self.origin + '0 0 64', '0 0 0', 1);
 }
 
@@ -712,6 +783,18 @@
 void vewhicle_spiderbot_dinit()
 {
 
+    self.spiderbot_spawnpnt = spawn();
+    self.spiderbot_spawnpnt.angles = self.angles;
+
+    traceline(self.origin + '0 0 16', self.origin - '0 0 10000', MOVE_WORLDONLY, self);
+    setorigin(self.spiderbot_spawnpnt,trace_endpos + '0 0 4');
+    setorigin(self,self.spiderbot_spawnpnt.origin);
+
+    if(self.team && !teamplay)
+        self.team = 0;
+    else
+        self.spiderbot_spawnpnt.team = self.team;
+
     server_fps = (1 / sys_ticrate);
 
     addstat(STAT_HUD, AS_INT,  hud);
@@ -733,7 +816,7 @@
     self.cvar_basename = "g_vehicle_spiderbot";
 
     setmodel (self.vehicle_hudmodel, "models/spiderbot/cp.md3");
-    setmodel (self.vehicle_viewport, "models/null.md3");
+    setmodel (self.vehicle_viewport, "null");
     setmodel(self,"models/spiderbot/spiderbot.dpm");
     setmodel(self.tur_head,"models/spiderbot/spiderbot_top.dpm");
     setmodel(self.gun1,"models/spiderbot/spiderbot_barrels.dpm");
@@ -760,7 +843,6 @@
 {
     // 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");
@@ -770,7 +852,7 @@
     precache_model ( "models/turrets/rocket.md3");
     precache_sound ( "weapons/rocket_impact.wav" );
 
-    self.team                = -1;
+    //self.team                = -1;
     self.think = vewhicle_spiderbot_dinit;
     self.nextthink = time + 0.5;
 }

Modified: branches/nexuiz-2.0/data/qcsrc/server/vehicles/vehicles.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/vehicles/vehicles.qc	2009-08-15 17:50:28 UTC (rev 7441)
+++ branches/nexuiz-2.0/data/qcsrc/server/vehicles/vehicles.qc	2009-08-15 19:18:18 UTC (rev 7442)
@@ -1,69 +1,9 @@
 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()

Modified: branches/nexuiz-2.0/data/qcsrc/server/w_hlac.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/w_hlac.qc	2009-08-15 17:50:28 UTC (rev 7441)
+++ branches/nexuiz-2.0/data/qcsrc/server/w_hlac.qc	2009-08-15 19:18:18 UTC (rev 7442)
@@ -156,7 +156,7 @@
 			return;
 		}
 
-		ATTACK_FINISHED(self) = time + cvar("g_balance_hlac_primary_refire") * W_WeaponSpeedFactor();
+		ATTACK_FINISHED(self) = time + cvar("g_balance_hlac_primary_refire") * W_WeaponRateFactor();
 		W_HLAC_Attack();
 		self.HLAC_bulletcounter = self.HLAC_bulletcounter + 1;
         weapon_thinkf(WFRAME_FIRE1, cvar("g_balance_hlac_primary_refire"), HLAC_fire1_02);

Modified: branches/nexuiz-2.0/data/qcsrc/server/w_minstanex.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/w_minstanex.qc	2009-08-15 17:50:28 UTC (rev 7441)
+++ branches/nexuiz-2.0/data/qcsrc/server/w_minstanex.qc	2009-08-15 19:18:18 UTC (rev 7442)
@@ -151,7 +151,7 @@
 		{
 			if (self.jump_interval <= time)
 			{
-				self.jump_interval = time + 0.9;
+				self.jump_interval = time + 0.9 * W_WeaponRateFactor();
 				W_Laser_Attack(FALSE);
 			}
 		}

Modified: branches/nexuiz-2.0/data/qcsrc/server/w_rocketlauncher.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/w_rocketlauncher.qc	2009-08-15 17:50:28 UTC (rev 7441)
+++ branches/nexuiz-2.0/data/qcsrc/server/w_rocketlauncher.qc	2009-08-15 19:18:18 UTC (rev 7442)
@@ -26,7 +26,7 @@
 			self.owner.switchweapon = w_getbestweapon(self.owner);
 		}
 		if(g_laserguided_missile)
-			ATTACK_FINISHED(self.owner) = time + cvar("g_balance_rocketlauncher_refire") * W_WeaponSpeedFactor();
+			ATTACK_FINISHED(self.owner) = time + cvar("g_balance_rocketlauncher_refire") * W_WeaponRateFactor();
 	}
 	remove (self);
 }
@@ -143,7 +143,7 @@
 	{
 		// accelerate
 		makevectors(self.angles_x * '-1 0 0' + self.angles_y * '0 1 0');
-		velspeed = cvar("g_balance_rocketlauncher_laserguided_speed") - (self.velocity * v_forward);
+		velspeed = cvar("g_balance_rocketlauncher_laserguided_speed") * g_weaponspeedfactor - (self.velocity * v_forward);
 		if (velspeed > 0)
 			self.velocity = self.velocity + v_forward * min(cvar("g_balance_rocketlauncher_laserguided_speedaccel") * frametime, velspeed);
 	}
@@ -151,9 +151,9 @@
 	{
 		// accelerate
 		makevectors(self.angles_x * '-1 0 0' + self.angles_y * '0 1 0');
-		velspeed = cvar("g_balance_rocketlauncher_speed") - (self.velocity * v_forward);
+		velspeed = cvar("g_balance_rocketlauncher_speed") * g_weaponspeedfactor - (self.velocity * v_forward);
 		if (velspeed > 0)
-			self.velocity = self.velocity + v_forward * min(cvar("g_balance_rocketlauncher_speedaccel") * frametime, velspeed);
+			self.velocity = self.velocity + v_forward * min(cvar("g_balance_rocketlauncher_speedaccel") * g_weaponspeedfactor * frametime, velspeed);
 	}
 
 	// laser guided, or remote detonation
@@ -194,7 +194,7 @@
 				self.velocity = newdir * velspeed;					// make me fly in the new direction at my flight speed
 				self.angles = vectoangles(self.velocity);			// turn model in the new flight direction
 
-				ATTACK_FINISHED(self.owner) = time + 0.2 * W_WeaponSpeedFactor();
+				ATTACK_FINISHED(self.owner) = time + 0.2 * W_WeaponRateFactor();
 			}
 		}
 		else
@@ -282,9 +282,9 @@
 
 	setorigin (missile, w_shotorg - v_forward * 3); // move it back so it hits the wall at the right point
 	if(g_laserguided_missile && self.laser_on)
-		missile.velocity = w_shotdir * cvar("g_balance_rocketlauncher_laserguided_speedstart");
+		missile.velocity = w_shotdir * cvar("g_balance_rocketlauncher_laserguided_speedstart") * g_weaponspeedfactor;
 	else
-		missile.velocity = w_shotdir * cvar("g_balance_rocketlauncher_speedstart");
+		missile.velocity = w_shotdir * cvar("g_balance_rocketlauncher_speedstart") * g_weaponspeedfactor;
 	W_SetupProjectileVelocity(missile);
 	missile.angles = vectoangles (missile.velocity);
 

Modified: branches/nexuiz-2.0/data/qcsrc/server/w_uzi.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/w_uzi.qc	2009-08-15 17:50:28 UTC (rev 7441)
+++ branches/nexuiz-2.0/data/qcsrc/server/w_uzi.qc	2009-08-15 19:18:18 UTC (rev 7442)
@@ -30,7 +30,7 @@
 	}
 
 	// this attack_finished just enforces a cooldown at the end of a burst
-	ATTACK_FINISHED(self) = time + cvar("g_balance_uzi_first_refire") * W_WeaponSpeedFactor();
+	ATTACK_FINISHED(self) = time + cvar("g_balance_uzi_first_refire") * W_WeaponRateFactor();
 
 	if (self.uzi_bulletcounter == 1)
 		fireBallisticBullet(w_shotorg, w_shotdir, cvar("g_balance_uzi_first_spread"), cvar("g_balance_uzi_speed"), 5, cvar("g_balance_uzi_first_damage"), 0, cvar("g_balance_uzi_first_force"), deathtype, 0, 1, cvar("g_balance_uzi_bulletconstant"));

Modified: branches/nexuiz-2.0/data/tooltips.db
===================================================================
--- branches/nexuiz-2.0/data/tooltips.db	2009-08-15 17:50:28 UTC (rev 7441)
+++ branches/nexuiz-2.0/data/tooltips.db	2009-08-15 19:18:18 UTC (rev 7442)
@@ -96,7 +96,7 @@
 \m_pitch\Invert mouse movement on the Y-axis
 \vid_dgamouse\Make use of DGA mouse input
 \con_closeontoggleconsole\Allow the console toggling bind to also close the console
-\sbar_showbinds\Enable display of keybinds, short for a shorter string and long to display longer strings
+\sbar_showbinds\Display actions / bound keys in the strings shown during the game
 \cl_showpressedkeys\Show which movement keys the player is pressing
 
 \NexuizSettingsDialog/Video\Video settings

Modified: branches/nexuiz-2.0/data/unit_tesla.cfg
===================================================================
--- branches/nexuiz-2.0/data/unit_tesla.cfg	2009-08-15 17:50:28 UTC (rev 7441)
+++ branches/nexuiz-2.0/data/unit_tesla.cfg	2009-08-15 19:18:18 UTC (rev 7442)
@@ -1,19 +1,19 @@
-set g_turrets_unit_tesla_std_health 1000
-set g_turrets_unit_tesla_std_respawntime 120
-
-set g_turrets_unit_tesla_std_shot_dmg 100
-set g_turrets_unit_tesla_std_shot_refire 1
-set g_turrets_unit_tesla_std_shot_force 400
-
-set g_turrets_unit_tesla_std_shot_volly 1
-set g_turrets_unit_tesla_std_shot_volly_refire 2.5
-
-set g_turrets_unit_tesla_std_target_range_min 0
-set g_turrets_unit_tesla_std_target_range      1000
-
-set g_turrets_unit_tesla_std_target_select_playerbias 1
-set g_turrets_unit_tesla_std_target_select_missilebias 1
-
-set g_turrets_unit_tesla_std_ammo_max 1000
-set g_turrets_unit_tesla_std_ammo 200
-set g_turrets_unit_tesla_std_ammo_recharge 15
+set g_turrets_unit_tesla_std_health 1000
+set g_turrets_unit_tesla_std_respawntime 120
+
+set g_turrets_unit_tesla_std_shot_dmg 100
+set g_turrets_unit_tesla_std_shot_refire 1
+set g_turrets_unit_tesla_std_shot_force 400
+
+set g_turrets_unit_tesla_std_shot_volly 1
+set g_turrets_unit_tesla_std_shot_volly_refire 2.5
+
+set g_turrets_unit_tesla_std_target_range_min 0
+set g_turrets_unit_tesla_std_target_range      1000
+
+set g_turrets_unit_tesla_std_target_select_playerbias 1
+set g_turrets_unit_tesla_std_target_select_missilebias 1
+
+set g_turrets_unit_tesla_std_ammo_max 1000
+set g_turrets_unit_tesla_std_ammo 200
+set g_turrets_unit_tesla_std_ammo_recharge 15


Property changes on: branches/nexuiz-2.0/data/unit_tesla.cfg
___________________________________________________________________
Name: svn:eol-style
   + native


Property changes on: branches/nexuiz-2.0/data/update-cvarcount.sh
___________________________________________________________________
Name: svn:eol-style
   - native
   + LF

Modified: branches/nexuiz-2.0/data/weaponsNexrun.cfg
===================================================================
--- branches/nexuiz-2.0/data/weaponsNexrun.cfg	2009-08-15 17:50:28 UTC (rev 7441)
+++ branches/nexuiz-2.0/data/weaponsNexrun.cfg	2009-08-15 19:18:18 UTC (rev 7442)
@@ -1,6 +1,6 @@
 // weapon settings for nexrun CTS, not recommended for DM
 g_projectiles_newton_style 0
-g_shootfromcenter 1
+g_shootfromeye 1
 
 g_balance_grenadelauncher_secondary_speed_up 0
 g_balance_grenadelauncher_secondary_speed 0 


Property changes on: branches/nexuiz-2.0/misc/buildfiles/brand/nexbrand.sh
___________________________________________________________________
Name: svn:eol-style
   + LF

Copied: branches/nexuiz-2.0/misc/buildfiles/osx/Nexuiz-SDL.app/Contents/MacOS/libogg.0.dylib (from rev 7441, trunk/misc/buildfiles/osx/Nexuiz-SDL.app/Contents/MacOS/libogg.0.dylib)
===================================================================
--- branches/nexuiz-2.0/misc/buildfiles/osx/Nexuiz-SDL.app/Contents/MacOS/libogg.0.dylib	                        (rev 0)
+++ branches/nexuiz-2.0/misc/buildfiles/osx/Nexuiz-SDL.app/Contents/MacOS/libogg.0.dylib	2009-08-15 19:18:18 UTC (rev 7442)
@@ -0,0 +1 @@
+link libogg.0.6.0.dylib
\ No newline at end of file

Modified: branches/nexuiz-2.0/misc/buildfiles/osx/Nexuiz-SDL.app/Contents/MacOS/libogg.dylib
===================================================================
--- branches/nexuiz-2.0/misc/buildfiles/osx/Nexuiz-SDL.app/Contents/MacOS/libogg.dylib	2009-08-15 17:50:28 UTC (rev 7441)
+++ branches/nexuiz-2.0/misc/buildfiles/osx/Nexuiz-SDL.app/Contents/MacOS/libogg.dylib	2009-08-15 19:18:18 UTC (rev 7442)
@@ -1 +1 @@
-link libogg.0.6.0.dylib
\ No newline at end of file
+link libogg.0.dylib
\ No newline at end of file

Modified: branches/nexuiz-2.0/misc/buildfiles/osx/Nexuiz-SDL.app/Contents/MacOS/libtheora.0.3.4.dylib
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/misc/buildfiles/osx/Nexuiz-SDL.app/Contents/MacOS/libtheora.0.dylib (from rev 7441, trunk/misc/buildfiles/osx/Nexuiz-SDL.app/Contents/MacOS/libtheora.0.dylib)
===================================================================
--- branches/nexuiz-2.0/misc/buildfiles/osx/Nexuiz-SDL.app/Contents/MacOS/libtheora.0.dylib	                        (rev 0)
+++ branches/nexuiz-2.0/misc/buildfiles/osx/Nexuiz-SDL.app/Contents/MacOS/libtheora.0.dylib	2009-08-15 19:18:18 UTC (rev 7442)
@@ -0,0 +1 @@
+link libtheora.0.3.4.dylib
\ No newline at end of file

Modified: branches/nexuiz-2.0/misc/buildfiles/osx/Nexuiz-SDL.app/Contents/MacOS/libtheora.dylib
===================================================================
--- branches/nexuiz-2.0/misc/buildfiles/osx/Nexuiz-SDL.app/Contents/MacOS/libtheora.dylib	2009-08-15 17:50:28 UTC (rev 7441)
+++ branches/nexuiz-2.0/misc/buildfiles/osx/Nexuiz-SDL.app/Contents/MacOS/libtheora.dylib	2009-08-15 19:18:18 UTC (rev 7442)
@@ -1 +1 @@
-link libtheora.0.3.4.dylib
\ No newline at end of file
+link libtheora.0.dylib
\ No newline at end of file

Modified: branches/nexuiz-2.0/misc/buildfiles/osx/Nexuiz-SDL.app/Contents/MacOS/libvorbis.0.4.3.dylib
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/misc/buildfiles/osx/Nexuiz-SDL.app/Contents/MacOS/libvorbisenc.2.0.6.dylib (from rev 7441, trunk/misc/buildfiles/osx/Nexuiz-SDL.app/Contents/MacOS/libvorbisenc.2.0.6.dylib)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/misc/buildfiles/osx/Nexuiz-SDL.app/Contents/MacOS/libvorbisenc.2.dylib (from rev 7441, trunk/misc/buildfiles/osx/Nexuiz-SDL.app/Contents/MacOS/libvorbisenc.2.dylib)
===================================================================
--- branches/nexuiz-2.0/misc/buildfiles/osx/Nexuiz-SDL.app/Contents/MacOS/libvorbisenc.2.dylib	                        (rev 0)
+++ branches/nexuiz-2.0/misc/buildfiles/osx/Nexuiz-SDL.app/Contents/MacOS/libvorbisenc.2.dylib	2009-08-15 19:18:18 UTC (rev 7442)
@@ -0,0 +1 @@
+link libvorbisenc.2.0.6.dylib
\ No newline at end of file

Deleted: branches/nexuiz-2.0/misc/buildfiles/osx/Nexuiz-SDL.app/Contents/MacOS/libvorbisenc.dylib
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/misc/buildfiles/osx/Nexuiz-SDL.app/Contents/MacOS/libvorbisenc.dylib (from rev 7441, trunk/misc/buildfiles/osx/Nexuiz-SDL.app/Contents/MacOS/libvorbisenc.dylib)
===================================================================
--- branches/nexuiz-2.0/misc/buildfiles/osx/Nexuiz-SDL.app/Contents/MacOS/libvorbisenc.dylib	                        (rev 0)
+++ branches/nexuiz-2.0/misc/buildfiles/osx/Nexuiz-SDL.app/Contents/MacOS/libvorbisenc.dylib	2009-08-15 19:18:18 UTC (rev 7442)
@@ -0,0 +1 @@
+link libvorbisenc.2.dylib
\ No newline at end of file

Modified: branches/nexuiz-2.0/misc/buildfiles/osx/Nexuiz-SDL.app/Contents/MacOS/libvorbisfile.3.3.2.dylib
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/misc/buildfiles/osx/Nexuiz-SDL.app/Contents/MacOS/libvorbisfile.3.dylib (from rev 7441, trunk/misc/buildfiles/osx/Nexuiz-SDL.app/Contents/MacOS/libvorbisfile.3.dylib)
===================================================================
--- branches/nexuiz-2.0/misc/buildfiles/osx/Nexuiz-SDL.app/Contents/MacOS/libvorbisfile.3.dylib	                        (rev 0)
+++ branches/nexuiz-2.0/misc/buildfiles/osx/Nexuiz-SDL.app/Contents/MacOS/libvorbisfile.3.dylib	2009-08-15 19:18:18 UTC (rev 7442)
@@ -0,0 +1 @@
+link libvorbisfile.3.3.2.dylib
\ No newline at end of file

Modified: branches/nexuiz-2.0/misc/buildfiles/osx/Nexuiz-SDL.app/Contents/MacOS/libvorbisfile.dylib
===================================================================
--- branches/nexuiz-2.0/misc/buildfiles/osx/Nexuiz-SDL.app/Contents/MacOS/libvorbisfile.dylib	2009-08-15 17:50:28 UTC (rev 7441)
+++ branches/nexuiz-2.0/misc/buildfiles/osx/Nexuiz-SDL.app/Contents/MacOS/libvorbisfile.dylib	2009-08-15 19:18:18 UTC (rev 7442)
@@ -1 +1 @@
-link libvorbisfile.3.3.2.dylib
\ No newline at end of file
+link libvorbisfile.3.dylib
\ No newline at end of file

Copied: branches/nexuiz-2.0/misc/buildfiles/osx/Nexuiz.app/Contents/MacOS/libogg.0.dylib (from rev 7441, trunk/misc/buildfiles/osx/Nexuiz.app/Contents/MacOS/libogg.0.dylib)
===================================================================
--- branches/nexuiz-2.0/misc/buildfiles/osx/Nexuiz.app/Contents/MacOS/libogg.0.dylib	                        (rev 0)
+++ branches/nexuiz-2.0/misc/buildfiles/osx/Nexuiz.app/Contents/MacOS/libogg.0.dylib	2009-08-15 19:18:18 UTC (rev 7442)
@@ -0,0 +1 @@
+link libogg.0.6.0.dylib
\ No newline at end of file

Modified: branches/nexuiz-2.0/misc/buildfiles/osx/Nexuiz.app/Contents/MacOS/libogg.dylib
===================================================================
--- branches/nexuiz-2.0/misc/buildfiles/osx/Nexuiz.app/Contents/MacOS/libogg.dylib	2009-08-15 17:50:28 UTC (rev 7441)
+++ branches/nexuiz-2.0/misc/buildfiles/osx/Nexuiz.app/Contents/MacOS/libogg.dylib	2009-08-15 19:18:18 UTC (rev 7442)
@@ -1 +1 @@
-link libogg.0.6.0.dylib
\ No newline at end of file
+link libogg.0.dylib
\ No newline at end of file

Modified: branches/nexuiz-2.0/misc/buildfiles/osx/Nexuiz.app/Contents/MacOS/libtheora.0.3.4.dylib
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/misc/buildfiles/osx/Nexuiz.app/Contents/MacOS/libtheora.0.dylib (from rev 7441, trunk/misc/buildfiles/osx/Nexuiz.app/Contents/MacOS/libtheora.0.dylib)
===================================================================
--- branches/nexuiz-2.0/misc/buildfiles/osx/Nexuiz.app/Contents/MacOS/libtheora.0.dylib	                        (rev 0)
+++ branches/nexuiz-2.0/misc/buildfiles/osx/Nexuiz.app/Contents/MacOS/libtheora.0.dylib	2009-08-15 19:18:18 UTC (rev 7442)
@@ -0,0 +1 @@
+link libtheora.0.3.4.dylib
\ No newline at end of file

Modified: branches/nexuiz-2.0/misc/buildfiles/osx/Nexuiz.app/Contents/MacOS/libtheora.dylib
===================================================================
--- branches/nexuiz-2.0/misc/buildfiles/osx/Nexuiz.app/Contents/MacOS/libtheora.dylib	2009-08-15 17:50:28 UTC (rev 7441)
+++ branches/nexuiz-2.0/misc/buildfiles/osx/Nexuiz.app/Contents/MacOS/libtheora.dylib	2009-08-15 19:18:18 UTC (rev 7442)
@@ -1 +1 @@
-link libtheora.0.3.4.dylib
\ No newline at end of file
+link libtheora.0.dylib
\ No newline at end of file

Modified: branches/nexuiz-2.0/misc/buildfiles/osx/Nexuiz.app/Contents/MacOS/libvorbis.0.4.3.dylib
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/misc/buildfiles/osx/Nexuiz.app/Contents/MacOS/libvorbisenc.2.0.6.dylib (from rev 7441, trunk/misc/buildfiles/osx/Nexuiz.app/Contents/MacOS/libvorbisenc.2.0.6.dylib)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/misc/buildfiles/osx/Nexuiz.app/Contents/MacOS/libvorbisenc.2.dylib (from rev 7441, trunk/misc/buildfiles/osx/Nexuiz.app/Contents/MacOS/libvorbisenc.2.dylib)
===================================================================
--- branches/nexuiz-2.0/misc/buildfiles/osx/Nexuiz.app/Contents/MacOS/libvorbisenc.2.dylib	                        (rev 0)
+++ branches/nexuiz-2.0/misc/buildfiles/osx/Nexuiz.app/Contents/MacOS/libvorbisenc.2.dylib	2009-08-15 19:18:18 UTC (rev 7442)
@@ -0,0 +1 @@
+link libvorbisenc.2.0.6.dylib
\ No newline at end of file

Deleted: branches/nexuiz-2.0/misc/buildfiles/osx/Nexuiz.app/Contents/MacOS/libvorbisenc.dylib
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/misc/buildfiles/osx/Nexuiz.app/Contents/MacOS/libvorbisenc.dylib (from rev 7441, trunk/misc/buildfiles/osx/Nexuiz.app/Contents/MacOS/libvorbisenc.dylib)
===================================================================
--- branches/nexuiz-2.0/misc/buildfiles/osx/Nexuiz.app/Contents/MacOS/libvorbisenc.dylib	                        (rev 0)
+++ branches/nexuiz-2.0/misc/buildfiles/osx/Nexuiz.app/Contents/MacOS/libvorbisenc.dylib	2009-08-15 19:18:18 UTC (rev 7442)
@@ -0,0 +1 @@
+link libvorbisenc.2.dylib
\ No newline at end of file

Modified: branches/nexuiz-2.0/misc/buildfiles/osx/Nexuiz.app/Contents/MacOS/libvorbisfile.3.3.2.dylib
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/misc/buildfiles/osx/Nexuiz.app/Contents/MacOS/libvorbisfile.3.dylib (from rev 7441, trunk/misc/buildfiles/osx/Nexuiz.app/Contents/MacOS/libvorbisfile.3.dylib)
===================================================================
--- branches/nexuiz-2.0/misc/buildfiles/osx/Nexuiz.app/Contents/MacOS/libvorbisfile.3.dylib	                        (rev 0)
+++ branches/nexuiz-2.0/misc/buildfiles/osx/Nexuiz.app/Contents/MacOS/libvorbisfile.3.dylib	2009-08-15 19:18:18 UTC (rev 7442)
@@ -0,0 +1 @@
+link libvorbisfile.3.3.2.dylib
\ No newline at end of file

Modified: branches/nexuiz-2.0/misc/buildfiles/osx/Nexuiz.app/Contents/MacOS/libvorbisfile.dylib
===================================================================
--- branches/nexuiz-2.0/misc/buildfiles/osx/Nexuiz.app/Contents/MacOS/libvorbisfile.dylib	2009-08-15 17:50:28 UTC (rev 7441)
+++ branches/nexuiz-2.0/misc/buildfiles/osx/Nexuiz.app/Contents/MacOS/libvorbisfile.dylib	2009-08-15 19:18:18 UTC (rev 7442)
@@ -1 +1 @@
-link libvorbisfile.3.3.2.dylib
\ No newline at end of file
+link libvorbisfile.3.dylib
\ No newline at end of file

Modified: branches/nexuiz-2.0/misc/buildfiles/w32/libtheora.dll
===================================================================
(Binary files differ)

Modified: branches/nexuiz-2.0/misc/buildfiles/w32/ogg.dll
===================================================================
(Binary files differ)

Modified: branches/nexuiz-2.0/misc/buildfiles/w32/vorbis.dll
===================================================================
(Binary files differ)

Modified: branches/nexuiz-2.0/misc/buildfiles/w32/vorbisenc.dll
===================================================================
(Binary files differ)

Modified: branches/nexuiz-2.0/misc/buildfiles/w32/vorbisfile.dll
===================================================================
(Binary files differ)


Property changes on: branches/nexuiz-2.0/misc/mediasource/hud/sprite-to-num.sh
___________________________________________________________________
Name: svn:eol-style
   + LF


Property changes on: branches/nexuiz-2.0/misc/mediasource/menuskins/wickedz/background_builder/append.sh
___________________________________________________________________
Name: svn:eol-style
   + LF


Property changes on: branches/nexuiz-2.0/misc/netradiant-NexuizPack/nexuiz.game/data/default_shaderlist.txt
___________________________________________________________________
Name: svn:eol-style
   + native


Property changes on: branches/nexuiz-2.0/misc/netradiant-NexuizPack/nexuiz.game/data/entities.def
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: branches/nexuiz-2.0/misc/netradiant-NexuizPack/nexuiz.game/data/turrets.def
===================================================================
--- branches/nexuiz-2.0/misc/netradiant-NexuizPack/nexuiz.game/data/turrets.def	2009-08-15 17:50:28 UTC (rev 7441)
+++ branches/nexuiz-2.0/misc/netradiant-NexuizPack/nexuiz.game/data/turrets.def	2009-08-15 19:18:18 UTC (rev 7442)
@@ -1,246 +1,246 @@
-/*QUAKED turret_machinegun (1 0 0) (-32 -32 0) (32 32 50) - PILLAR
-Fast firing moderate damage bullet (hitscan) turret.
--------- KEYS --------
-turret_scale_damage: 2 = double damage, 0.5 = half
-turret_scale_range: 2 = double range, 0.5 = half
-turret_scale_refire: 2 = double refire (SLOWER!), 0.5 = half (FASTER!)
-turret_scale_ammo: 2 = double ammo carry & regen, 0.5 = half ammo carry & regen
-turret_scale_aim: 2 = aim twice as fast, 0,5 = aim at half speed
-turret_scale_health: 2 = double health, 0.5 = half
-master_name: This turret controls what all turrets with master_nameof set to this aim at
-master_nameof: Dont select own targets, use the target of the turret with this master_name
-target: Defend the position of this entity
-team: 5=red, 14=blue
--------- SPAWNFLAGS --------
-PILLAR: Adds a supporting pillar under this turret, for turrets on terrain/uneven surfaces. (only for visuals)
--------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
-model="models/turrets/radiant/mg.md3"
-*/
-
-/*QUAKED turret_plasma (1 0 0) (-32 -32 0) (32 32 50) - PILLAR
--------- KEYS --------
-turret_scale_damage: 2 = double damage, 0.5 = half
-turret_scale_range: 2 = double range, 0.5 = half
-turret_scale_refire: 2 = double refire (SLOWER!), 0.5 = half (FASTER!)
-turret_scale_ammo: 2 = double ammo carry & regen, 0.5 = half ammo carry & regen
-turret_scale_aim: 2 = aim twice as fast, 0,5 = aim at half speed
-turret_scale_health: 2 = double health, 0.5 = half
-master_name: This turret controls what all turrets with master_nameof set to this aim at
-master_nameof: Dont select own targets, use the target of the turret with this master_name
-target: Defend the position of this entity
-team: 5=red, 14=blue
--------- SPAWNFLAGS --------
-PILLAR: Adds a supporting pillar under this turret, for turrets on terrain/uneven surfaces. (only for visuals)
----------NOTES----------
-Basic energy cannon
--------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
-model="models/turrets/radiant/plasma.md3"
-*/
-
-/*QUAKED turret_plasma_dual (1 0 0) (-32 -32 0) (32 32 50) - PILLAR
-basic energy cannon * 2
--------- KEYS --------
-turret_scale_damage: 2 = double damage, 0.5 = half
-turret_scale_range: 2 = double range, 0.5 = half
-turret_scale_refire: 2 = double refire (SLOWER!), 0.5 = half (FASTER!)
-turret_scale_ammo: 2 = double ammo carry & regen, 0.5 = half ammo carry & regen
-turret_scale_aim: 2 = aim twice as fast, 0,5 = aim at half speed
-turret_scale_health: 2 = double health, 0.5 = half
-master_name: This turret controls what all turrets with master_nameof set to this aim at
-master_nameof: Dont select own targets, use the target of the turret with this master_name
-target: Defend the position of this entity
-team: 5=red, 14=blue
--------- SPAWNFLAGS --------
-PILLAR: Adds a supporting pillar under this turret, for turrets on terrain/uneven surfaces. (only for visuals)
--------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
-model="models/turrets/radiant/plasma2.md3"
-*/
-
-/*QUAKED turret_flac (1 0 0) (-32 -32 0) (32 32 50) - PILLAR
-Only kills missiles, rockets, grenadelauncher & electro secondaries to be precise.
--------- KEYS --------
-turret_scale_damage: 2 = double damage, 0.5 = half
-turret_scale_range: 2 = double range, 0.5 = half
-turret_scale_refire: 2 = double refire (SLOWER!), 0.5 = half (FASTER!)
-turret_scale_ammo: 2 = double ammo carry & regen, 0.5 = half ammo carry & regen
-turret_scale_aim: 2 = aim twice as fast, 0,5 = aim at half speed
-turret_scale_health: 2 = double health, 0.5 = half
-master_name: This turret controls what all turrets with master_nameof set to this aim at
-master_nameof: Dont select own targets, use the target of the turret with this master_name
-target: Defend the position of this entity
-team: 5=red, 14=blue
--------- SPAWNFLAGS --------
-PILLAR: Adds a supporting pillar under this turret, for turrets on terrain/uneven surfaces. (only for visuals)
--------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
-model="models/turrets/radiant/flac.md3"
-*/
-
-/*QUAKED turret_mlrs (1 0 0) (-32 -32 0) (32 32 50)
-6 unguided rockers fired in a rapid burst.
--------- KEYS --------
-turret_scale_damage: 2 = double damage, 0.5 = half
-turret_scale_range: 2 = double range, 0.5 = half
-turret_scale_refire: 2 = double refire (SLOWER!), 0.5 = half (FASTER!)
-turret_scale_ammo: 2 = double ammo carry & regen, 0.5 = half ammo carry & regen
-turret_scale_aim: 2 = aim twice as fast, 0,5 = aim at half speed
-turret_scale_health: 2 = double health, 0.5 = half
-master_name: This turret controls what all turrets with master_nameof set to this aim at
-master_nameof: Dont select own targets, use the target of the turret with this master_name
-target: Defend the position of this entity
-team: 5=red, 14=blue
--------- SPAWNFLAGS --------
-PILLAR: Adds a supporting pillar under this turret, for turrets on terrain/uneven surfaces. (only for visuals)
--------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
-model="models/turrets/radiant/mlrs.md3"
-*/
-
-/*QUAKED turret_hellion (1 0 0) (-32 -32 0) (32 32 50)
-2 guided moderate damage accelerating rockets 
--------- KEYS --------
-turret_scale_damage: 2 = double damage, 0.5 = half
-turret_scale_range: 2 = double range, 0.5 = half
-turret_scale_refire: 2 = double refire (SLOWER!), 0.5 = half (FASTER!)
-turret_scale_ammo: 2 = double ammo carry & regen, 0.5 = half ammo carry & regen
-turret_scale_aim: 2 = aim twice as fast, 0,5 = aim at half speed
-turret_scale_health: 2 = double health, 0.5 = half
-master_name: This turret controls what all turrets with master_nameof set to this aim at
-master_nameof: Dont select own targets, use the target of the turret with this master_name
-target: Defend the position of this entity
-team: 5=red, 14=blue
--------- SPAWNFLAGS --------
-PILLAR: Adds a supporting pillar under this turret, for turrets on terrain/uneven surfaces. (only for visuals)
--------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
-model="models/turrets/radiant/hellion.md3"
-*/
-
-
-/*QUAKED turret_hk (1 0 0) (-32 -32 0) (32 32 50)
-Single powerful rocket with the ability to evade obstacles to find its target. Varied speed.
--------- KEYS --------
-turret_scale_damage: 2 = double damage, 0.5 = half
-turret_scale_range: 2 = double range, 0.5 = half
-turret_scale_refire: 2 = double refire (SLOWER!), 0.5 = half (FASTER!)
-turret_scale_ammo: 2 = double ammo carry & regen, 0.5 = half ammo carry & regen
-turret_scale_aim: 2 = aim twice as fast, 0,5 = aim at half speed
-turret_scale_health: 2 = double health, 0.5 = half
-master_name: This turret controls what all turrets with master_nameof set to this aim at
-master_nameof: Dont select own targets, use the target of the turret with this master_name
-target: Defend the position of this entity
-team: 5=red, 14=blue
--------- SPAWNFLAGS --------
-PILLAR: Adds a supporting pillar under this turret, for turrets on terrain/uneven surfaces. (only for visuals)
--------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
-model="models/turrets/radiant/hk.md3"
-*/
-
-/*QUAKED turret_tesla (1 0 0) (-32 -32 0) (32 32 50)
-Fires a lightning bolt that will jump to up to 10 targets if they are close enough to each other. Missiles included.
--------- KEYS --------
-turret_scale_damage: 2 = double damage, 0.5 = half
-turret_scale_range: 2 = double range, 0.5 = half
-turret_scale_refire: 2 = double refire (SLOWER!), 0.5 = half (FASTER!)
-turret_scale_ammo: 2 = double ammo carry & regen, 0.5 = half ammo carry & regen
-turret_scale_aim: 2 = aim twice as fast, 0,5 = aim at half speed
-turret_scale_health: 2 = double health, 0.5 = half
-master_name: This turret controls what all turrets with master_nameof set to this aim at
-master_nameof: Dont select own targets, use the target of the turret with this master_name
-target: Defend the position of this entity
-team: 5=red, 14=blue
--------- SPAWNFLAGS --------
-PILLAR: Adds a supporting pillar under this turret, for turrets on terrain/uneven surfaces. (only for visuals)
--------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
-model="models/turrets/radiant/tesla.md3"
-*/
-
-/*QUAKED turret_phaser (1 0 0) (-32 -32 0) (32 32 50)
-Constant beam weapon that will considerably slow its target down while dealing low but constant damage.
--------- KEYS --------
-turret_scale_damage: 2 = double damage, 0.5 = half
-turret_scale_range: 2 = double range, 0.5 = half
-turret_scale_refire: 2 = double refire (SLOWER!), 0.5 = half (FASTER!)
-turret_scale_ammo: 2 = double ammo carry & regen, 0.5 = half ammo carry & regen
-turret_scale_aim: 2 = aim twice as fast, 0,5 = aim at half speed
-turret_scale_health: 2 = double health, 0.5 = half
-master_name: This turret controls what all turrets with master_nameof set to this aim at
-master_nameof: Dont select own targets, use the target of the turret with this master_name
-target: Defend the position of this entity
-team: 5=red, 14=blue
--------- SPAWNFLAGS --------
-PILLAR: Adds a supporting pillar under this turret, for turrets on terrain/uneven surfaces. (only for visuals)
--------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
-model="models/turrets/radiant/phaser.md3"
-*/
-
-
-/*QUAKED turret_fusionreactor (1 0 0) (-32 -32 0) (32 32 50)
--------- KEYS --------
-turret_scale_damage: 2 = double damage, 0.5 = half
-turret_scale_range: 2 = double range, 0.5 = half
-turret_scale_refire: 2 = double refire (SLOWER!), 0.5 = half (FASTER!)
-turret_scale_ammo: 2 = double ammo carry & regen, 0.5 = half ammo carry & regen
-turret_scale_aim: 2 = aim twice as fast, 0,5 = aim at half speed
-turret_scale_health: 2 = double health, 0.5 = half
-team: 5=red, 14=blue
--------- SPAWNFLAGS --------
-PILLAR: Adds a supporting pillar under this turret, for turrets on terrain/uneven surfaces. (only for visuals)
----------NOTES----------
-Supplies neerby energy based turrets with more power so they can fire more often.
--------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
-model="models/turrets/radiant/reactor.md3"
-*/
-
-/*QUAKED turret_targettrigger (.5 .5 .5) ?
-Used to feed turrets capable of it with remote target info. currently only turret_hk supports this.
-*/
-
-
-/*QUAKED turret_walker (1 0 0) (-32 -32 0) (32 32 50)
------------KEYS------------
-turret_scale_damage: 2 = double damage, 0.5 = half
-turret_scale_range:  2 = double range, 0.5 = half
-turret_scale_refire: 2 = doubble refire (SLOWER!), 0.5 = half (FASTER!)
-turret_scale_ammo:   2 = doubble ammo carry & regen, 0.5 = half ammo carry & regen
-turret_scale_aim:    2 = aim twice as fast, 0,5 = aim at half speed
-turret_scale_health: 2 = double health, 0.5 = half
-
-team : 5=red, 14=blue
------------SPAWNFLAGS-----------
----------NOTES----------
-
-A nasty mechanical ceature that will engage longrange target with missiles, midrange with its miniguna and meele things up close and personal.
-
--------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
-model="models/turrets/radiant/walker.md3"
-*/
-
-
-/*QUAKED turret_ewheel (1 0 0) (-32 -32 0) (32 32 50)
------------KEYS------------
-turret_scale_damage: 2 = double damage, 0.5 = half
-turret_scale_range:  2 = double range, 0.5 = half
-turret_scale_refire: 2 = doubble refire (SLOWER!), 0.5 = half (FASTER!)
-turret_scale_ammo:   2 = doubble ammo carry & regen, 0.5 = half ammo carry & regen
-turret_scale_aim:    2 = aim twice as fast, 0,5 = aim at half speed
-turret_scale_health: 2 = double health, 0.5 = half
-
-team : 5=red, 14=blue
------------SPAWNFLAGS-----------
----------NOTES----------
-
-Small, agile and move capable turret.
-
--------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
-model="models/turrets/radiant/ewheel.md3"
-*/
-
-
-/*QUAKED turret_checkpoint (1 0 1) (-32 -32 -32) (32 32 32)
------------KEYS------------
-target: .targetname of next wapoint 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.
+/*QUAKED turret_machinegun (1 0 0) (-32 -32 0) (32 32 50) - PILLAR
+Fast firing moderate damage bullet (hitscan) turret.
+-------- KEYS --------
+turret_scale_damage: 2 = double damage, 0.5 = half
+turret_scale_range: 2 = double range, 0.5 = half
+turret_scale_refire: 2 = double refire (SLOWER!), 0.5 = half (FASTER!)
+turret_scale_ammo: 2 = double ammo carry & regen, 0.5 = half ammo carry & regen
+turret_scale_aim: 2 = aim twice as fast, 0,5 = aim at half speed
+turret_scale_health: 2 = double health, 0.5 = half
+master_name: This turret controls what all turrets with master_nameof set to this aim at
+master_nameof: Dont select own targets, use the target of the turret with this master_name
+target: Defend the position of this entity
+team: 5=red, 14=blue
+-------- SPAWNFLAGS --------
+PILLAR: Adds a supporting pillar under this turret, for turrets on terrain/uneven surfaces. (only for visuals)
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/turrets/radiant/mg.md3"
+*/
+
+/*QUAKED turret_plasma (1 0 0) (-32 -32 0) (32 32 50) - PILLAR
+-------- KEYS --------
+turret_scale_damage: 2 = double damage, 0.5 = half
+turret_scale_range: 2 = double range, 0.5 = half
+turret_scale_refire: 2 = double refire (SLOWER!), 0.5 = half (FASTER!)
+turret_scale_ammo: 2 = double ammo carry & regen, 0.5 = half ammo carry & regen
+turret_scale_aim: 2 = aim twice as fast, 0,5 = aim at half speed
+turret_scale_health: 2 = double health, 0.5 = half
+master_name: This turret controls what all turrets with master_nameof set to this aim at
+master_nameof: Dont select own targets, use the target of the turret with this master_name
+target: Defend the position of this entity
+team: 5=red, 14=blue
+-------- SPAWNFLAGS --------
+PILLAR: Adds a supporting pillar under this turret, for turrets on terrain/uneven surfaces. (only for visuals)
+---------NOTES----------
+Basic energy cannon
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/turrets/radiant/plasma.md3"
+*/
+
+/*QUAKED turret_plasma_dual (1 0 0) (-32 -32 0) (32 32 50) - PILLAR
+basic energy cannon * 2
+-------- KEYS --------
+turret_scale_damage: 2 = double damage, 0.5 = half
+turret_scale_range: 2 = double range, 0.5 = half
+turret_scale_refire: 2 = double refire (SLOWER!), 0.5 = half (FASTER!)
+turret_scale_ammo: 2 = double ammo carry & regen, 0.5 = half ammo carry & regen
+turret_scale_aim: 2 = aim twice as fast, 0,5 = aim at half speed
+turret_scale_health: 2 = double health, 0.5 = half
+master_name: This turret controls what all turrets with master_nameof set to this aim at
+master_nameof: Dont select own targets, use the target of the turret with this master_name
+target: Defend the position of this entity
+team: 5=red, 14=blue
+-------- SPAWNFLAGS --------
+PILLAR: Adds a supporting pillar under this turret, for turrets on terrain/uneven surfaces. (only for visuals)
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/turrets/radiant/plasma2.md3"
+*/
+
+/*QUAKED turret_flac (1 0 0) (-32 -32 0) (32 32 50) - PILLAR
+Only kills missiles, rockets, grenadelauncher & electro secondaries to be precise.
+-------- KEYS --------
+turret_scale_damage: 2 = double damage, 0.5 = half
+turret_scale_range: 2 = double range, 0.5 = half
+turret_scale_refire: 2 = double refire (SLOWER!), 0.5 = half (FASTER!)
+turret_scale_ammo: 2 = double ammo carry & regen, 0.5 = half ammo carry & regen
+turret_scale_aim: 2 = aim twice as fast, 0,5 = aim at half speed
+turret_scale_health: 2 = double health, 0.5 = half
+master_name: This turret controls what all turrets with master_nameof set to this aim at
+master_nameof: Dont select own targets, use the target of the turret with this master_name
+target: Defend the position of this entity
+team: 5=red, 14=blue
+-------- SPAWNFLAGS --------
+PILLAR: Adds a supporting pillar under this turret, for turrets on terrain/uneven surfaces. (only for visuals)
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/turrets/radiant/flac.md3"
+*/
+
+/*QUAKED turret_mlrs (1 0 0) (-32 -32 0) (32 32 50)
+6 unguided rockers fired in a rapid burst.
+-------- KEYS --------
+turret_scale_damage: 2 = double damage, 0.5 = half
+turret_scale_range: 2 = double range, 0.5 = half
+turret_scale_refire: 2 = double refire (SLOWER!), 0.5 = half (FASTER!)
+turret_scale_ammo: 2 = double ammo carry & regen, 0.5 = half ammo carry & regen
+turret_scale_aim: 2 = aim twice as fast, 0,5 = aim at half speed
+turret_scale_health: 2 = double health, 0.5 = half
+master_name: This turret controls what all turrets with master_nameof set to this aim at
+master_nameof: Dont select own targets, use the target of the turret with this master_name
+target: Defend the position of this entity
+team: 5=red, 14=blue
+-------- SPAWNFLAGS --------
+PILLAR: Adds a supporting pillar under this turret, for turrets on terrain/uneven surfaces. (only for visuals)
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/turrets/radiant/mlrs.md3"
+*/
+
+/*QUAKED turret_hellion (1 0 0) (-32 -32 0) (32 32 50)
+2 guided moderate damage accelerating rockets 
+-------- KEYS --------
+turret_scale_damage: 2 = double damage, 0.5 = half
+turret_scale_range: 2 = double range, 0.5 = half
+turret_scale_refire: 2 = double refire (SLOWER!), 0.5 = half (FASTER!)
+turret_scale_ammo: 2 = double ammo carry & regen, 0.5 = half ammo carry & regen
+turret_scale_aim: 2 = aim twice as fast, 0,5 = aim at half speed
+turret_scale_health: 2 = double health, 0.5 = half
+master_name: This turret controls what all turrets with master_nameof set to this aim at
+master_nameof: Dont select own targets, use the target of the turret with this master_name
+target: Defend the position of this entity
+team: 5=red, 14=blue
+-------- SPAWNFLAGS --------
+PILLAR: Adds a supporting pillar under this turret, for turrets on terrain/uneven surfaces. (only for visuals)
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/turrets/radiant/hellion.md3"
+*/
+
+
+/*QUAKED turret_hk (1 0 0) (-32 -32 0) (32 32 50)
+Single powerful rocket with the ability to evade obstacles to find its target. Varied speed.
+-------- KEYS --------
+turret_scale_damage: 2 = double damage, 0.5 = half
+turret_scale_range: 2 = double range, 0.5 = half
+turret_scale_refire: 2 = double refire (SLOWER!), 0.5 = half (FASTER!)
+turret_scale_ammo: 2 = double ammo carry & regen, 0.5 = half ammo carry & regen
+turret_scale_aim: 2 = aim twice as fast, 0,5 = aim at half speed
+turret_scale_health: 2 = double health, 0.5 = half
+master_name: This turret controls what all turrets with master_nameof set to this aim at
+master_nameof: Dont select own targets, use the target of the turret with this master_name
+target: Defend the position of this entity
+team: 5=red, 14=blue
+-------- SPAWNFLAGS --------
+PILLAR: Adds a supporting pillar under this turret, for turrets on terrain/uneven surfaces. (only for visuals)
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/turrets/radiant/hk.md3"
+*/
+
+/*QUAKED turret_tesla (1 0 0) (-32 -32 0) (32 32 50)
+Fires a lightning bolt that will jump to up to 10 targets if they are close enough to each other. Missiles included.
+-------- KEYS --------
+turret_scale_damage: 2 = double damage, 0.5 = half
+turret_scale_range: 2 = double range, 0.5 = half
+turret_scale_refire: 2 = double refire (SLOWER!), 0.5 = half (FASTER!)
+turret_scale_ammo: 2 = double ammo carry & regen, 0.5 = half ammo carry & regen
+turret_scale_aim: 2 = aim twice as fast, 0,5 = aim at half speed
+turret_scale_health: 2 = double health, 0.5 = half
+master_name: This turret controls what all turrets with master_nameof set to this aim at
+master_nameof: Dont select own targets, use the target of the turret with this master_name
+target: Defend the position of this entity
+team: 5=red, 14=blue
+-------- SPAWNFLAGS --------
+PILLAR: Adds a supporting pillar under this turret, for turrets on terrain/uneven surfaces. (only for visuals)
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/turrets/radiant/tesla.md3"
+*/
+
+/*QUAKED turret_phaser (1 0 0) (-32 -32 0) (32 32 50)
+Constant beam weapon that will considerably slow its target down while dealing low but constant damage.
+-------- KEYS --------
+turret_scale_damage: 2 = double damage, 0.5 = half
+turret_scale_range: 2 = double range, 0.5 = half
+turret_scale_refire: 2 = double refire (SLOWER!), 0.5 = half (FASTER!)
+turret_scale_ammo: 2 = double ammo carry & regen, 0.5 = half ammo carry & regen
+turret_scale_aim: 2 = aim twice as fast, 0,5 = aim at half speed
+turret_scale_health: 2 = double health, 0.5 = half
+master_name: This turret controls what all turrets with master_nameof set to this aim at
+master_nameof: Dont select own targets, use the target of the turret with this master_name
+target: Defend the position of this entity
+team: 5=red, 14=blue
+-------- SPAWNFLAGS --------
+PILLAR: Adds a supporting pillar under this turret, for turrets on terrain/uneven surfaces. (only for visuals)
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/turrets/radiant/phaser.md3"
+*/
+
+
+/*QUAKED turret_fusionreactor (1 0 0) (-32 -32 0) (32 32 50)
+-------- KEYS --------
+turret_scale_damage: 2 = double damage, 0.5 = half
+turret_scale_range: 2 = double range, 0.5 = half
+turret_scale_refire: 2 = double refire (SLOWER!), 0.5 = half (FASTER!)
+turret_scale_ammo: 2 = double ammo carry & regen, 0.5 = half ammo carry & regen
+turret_scale_aim: 2 = aim twice as fast, 0,5 = aim at half speed
+turret_scale_health: 2 = double health, 0.5 = half
+team: 5=red, 14=blue
+-------- SPAWNFLAGS --------
+PILLAR: Adds a supporting pillar under this turret, for turrets on terrain/uneven surfaces. (only for visuals)
+---------NOTES----------
+Supplies neerby energy based turrets with more power so they can fire more often.
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/turrets/radiant/reactor.md3"
+*/
+
+/*QUAKED turret_targettrigger (.5 .5 .5) ?
+Used to feed turrets capable of it with remote target info. currently only turret_hk supports this.
+*/
+
+
+/*QUAKED turret_walker (1 0 0) (-32 -32 0) (32 32 50)
+-----------KEYS------------
+turret_scale_damage: 2 = double damage, 0.5 = half
+turret_scale_range:  2 = double range, 0.5 = half
+turret_scale_refire: 2 = doubble refire (SLOWER!), 0.5 = half (FASTER!)
+turret_scale_ammo:   2 = doubble ammo carry & regen, 0.5 = half ammo carry & regen
+turret_scale_aim:    2 = aim twice as fast, 0,5 = aim at half speed
+turret_scale_health: 2 = double health, 0.5 = half
+
+team : 5=red, 14=blue
+-----------SPAWNFLAGS-----------
+---------NOTES----------
+
+A nasty mechanical ceature that will engage longrange target with missiles, midrange with its miniguna and meele things up close and personal.
+
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/turrets/radiant/walker.md3"
+*/
+
+
+/*QUAKED turret_ewheel (1 0 0) (-32 -32 0) (32 32 50)
+-----------KEYS------------
+turret_scale_damage: 2 = double damage, 0.5 = half
+turret_scale_range:  2 = double range, 0.5 = half
+turret_scale_refire: 2 = doubble refire (SLOWER!), 0.5 = half (FASTER!)
+turret_scale_ammo:   2 = doubble ammo carry & regen, 0.5 = half ammo carry & regen
+turret_scale_aim:    2 = aim twice as fast, 0,5 = aim at half speed
+turret_scale_health: 2 = double health, 0.5 = half
+
+team : 5=red, 14=blue
+-----------SPAWNFLAGS-----------
+---------NOTES----------
+
+Small, agile and move capable turret.
+
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/turrets/radiant/ewheel.md3"
+*/
+
+
+/*QUAKED turret_checkpoint (1 0 1) (-32 -32 -32) (32 32 32)
+-----------KEYS------------
+target: .targetname of next wapoint 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.
 */
\ No newline at end of file


Property changes on: branches/nexuiz-2.0/misc/netradiant-NexuizPack/nexuiz.game/data/turrets.def
___________________________________________________________________
Name: svn:eol-style
   + native


Property changes on: branches/nexuiz-2.0/misc/tools/autoshader.sh
___________________________________________________________________
Name: svn:eol-style
   + LF


Property changes on: branches/nexuiz-2.0/misc/tools/brightspot.sh
___________________________________________________________________
Name: svn:eol-style
   + LF


Property changes on: branches/nexuiz-2.0/misc/tools/csqcarchive.sh
___________________________________________________________________
Name: svn:eol-style
   + LF


Property changes on: branches/nexuiz-2.0/misc/tools/demotc-race-record-extractor.sh
___________________________________________________________________
Name: svn:eol-style
   + LF


Property changes on: branches/nexuiz-2.0/misc/tools/jpeg-if-not-alpha.sh
___________________________________________________________________
Name: svn:eol-style
   + LF

Modified: branches/nexuiz-2.0/misc/tools/makebuild.sh
===================================================================
--- branches/nexuiz-2.0/misc/tools/makebuild.sh	2009-08-15 17:50:28 UTC (rev 7441)
+++ branches/nexuiz-2.0/misc/tools/makebuild.sh	2009-08-15 19:18:18 UTC (rev 7442)
@@ -283,12 +283,12 @@
 mv NetRadiant.app NetRadiant-${netradiant_release}-osxintel.app
 rm -f netradiant-${netradiant_release}-osxintel.zip
 cat >> unsupported.txt <<EOF
-This directory contains NetRadiant, a stabilized Q3 map editor,
-configured for Nexuiz.
-
-It is not officially supported by Alientrap.
-
-Website: http://www.icculus.org/netradiant/
+This directory contains NetRadiant, a stabilized Q3 map editor,
+configured for Nexuiz.
+
+It is not officially supported by Alientrap.
+
+Website: http://www.icculus.org/netradiant/
 EOF
 cd ..
 


Property changes on: branches/nexuiz-2.0/misc/tools/makebuild.sh
___________________________________________________________________
Name: svn:eol-style
   + LF


Property changes on: branches/nexuiz-2.0/misc/tools/testbuild.sh
___________________________________________________________________
Name: svn:eol-style
   + LF


Property changes on: branches/nexuiz-2.0/misc/tools/ttf2conchars/foo.sh
___________________________________________________________________
Name: svn:eol-style
   + LF


Property changes on: branches/nexuiz-2.0/nexuiz-linux-glx.sh
___________________________________________________________________
Name: svn:eol-style
   + LF


Property changes on: branches/nexuiz-2.0/nexuiz-linux-sdl.sh
___________________________________________________________________
Name: svn:eol-style
   + LF

Modified: branches/nexuiz-2.0/server/server.cfg
===================================================================
--- branches/nexuiz-2.0/server/server.cfg	2009-08-15 17:50:28 UTC (rev 7441)
+++ branches/nexuiz-2.0/server/server.cfg	2009-08-15 19:18:18 UTC (rev 7442)
@@ -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 cyberparcour01 darkzone desertfactory dieselpower 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 downer eggandbacon evilspace farewell final_rage nr_piece-o-cake 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
 


Property changes on: branches/nexuiz-2.0/server/server_havoc_linux.sh
___________________________________________________________________
Name: svn:eol-style
   + LF


Property changes on: branches/nexuiz-2.0/server/server_havoc_mac.sh
___________________________________________________________________
Name: svn:eol-style
   + LF


Property changes on: branches/nexuiz-2.0/server/server_havoc_windows.bat
___________________________________________________________________
Name: svn:eol-style
   + CRLF


Property changes on: branches/nexuiz-2.0/server/server_linux.sh
___________________________________________________________________
Name: svn:eol-style
   + LF


Property changes on: branches/nexuiz-2.0/server/server_mac.sh
___________________________________________________________________
Name: svn:eol-style
   + LF


Property changes on: branches/nexuiz-2.0/server/server_windows.bat
___________________________________________________________________
Name: svn:eol-style
   + CRLF



More information about the nexuiz-commits mailing list