r5693 - in branches/nexuiz-2.0: . data data/gfx data/qcsrc/client data/qcsrc/common data/qcsrc/server data/sound/ambient data/sound/misc data/sound/weapons misc/tools server server/rcon2irc

DONOTREPLY at icculus.org DONOTREPLY at icculus.org
Thu Jan 29 07:15:06 EST 2009


Author: div0
Date: 2009-01-29 07:15:06 -0500 (Thu, 29 Jan 2009)
New Revision: 5693

Added:
   branches/nexuiz-2.0/data/qcsrc/client/prandom.qc
   branches/nexuiz-2.0/data/qcsrc/client/prandom.qh
   branches/nexuiz-2.0/misc/tools/shader-checksums.pl
Modified:
   branches/nexuiz-2.0/.patchsets
   branches/nexuiz-2.0/data/Makefile
   branches/nexuiz-2.0/data/build-compat-pack.sh
   branches/nexuiz-2.0/data/defaultNexuiz.cfg
   branches/nexuiz-2.0/data/effectinfo.txt
   branches/nexuiz-2.0/data/gfx/crosshaircrylink.tga
   branches/nexuiz-2.0/data/gfx/crosshairelectro.tga
   branches/nexuiz-2.0/data/gfx/crosshairgrenadelauncher.tga
   branches/nexuiz-2.0/data/gfx/crosshairhagar.tga
   branches/nexuiz-2.0/data/gfx/crosshairlaser.tga
   branches/nexuiz-2.0/data/gfx/crosshairminstanex.tga
   branches/nexuiz-2.0/data/gfx/crosshairnex.tga
   branches/nexuiz-2.0/data/gfx/crosshairrocketlauncher.tga
   branches/nexuiz-2.0/data/gfx/crosshairshotgun.tga
   branches/nexuiz-2.0/data/gfx/crosshairuzi.tga
   branches/nexuiz-2.0/data/qcsrc/client/Defs.qc
   branches/nexuiz-2.0/data/qcsrc/client/Main.qc
   branches/nexuiz-2.0/data/qcsrc/client/View.qc
   branches/nexuiz-2.0/data/qcsrc/client/casings.qc
   branches/nexuiz-2.0/data/qcsrc/client/damage.qc
   branches/nexuiz-2.0/data/qcsrc/client/gibs.qc
   branches/nexuiz-2.0/data/qcsrc/client/main.qh
   branches/nexuiz-2.0/data/qcsrc/client/mapvoting.qc
   branches/nexuiz-2.0/data/qcsrc/client/progs.src
   branches/nexuiz-2.0/data/qcsrc/client/projectile.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/server/cl_client.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/defs.qh
   branches/nexuiz-2.0/data/qcsrc/server/g_world.qc
   branches/nexuiz-2.0/data/qcsrc/server/miscfunctions.qc
   branches/nexuiz-2.0/data/qcsrc/server/race.qc
   branches/nexuiz-2.0/data/qcsrc/server/runematch.qc
   branches/nexuiz-2.0/data/qcsrc/server/scores.qc
   branches/nexuiz-2.0/data/qcsrc/server/scores.qh
   branches/nexuiz-2.0/data/qcsrc/server/t_teleporters.qc
   branches/nexuiz-2.0/data/qcsrc/server/w_porto.qc
   branches/nexuiz-2.0/data/qcsrc/server/w_rocketlauncher.qc
   branches/nexuiz-2.0/data/sound/ambient/machine1.ogg
   branches/nexuiz-2.0/data/sound/misc/armor1.wav
   branches/nexuiz-2.0/data/sound/misc/bodyimpact1.wav
   branches/nexuiz-2.0/data/sound/misc/bodyimpact2.wav
   branches/nexuiz-2.0/data/sound/misc/gib_splat01.wav
   branches/nexuiz-2.0/data/sound/misc/gib_splat02.wav
   branches/nexuiz-2.0/data/sound/misc/gib_splat03.wav
   branches/nexuiz-2.0/data/sound/misc/gib_splat04.wav
   branches/nexuiz-2.0/data/sound/misc/hit.wav
   branches/nexuiz-2.0/data/sound/misc/powerup.ogg
   branches/nexuiz-2.0/data/sound/weapons/rocket_impact.ogg
   branches/nexuiz-2.0/data/sound/weapons/tag_rocket_fly.ogg
   branches/nexuiz-2.0/server/rcon.pl
   branches/nexuiz-2.0/server/rcon2irc/rcon2irc.pl
Log:
r5661 | div0 | 2009-01-24 22:00:28 +0100 (Sat, 24 Jan 2009) | 2 lines
shader checksum script
r5662 | div0 | 2009-01-25 13:57:57 +0100 (Sun, 25 Jan 2009) | 2 lines
compat pack: include egyptsoc textures
r5663 | div0 | 2009-01-25 22:59:16 +0100 (Sun, 25 Jan 2009) | 2 lines
fix *particles usage msg
r5664 | div0 | 2009-01-25 23:07:22 +0100 (Sun, 25 Jan 2009) | 2 lines
experimental new colorful zero-violence effects :)
r5665 | div0 | 2009-01-25 23:13:28 +0100 (Sun, 25 Jan 2009) | 2 lines
make them less "over the top"
r5666 | div0 | 2009-01-26 07:56:44 +0100 (Mon, 26 Jan 2009) | 2 lines
fix color translation
r5667 | div0 | 2009-01-26 07:56:54 +0100 (Mon, 26 Jan 2009) | 2 lines
fix color translation
r5668 | div0 | 2009-01-26 20:00:12 +0100 (Mon, 26 Jan 2009) | 4 lines
prandom() - an attempt to make random decisions predictable (not sure if it actually works)
The goal is to make gibs and casings behave the very same way when playing back a demo.
r5669 | div0 | 2009-01-26 20:47:06 +0100 (Mon, 26 Jan 2009) | 2 lines
even more predictable prandom for now
r5670 | div0 | 2009-01-26 20:50:51 +0100 (Mon, 26 Jan 2009) | 2 lines
fix laserguided missiles; remove prandom again, it fails
r5671 | div0 | 2009-01-26 21:01:14 +0100 (Mon, 26 Jan 2009) | 2 lines
new CHs
r5672 | div0 | 2009-01-26 21:04:11 +0100 (Mon, 26 Jan 2009) | 2 lines
sbar_increment_maptime
r5673 | div0 | 2009-01-26 23:42:16 +0100 (Mon, 26 Jan 2009) | 2 lines
make chat bubble attached
r5674 | div0 | 2009-01-26 23:44:45 +0100 (Mon, 26 Jan 2009) | 2 lines
fix invis
r5675 | div0 | 2009-01-27 13:56:38 +0100 (Tue, 27 Jan 2009) | 4 lines
marked TEs to get rid of.
Until this is done, savegames won't work.
r5676 | div0 | 2009-01-27 14:21:55 +0100 (Tue, 27 Jan 2009) | 2 lines
make TE_CSQC_INIT and TE_CSQC_SCORESINFO shared entities. Should fix their issues with savegames.
r5677 | div0 | 2009-01-27 14:27:10 +0100 (Tue, 27 Jan 2009) | 2 lines
try to fix the previous commit
r5678 | div0 | 2009-01-27 15:49:40 +0100 (Tue, 27 Jan 2009) | 2 lines
make mapvote a shared ent too
r5679 | div0 | 2009-01-27 16:14:52 +0100 (Tue, 27 Jan 2009) | 2 lines
fix access to mv_maps_mask
r5680 | div0 | 2009-01-27 21:34:39 +0100 (Tue, 27 Jan 2009) | 2 lines
fix typo in mapvote ent code
r5681 | div0 | 2009-01-27 21:34:55 +0100 (Tue, 27 Jan 2009) | 2 lines
fix mapvote bugs
r5682 | div0 | 2009-01-27 22:56:10 +0100 (Tue, 27 Jan 2009) | 2 lines
moved some long taking entity update code into global init
r5683 | div0 | 2009-01-28 12:41:03 +0100 (Wed, 28 Jan 2009) | 2 lines
try to fix invis again
r5684 | esteel | 2009-01-28 12:49:56 +0100 (Wed, 28 Jan 2009) | 2 lines
add a new Makefile target "pk3here" that builds the pk3 file inside the svn tree, without exporting and thus saves quite some megabytes.  Use with caution, it excludes all the usual svn control files but it could still zip unwanted files.
r5685 | div0 | 2009-01-28 18:31:40 +0100 (Wed, 28 Jan 2009) | 2 lines
more sound changes
r5686 | div0 | 2009-01-28 18:44:32 +0100 (Wed, 28 Jan 2009) | 2 lines
get rid of TE_CSQC_WARMUP
r5687 | div0 | 2009-01-28 19:29:31 +0100 (Wed, 28 Jan 2009) | 3 lines
remove all TEs that contain a permanent state.
This way, savegames should contain all necessary info now.
r5688 | div0 | 2009-01-28 19:41:28 +0100 (Wed, 28 Jan 2009) | 2 lines
draw end trail of projectiles (should look better)
r5689 | div0 | 2009-01-28 20:17:05 +0100 (Wed, 28 Jan 2009) | 3 lines
oops, forgot to commit cvar check
r5690 | div0 | 2009-01-28 22:02:40 +0100 (Wed, 28 Jan 2009) | 2 lines
tele resend after teleport

Modified: branches/nexuiz-2.0/.patchsets
===================================================================
--- branches/nexuiz-2.0/.patchsets	2009-01-29 12:14:47 UTC (rev 5692)
+++ branches/nexuiz-2.0/.patchsets	2009-01-29 12:15:06 UTC (rev 5693)
@@ -1,2 +1,2 @@
 master = svn://svn.icculus.org/nexuiz/trunk
-revisions_applied = 1-5659
+revisions_applied = 1-5690

Modified: branches/nexuiz-2.0/data/Makefile
===================================================================
--- branches/nexuiz-2.0/data/Makefile	2009-01-29 12:14:47 UTC (rev 5692)
+++ branches/nexuiz-2.0/data/Makefile	2009-01-29 12:15:06 UTC (rev 5693)
@@ -2,6 +2,7 @@
 PERL ?= perl
 PK3NAME ?= `date +../data%Y%m%d.pk3`
 ZIP ?= 7za a -tzip -mx=9
+ZIPEXCLUDE ?= -x\!*.pk3 -xr\!\.svn -x\!qcsrc
 
 FTEQCCFLAGS ?= -Wall -Wno-mundane -O3 -Ono-c -Ono-cs -flo
 FTEQCCFLAGS_PROGS ?= 
@@ -26,6 +27,20 @@
 .PHONY: pk3
 pk3: $(PK3NAME)
 
+.PHONY: pk3here
+pk3here: qc
+	$(RM) $(PK3NAME); \
+	set -ex; \
+		ABSPK3NAME=$(PK3NAME); \
+		case $$ABSPK3NAME in \
+			/*) \
+				;; \
+			*) \
+				ABSPK3NAME=$$PWD/$$ABSPK3NAME; \
+				;; \
+		esac; \
+		$(ZIP) $(ZIPEXCLUDE) $$ABSPK3NAME .
+
 .PHONY: clean
 clean:
 	rm -f progs.dat menu.dat csprogs.dat

Modified: branches/nexuiz-2.0/data/build-compat-pack.sh
===================================================================
--- branches/nexuiz-2.0/data/build-compat-pack.sh	2009-01-29 12:14:47 UTC (rev 5692)
+++ branches/nexuiz-2.0/data/build-compat-pack.sh	2009-01-29 12:15:06 UTC (rev 5693)
@@ -174,6 +174,7 @@
     models/weapons/w_seeker.zym
 	particles/particlefont.tga
 	scripts/eggandbacon.shader
+	scripts/egyptsoc.shader
 	scripts/flags.shader
 	scripts/hlac.shader
 	scripts/portals.shader
@@ -569,6 +570,608 @@
 	textures/eggandbacon/upsign_bump.tga
 	textures/eggandbacon/upsign_gloss.tga
 	textures/eggandbacon/upsign.tga
+	textures/egyptsoc_floor/block01a.tga
+	textures/egyptsoc_floor/block01b.tga
+	textures/egyptsoc_floor/block02a.tga
+	textures/egyptsoc_floor/block02b.tga
+	textures/egyptsoc_floor/block03a.tga
+	textures/egyptsoc_floor/block03b.tga
+	textures/egyptsoc_floor/block04a.tga
+	textures/egyptsoc_floor/block04b.tga
+	textures/egyptsoc_floor/block06a.tga
+	textures/egyptsoc_floor/block06b.tga
+	textures/egyptsoc_floor/block07a.tga
+	textures/egyptsoc_floor/block07b.tga
+	textures/egyptsoc_floor/block08a.tga
+	textures/egyptsoc_floor/block08b.tga
+	textures/egyptsoc_floor/block08c.tga
+	textures/egyptsoc_floor/block08d.tga
+	textures/egyptsoc_floor/block09a.tga
+	textures/egyptsoc_floor/block09b.tga
+	textures/egyptsoc_floor/block10a.tga
+	textures/egyptsoc_floor/block10b.tga
+	textures/egyptsoc_floor/block10c.tga
+	textures/egyptsoc_floor/grate1a.tga
+	textures/egyptsoc_floor/grate1b.tga
+	textures/egyptsoc_floor/grate2a.tga
+	textures/egyptsoc_floor/grate2b.tga
+	textures/egyptsoc_floor/grate3a.tga
+	textures/egyptsoc_floor/grate3b.tga
+	textures/egyptsoc_floor/grate4a.tga
+	textures/egyptsoc_floor/grate4b.tga
+	textures/egyptsoc_floor/jumppad1ab_glow.tga
+	textures/egyptsoc_floor/jumppad1ab.tga
+	textures/egyptsoc_floor/jumppad1ag_glow.tga
+	textures/egyptsoc_floor/jumppad1ag.tga
+	textures/egyptsoc_floor/jumppad1ap.tga
+	textures/egyptsoc_floor/jumppad1ar_glow.tga
+	textures/egyptsoc_floor/jumppad1ar.tga
+	textures/egyptsoc_floor/jumppad1bb_glow.tga
+	textures/egyptsoc_floor/jumppad1bb.tga
+	textures/egyptsoc_floor/jumppad1bg_glow.tga
+	textures/egyptsoc_floor/jumppad1bg.tga
+	textures/egyptsoc_floor/jumppad1br_glow.tga
+	textures/egyptsoc_floor/jumppad1br.tga
+	textures/egyptsoc_floor/marker1ab.tga
+	textures/egyptsoc_floor/marker1ag.tga
+	textures/egyptsoc_floor/marker1bb.tga
+	textures/egyptsoc_floor/marker1bg.tga
+	textures/egyptsoc_floor/solidgrate1a.tga
+	textures/egyptsoc_floor/solidgrate1b.tga
+	textures/egyptsoc_floor/solidgrate2a.tga
+	textures/egyptsoc_floor/solidgrate2b.tga
+	textures/egyptsoc_floor/solidgrate3a.tga
+	textures/egyptsoc_floor/solidgrate3b.tga
+	textures/egyptsoc_floor/solidgrate4a.tga
+	textures/egyptsoc_floor/solidgrate4b.tga
+	textures/egyptsoc_floor/woodmgrid1a.tga
+	textures/egyptsoc_floor/woodmgrid1b.tga
+	textures/egyptsoc_floor/woodmgrid2a.tga
+	textures/egyptsoc_floor/woodmgrid2b.tga
+	textures/egyptsoc_floor/woodmgrid3a.tga
+	textures/egyptsoc_floor/woodmgrid3b.tga
+	textures/egyptsoc_mat/block01a.tga
+	textures/egyptsoc_mat/block01b.tga
+	textures/egyptsoc_mat/block01c.tga
+	textures/egyptsoc_mat/block01d.tga
+	textures/egyptsoc_mat/block02a.tga
+	textures/egyptsoc_mat/block02b.tga
+	textures/egyptsoc_mat/block02c.tga
+	textures/egyptsoc_mat/block02d.tga
+	textures/egyptsoc_mat/sand1a.tga
+	textures/egyptsoc_mat/sand1b.tga
+	textures/egyptsoc_mat/wood02.tga
+	textures/egyptsoc_mat/wood04.tga
+	textures/egyptsoc_mat/wood05a.tga
+	textures/egyptsoc_mat/wood05b.tga
+	textures/egyptsoc_mat/wood07.tga
+	textures/egyptsoc_mat/wood09.tga
+	textures/egyptsoc_mat/wood17.tga
+	textures/egyptsoc_mat/wood18.tga
+	textures/egyptsoc_sfx/lig_032-01b1_glow.tga
+	textures/egyptsoc_sfx/lig_032-01b1.tga
+	textures/egyptsoc_sfx/lig_032-01b2_glow.tga
+	textures/egyptsoc_sfx/lig_032-01b2.tga
+	textures/egyptsoc_sfx/lig_032-01r1_glow.tga
+	textures/egyptsoc_sfx/lig_032-01r1.tga
+	textures/egyptsoc_sfx/lig_032-01r2_glow.tga
+	textures/egyptsoc_sfx/lig_032-01r2.tga
+	textures/egyptsoc_sfx/lig_032-01w1_glow.tga
+	textures/egyptsoc_sfx/lig_032-01w1.tga
+	textures/egyptsoc_sfx/lig_032-01w2_glow.tga
+	textures/egyptsoc_sfx/lig_032-01w2.tga
+	textures/egyptsoc_sfx/lig_032-01y1_glow.tga
+	textures/egyptsoc_sfx/lig_032-01y1.tga
+	textures/egyptsoc_sfx/lig_032-01y2_glow.tga
+	textures/egyptsoc_sfx/lig_032-01y2.tga
+	textures/egyptsoc_sfx/lig_032-02b1_glow.tga
+	textures/egyptsoc_sfx/lig_032-02b1.tga
+	textures/egyptsoc_sfx/lig_032-02b2_glow.tga
+	textures/egyptsoc_sfx/lig_032-02b2.tga
+	textures/egyptsoc_sfx/lig_032-02r1_glow.tga
+	textures/egyptsoc_sfx/lig_032-02r1.tga
+	textures/egyptsoc_sfx/lig_032-02r2_glow.tga
+	textures/egyptsoc_sfx/lig_032-02r2.tga
+	textures/egyptsoc_sfx/lig_032-02w1_glow.tga
+	textures/egyptsoc_sfx/lig_032-02w1.tga
+	textures/egyptsoc_sfx/lig_032-02w2_glow.tga
+	textures/egyptsoc_sfx/lig_032-02w2.tga
+	textures/egyptsoc_sfx/lig_032-02y1_glow.tga
+	textures/egyptsoc_sfx/lig_032-02y1.tga
+	textures/egyptsoc_sfx/lig_032-02y2_glow.tga
+	textures/egyptsoc_sfx/lig_032-02y2.tga
+	textures/egyptsoc_sfx/lig_032-03b1_glow.tga
+	textures/egyptsoc_sfx/lig_032-03b1.tga
+	textures/egyptsoc_sfx/lig_032-03b2_glow.tga
+	textures/egyptsoc_sfx/lig_032-03b2.tga
+	textures/egyptsoc_sfx/lig_032-03r1_glow.tga
+	textures/egyptsoc_sfx/lig_032-03r1.tga
+	textures/egyptsoc_sfx/lig_032-03r2_glow.tga
+	textures/egyptsoc_sfx/lig_032-03r2.tga
+	textures/egyptsoc_sfx/lig_032-03w1_glow.tga
+	textures/egyptsoc_sfx/lig_032-03w1.tga
+	textures/egyptsoc_sfx/lig_032-03w2_glow.tga
+	textures/egyptsoc_sfx/lig_032-03w2.tga
+	textures/egyptsoc_sfx/lig_032-03y1_glow.tga
+	textures/egyptsoc_sfx/lig_032-03y1.tga
+	textures/egyptsoc_sfx/lig_032-03y2_glow.tga
+	textures/egyptsoc_sfx/lig_032-03y2.tga
+	textures/egyptsoc_sfx/lig_032-04b1_glow.tga
+	textures/egyptsoc_sfx/lig_032-04b1.tga
+	textures/egyptsoc_sfx/lig_032-04b2_glow.tga
+	textures/egyptsoc_sfx/lig_032-04b2.tga
+	textures/egyptsoc_sfx/lig_032-04r1_glow.tga
+	textures/egyptsoc_sfx/lig_032-04r1.tga
+	textures/egyptsoc_sfx/lig_032-04r2_glow.tga
+	textures/egyptsoc_sfx/lig_032-04r2.tga
+	textures/egyptsoc_sfx/lig_032-04w1_glow.tga
+	textures/egyptsoc_sfx/lig_032-04w1.tga
+	textures/egyptsoc_sfx/lig_032-04w2_glow.tga
+	textures/egyptsoc_sfx/lig_032-04w2.tga
+	textures/egyptsoc_sfx/lig_032-04y1_glow.tga
+	textures/egyptsoc_sfx/lig_032-04y1.tga
+	textures/egyptsoc_sfx/lig_032-04y2_glow.tga
+	textures/egyptsoc_sfx/lig_032-04y2.tga
+	textures/egyptsoc_sfx/lig_064-01b1_glow.tga
+	textures/egyptsoc_sfx/lig_064-01b1.tga
+	textures/egyptsoc_sfx/lig_064-01b2_glow.tga
+	textures/egyptsoc_sfx/lig_064-01b2.tga
+	textures/egyptsoc_sfx/lig_064-01r1_glow.tga
+	textures/egyptsoc_sfx/lig_064-01r1.tga
+	textures/egyptsoc_sfx/lig_064-01r2_glow.tga
+	textures/egyptsoc_sfx/lig_064-01r2.tga
+	textures/egyptsoc_sfx/lig_064-01w1_glow.tga
+	textures/egyptsoc_sfx/lig_064-01w1.tga
+	textures/egyptsoc_sfx/lig_064-01w2_glow.tga
+	textures/egyptsoc_sfx/lig_064-01w2.tga
+	textures/egyptsoc_sfx/lig_064-01y1_glow.tga
+	textures/egyptsoc_sfx/lig_064-01y1.tga
+	textures/egyptsoc_sfx/lig_064-01y2_glow.tga
+	textures/egyptsoc_sfx/lig_064-01y2.tga
+	textures/egyptsoc_sfx/lig_064-02b1_glow.tga
+	textures/egyptsoc_sfx/lig_064-02b1.tga
+	textures/egyptsoc_sfx/lig_064-02b2_glow.tga
+	textures/egyptsoc_sfx/lig_064-02b2.tga
+	textures/egyptsoc_sfx/lig_064-02r1_glow.tga
+	textures/egyptsoc_sfx/lig_064-02r1.tga
+	textures/egyptsoc_sfx/lig_064-02r2_glow.tga
+	textures/egyptsoc_sfx/lig_064-02r2.tga
+	textures/egyptsoc_sfx/lig_064-02w1_glow.tga
+	textures/egyptsoc_sfx/lig_064-02w1.tga
+	textures/egyptsoc_sfx/lig_064-02w2_glow.tga
+	textures/egyptsoc_sfx/lig_064-02w2.tga
+	textures/egyptsoc_sfx/lig_064-02y1_glow.tga
+	textures/egyptsoc_sfx/lig_064-02y1.tga
+	textures/egyptsoc_sfx/lig_064-02y2_glow.tga
+	textures/egyptsoc_sfx/lig_064-02y2.tga
+	textures/egyptsoc_sfx/lig_064-04b1_glow.tga
+	textures/egyptsoc_sfx/lig_064-04b1.tga
+	textures/egyptsoc_sfx/lig_064-04b2_glow.tga
+	textures/egyptsoc_sfx/lig_064-04b2.tga
+	textures/egyptsoc_sfx/lig_064-04r1_glow.tga
+	textures/egyptsoc_sfx/lig_064-04r1.tga
+	textures/egyptsoc_sfx/lig_064-04r2_glow.tga
+	textures/egyptsoc_sfx/lig_064-04r2.tga
+	textures/egyptsoc_sfx/lig_064-04w1_glow.tga
+	textures/egyptsoc_sfx/lig_064-04w1.tga
+	textures/egyptsoc_sfx/lig_064-04w2_glow.tga
+	textures/egyptsoc_sfx/lig_064-04w2.tga
+	textures/egyptsoc_sfx/lig_064-04y1_glow.tga
+	textures/egyptsoc_sfx/lig_064-04y1.tga
+	textures/egyptsoc_sfx/lig_064-04y2_glow.tga
+	textures/egyptsoc_sfx/lig_064-04y2.tga
+	textures/egyptsoc_sfx/lig_064-05b1_glow.tga
+	textures/egyptsoc_sfx/lig_064-05b1.tga
+	textures/egyptsoc_sfx/lig_064-05b2_glow.tga
+	textures/egyptsoc_sfx/lig_064-05b2.tga
+	textures/egyptsoc_sfx/lig_064-05r1_glow.tga
+	textures/egyptsoc_sfx/lig_064-05r1.tga
+	textures/egyptsoc_sfx/lig_064-05r2_glow.tga
+	textures/egyptsoc_sfx/lig_064-05r2.tga
+	textures/egyptsoc_sfx/lig_064-05w1_glow.tga
+	textures/egyptsoc_sfx/lig_064-05w1.tga
+	textures/egyptsoc_sfx/lig_064-05w2_glow.tga
+	textures/egyptsoc_sfx/lig_064-05w2.tga
+	textures/egyptsoc_sfx/lig_064-05y1_glow.tga
+	textures/egyptsoc_sfx/lig_064-05y1.tga
+	textures/egyptsoc_sfx/lig_064-05y2_glow.tga
+	textures/egyptsoc_sfx/lig_064-05y2.tga
+	textures/egyptsoc_sfx/lig_064-06b1_glow.tga
+	textures/egyptsoc_sfx/lig_064-06b1.tga
+	textures/egyptsoc_sfx/lig_064-06b2_glow.tga
+	textures/egyptsoc_sfx/lig_064-06b2.tga
+	textures/egyptsoc_sfx/lig_064-06r1_glow.tga
+	textures/egyptsoc_sfx/lig_064-06r1.tga
+	textures/egyptsoc_sfx/lig_064-06r2_glow.tga
+	textures/egyptsoc_sfx/lig_064-06r2.tga
+	textures/egyptsoc_sfx/lig_064-06w1_glow.tga
+	textures/egyptsoc_sfx/lig_064-06w1.tga
+	textures/egyptsoc_sfx/lig_064-06w2_glow.tga
+	textures/egyptsoc_sfx/lig_064-06w2.tga
+	textures/egyptsoc_sfx/lig_064-06y1_glow.tga
+	textures/egyptsoc_sfx/lig_064-06y1.tga
+	textures/egyptsoc_sfx/lig_064-06y2_glow.tga
+	textures/egyptsoc_sfx/lig_064-06y2.tga
+	textures/egyptsoc_sfx/lig_128-05b1.tga
+	textures/egyptsoc_sfx/lig_128-05b2.tga
+	textures/egyptsoc_sfx/lig_128-05r1.tga
+	textures/egyptsoc_sfx/lig_128-05r2.tga
+	textures/egyptsoc_sfx/lig_128-05w1.tga
+	textures/egyptsoc_sfx/lig_128-05w2.tga
+	textures/egyptsoc_sfx/lig_128-05y1.tga
+	textures/egyptsoc_sfx/lig_128-05y2.tga
+	textures/egyptsoc_sfx/lig_b064-01a_glow.tga
+	textures/egyptsoc_sfx/lig_b064-01a.tga
+	textures/egyptsoc_sfx/lig_b064-01b_glow.tga
+	textures/egyptsoc_sfx/lig_b064-01b.tga
+	textures/egyptsoc_sfx/lig_b064-01c_glow.tga
+	textures/egyptsoc_sfx/lig_b064-01c.tga
+	textures/egyptsoc_sfx/lig_b064-01d_glow.tga
+	textures/egyptsoc_sfx/lig_b064-01d.tga
+	textures/egyptsoc_sfx/lig_b064-01e_glow.tga
+	textures/egyptsoc_sfx/lig_b064-01e.tga
+	textures/egyptsoc_sfx/lig_b064-01f_glow.tga
+	textures/egyptsoc_sfx/lig_b064-01f.tga
+	textures/egyptsoc_sfx/lig_b064-02a_glow.tga
+	textures/egyptsoc_sfx/lig_b064-02a.tga
+	textures/egyptsoc_sfx/lig_b064-02b_glow.tga
+	textures/egyptsoc_sfx/lig_b064-02b.tga
+	textures/egyptsoc_sfx/lig_b064-02c_glow.tga
+	textures/egyptsoc_sfx/lig_b064-02c.tga
+	textures/egyptsoc_sfx/lig_b064-02d_glow.tga
+	textures/egyptsoc_sfx/lig_b064-02d.tga
+	textures/egyptsoc_sfx/lig_b064-02e_glow.tga
+	textures/egyptsoc_sfx/lig_b064-02e.tga
+	textures/egyptsoc_sfx/lig_b064-02f_glow.tga
+	textures/egyptsoc_sfx/lig_b064-02f.tga
+	textures/egyptsoc_sfx/lig_b064-03a_glow.tga
+	textures/egyptsoc_sfx/lig_b064-03a.tga
+	textures/egyptsoc_sfx/lig_b064-03b_glow.tga
+	textures/egyptsoc_sfx/lig_b064-03b.tga
+	textures/egyptsoc_sfx/lig_b064-03c_glow.tga
+	textures/egyptsoc_sfx/lig_b064-03c.tga
+	textures/egyptsoc_sfx/lig_b064-03d_glow.tga
+	textures/egyptsoc_sfx/lig_b064-03d.tga
+	textures/egyptsoc_sfx/lig_b064-03e_glow.tga
+	textures/egyptsoc_sfx/lig_b064-03e.tga
+	textures/egyptsoc_sfx/lig_b064-03f_glow.tga
+	textures/egyptsoc_sfx/lig_b064-03f.tga
+	textures/egyptsoc_sfx/lig_v192-01ba_glow.tga
+	textures/egyptsoc_sfx/lig_v192-01ba.tga
+	textures/egyptsoc_sfx/lig_v192-01bb_glow.tga
+	textures/egyptsoc_sfx/lig_v192-01bb.tga
+	textures/egyptsoc_sfx/lig_v192-01wa_glow.tga
+	textures/egyptsoc_sfx/lig_v192-01wa.tga
+	textures/egyptsoc_sfx/lig_v192-01wb_glow.tga
+	textures/egyptsoc_sfx/lig_v192-01wb.tga
+	textures/egyptsoc_sfx/lig_v192-01ya_glow.tga
+	textures/egyptsoc_sfx/lig_v192-01ya.tga
+	textures/egyptsoc_sfx/lig_v192-01yb_glow.tga
+	textures/egyptsoc_sfx/lig_v192-01yb.tga
+	textures/egyptsoc_trim/032-01a.tga
+	textures/egyptsoc_trim/032-01b.tga
+	textures/egyptsoc_trim/032-01c.tga
+	textures/egyptsoc_trim/032-02a.tga
+	textures/egyptsoc_trim/032-02b.tga
+	textures/egyptsoc_trim/032-02c.tga
+	textures/egyptsoc_trim/032-03a.tga
+	textures/egyptsoc_trim/032-03b.tga
+	textures/egyptsoc_trim/032-03c.tga
+	textures/egyptsoc_trim/032-04a.tga
+	textures/egyptsoc_trim/032-04b.tga
+	textures/egyptsoc_trim/032-04c.tga
+	textures/egyptsoc_trim/032-04d.tga
+	textures/egyptsoc_trim/032-05a.tga
+	textures/egyptsoc_trim/032-05b.tga
+	textures/egyptsoc_trim/032-05c.tga
+	textures/egyptsoc_trim/032-05d.tga
+	textures/egyptsoc_trim/032-05e.tga
+	textures/egyptsoc_trim/032-05f.tga
+	textures/egyptsoc_trim/032-06a.tga
+	textures/egyptsoc_trim/032-06b.tga
+	textures/egyptsoc_trim/032-06c.tga
+	textures/egyptsoc_trim/048-01a.tga
+	textures/egyptsoc_trim/048-01b.tga
+	textures/egyptsoc_trim/048-01c.tga
+	textures/egyptsoc_trim/048-02a.tga
+	textures/egyptsoc_trim/048-02b.tga
+	textures/egyptsoc_trim/048-02c.tga
+	textures/egyptsoc_trim/048-02d.tga
+	textures/egyptsoc_trim/048-02e.tga
+	textures/egyptsoc_trim/048-02f.tga
+	textures/egyptsoc_trim/048-02g.tga
+	textures/egyptsoc_trim/048-02h.tga
+	textures/egyptsoc_trim/064-01a.tga
+	textures/egyptsoc_trim/064-01b.tga
+	textures/egyptsoc_trim/064-01c.tga
+	textures/egyptsoc_trim/064-02a.tga
+	textures/egyptsoc_trim/064-02b.tga
+	textures/egyptsoc_trim/064-02c.tga
+	textures/egyptsoc_trim/064-03a.tga
+	textures/egyptsoc_trim/064-03b.tga
+	textures/egyptsoc_trim/064-03c.tga
+	textures/egyptsoc_trim/064-04a.tga
+	textures/egyptsoc_trim/064-04b.tga
+	textures/egyptsoc_trim/064-04c.tga
+	textures/egyptsoc_trim/064-05a.tga
+	textures/egyptsoc_trim/064-05b.tga
+	textures/egyptsoc_trim/064-05c.tga
+	textures/egyptsoc_trim/064-05d.tga
+	textures/egyptsoc_trim/064-06a.tga
+	textures/egyptsoc_trim/064-06b.tga
+	textures/egyptsoc_trim/064-06c.tga
+	textures/egyptsoc_trim/064-06d.tga
+	textures/egyptsoc_trim/064-07a.tga
+	textures/egyptsoc_trim/064-07b.tga
+	textures/egyptsoc_trim/064-07c.tga
+	textures/egyptsoc_trim/064-07d.tga
+	textures/egyptsoc_trim/064-07e.tga
+	textures/egyptsoc_trim/064-08a.tga
+	textures/egyptsoc_trim/064-08b.tga
+	textures/egyptsoc_trim/064-08c.tga
+	textures/egyptsoc_trim/064-08d.tga
+	textures/egyptsoc_trim/064-08e.tga
+	textures/egyptsoc_trim/064-08f.tga
+	textures/egyptsoc_trim/096-01c.tga
+	textures/egyptsoc_trim/128-01a.tga
+	textures/egyptsoc_trim/128-01b.tga
+	textures/egyptsoc_trim/128-01c.tga
+	textures/egyptsoc_trim/128-01pa.tga
+	textures/egyptsoc_trim/128-01pb.tga
+	textures/egyptsoc_trim/128-01pc.tga
+	textures/egyptsoc_trim/128-02a.tga
+	textures/egyptsoc_trim/128-02b.tga
+	textures/egyptsoc_trim/128-02c.tga
+	textures/egyptsoc_trim/128-02pa.tga
+	textures/egyptsoc_trim/128-02pb.tga
+	textures/egyptsoc_trim/128-02pc.tga
+	textures/egyptsoc_trim/128-03a.tga
+	textures/egyptsoc_trim/128-03b.tga
+	textures/egyptsoc_trim/128-03c.tga
+	textures/egyptsoc_trim/128-04a.tga
+	textures/egyptsoc_trim/128-04b.tga
+	textures/egyptsoc_trim/128-04c.tga
+	textures/egyptsoc_trim/128-04d.tga
+	textures/egyptsoc_trim/128-05a.tga
+	textures/egyptsoc_trim/128-05b.tga
+	textures/egyptsoc_trim/128-05c.tga
+	textures/egyptsoc_trim/128-05d.tga
+	textures/egyptsoc_trim/128-05e.tga
+	textures/egyptsoc_trim/128-05f.tga
+	textures/egyptsoc_trim/128-05g.tga
+	textures/egyptsoc_trim/128-05h.tga
+	textures/egyptsoc_trim/128-05i.tga
+	textures/egyptsoc_trim/128-05j.tga
+	textures/egyptsoc_trim/128-comb1.tga
+	textures/egyptsoc_trim/256-01a.tga
+	textures/egyptsoc_trim/256-01b.tga
+	textures/egyptsoc_trim/256-03a.tga
+	textures/egyptsoc_trim/256-03b.tga
+	textures/egyptsoc_trim/256-03c.tga
+	textures/egyptsoc_trim/256-03d.tga
+	textures/egyptsoc_trim/256-04a.tga
+	textures/egyptsoc_trim/256-04b.tga
+	textures/egyptsoc_trim/256-04c.tga
+	textures/egyptsoc_trim/256-04d.tga
+	textures/egyptsoc_trimd/128-04cr.tga
+	textures/egyptsoc_trimd/128-04dr.tga
+	textures/egyptsoc_trimd/s064-01ed.tga
+	textures/egyptsoc_trimd/s064-01er.tga
+	textures/egyptsoc_trimd/s064-01fd.tga
+	textures/egyptsoc_trimd/s064-01fr.tga
+	textures/egyptsoc_trimd/s064-02cd.tga
+	textures/egyptsoc_trimd/s064-02cr.tga
+	textures/egyptsoc_trimd/s064-02dd.tga
+	textures/egyptsoc_trimd/s064-02dr.tga
+	textures/egyptsoc_trimd/s064-03cd.tga
+	textures/egyptsoc_trimd/s064-03dd.tga
+	textures/egyptsoc_trimd/s064-04cd.tga
+	textures/egyptsoc_trimd/s064-04dd.tga
+	textures/egyptsoc_trimd/s128-01cd.tga
+	textures/egyptsoc_trimd/s128-01cr_glow.tga
+	textures/egyptsoc_trimd/s128-01cr.tga
+	textures/egyptsoc_trimd/s128-01dd.tga
+	textures/egyptsoc_trimd/s128-01dr_glow.tga
+	textures/egyptsoc_trimd/s128-01dr.tga
+	textures/egyptsoc_trimd/s128-02cd.tga
+	textures/egyptsoc_trimd/s128-02cr.tga
+	textures/egyptsoc_trimd/s128-02dd.tga
+	textures/egyptsoc_trimd/s128-02dr.tga
+	textures/egyptsoc_trimd/s128-04cd.tga
+	textures/egyptsoc_trimd/s128-04cr.tga
+	textures/egyptsoc_trimd/s128-04dd.tga
+	textures/egyptsoc_trimd/s128-04dr.tga
+	textures/egyptsoc_trimd/v064-01cd.tga
+	textures/egyptsoc_trimd/v064-01cr.tga
+	textures/egyptsoc_trimd/v064-01dd.tga
+	textures/egyptsoc_trimd/v064-01dr.tga
+	textures/egyptsoc_trimd/v064-02cd.tga
+	textures/egyptsoc_trimd/v064-02cr.tga
+	textures/egyptsoc_trimd/v064-02dd.tga
+	textures/egyptsoc_trimd/v064-02dr.tga
+	textures/egyptsoc_trimd/v064-03cd.tga
+	textures/egyptsoc_trimd/v064-03cr.tga
+	textures/egyptsoc_trimd/v064-03dd.tga
+	textures/egyptsoc_trimd/v064-03dr.tga
+	textures/egyptsoc_trimd/v128-01cd.tga
+	textures/egyptsoc_trimd/v128-01cr.tga
+	textures/egyptsoc_trimd/v128-01dd.tga
+	textures/egyptsoc_trimd/v128-01dr.tga
+	textures/egyptsoc_trimd/v128-02cd.tga
+	textures/egyptsoc_trimd/v128-02cr.tga
+	textures/egyptsoc_trimd/v128-02dd.tga
+	textures/egyptsoc_trimd/v128-02dr.tga
+	textures/egyptsoc_trimd/v128-03cd.tga
+	textures/egyptsoc_trimd/v128-03cr.tga
+	textures/egyptsoc_trimd/v128-03dd.tga
+	textures/egyptsoc_trimd/v128-03dr.tga
+	textures/egyptsoc_trimd/v128-03gd.tga
+	textures/egyptsoc_trimd/v128-04cd.tga
+	textures/egyptsoc_trimd/v128-04cr.tga
+	textures/egyptsoc_trimd/v128-04dd.tga
+	textures/egyptsoc_trimd/v128-04dr.tga
+	textures/egyptsoc_trimd/v128-04fd.tga
+	textures/egyptsoc_trimd/v128-04fr.tga
+	textures/egyptsoc_trimd/v128-04gr.tga
+	textures/egyptsoc_trim/lig_128-05a.tga
+	textures/egyptsoc_trim/lig_128-05b.tga
+	textures/egyptsoc_trim/s064-01a.tga
+	textures/egyptsoc_trim/s064-01b.tga
+	textures/egyptsoc_trim/s064-01c.tga
+	textures/egyptsoc_trim/s064-01d.tga
+	textures/egyptsoc_trim/s064-01e.tga
+	textures/egyptsoc_trim/s064-01f.tga
+	textures/egyptsoc_trim/s064-02a.tga
+	textures/egyptsoc_trim/s064-02b.tga
+	textures/egyptsoc_trim/s064-02c.tga
+	textures/egyptsoc_trim/s064-02d.tga
+	textures/egyptsoc_trim/s064-02e.tga
+	textures/egyptsoc_trim/s064-03a.tga
+	textures/egyptsoc_trim/s064-03b.tga
+	textures/egyptsoc_trim/s064-03c.tga
+	textures/egyptsoc_trim/s064-03d.tga
+	textures/egyptsoc_trim/s064-03e.tga
+	textures/egyptsoc_trim/s064-04a.tga
+	textures/egyptsoc_trim/s064-04b.tga
+	textures/egyptsoc_trim/s064-04c.tga
+	textures/egyptsoc_trim/s064-04d.tga
+	textures/egyptsoc_trim/s064-04e.tga
+	textures/egyptsoc_trim/s064-05a.tga
+	textures/egyptsoc_trim/s064-05b.tga
+	textures/egyptsoc_trim/s064-05c.tga
+	textures/egyptsoc_trim/s064-05d.tga
+	textures/egyptsoc_trim/s064-05e.tga
+	textures/egyptsoc_trim/s064-05f.tga
+	textures/egyptsoc_trim/s064-05g.tga
+	textures/egyptsoc_trim/s064-05h.tga
+	textures/egyptsoc_trim/s064-05i.tga
+	textures/egyptsoc_trim/s064-05j.tga
+	textures/egyptsoc_trim/s064-05k.tga
+	textures/egyptsoc_trim/s064-05l.tga
+	textures/egyptsoc_trim/s064-05m.tga
+	textures/egyptsoc_trim/s064-05n.tga
+	textures/egyptsoc_trim/s064-05o.tga
+	textures/egyptsoc_trim/s064-05p.tga
+	textures/egyptsoc_trim/s128-01a.tga
+	textures/egyptsoc_trim/s128-01b.tga
+	textures/egyptsoc_trim/s128-01c_glow.tga
+	textures/egyptsoc_trim/s128-01c.tga
+	textures/egyptsoc_trim/s128-01d_glow.tga
+	textures/egyptsoc_trim/s128-01d.tga
+	textures/egyptsoc_trim/s128-01e_glow.tga
+	textures/egyptsoc_trim/s128-01e.tga
+	textures/egyptsoc_trim/s128-02a.tga
+	textures/egyptsoc_trim/s128-02b.tga
+	textures/egyptsoc_trim/s128-02c.tga
+	textures/egyptsoc_trim/s128-02d.tga
+	textures/egyptsoc_trim/s128-02e.tga
+	textures/egyptsoc_trim/s128-04a.tga
+	textures/egyptsoc_trim/s128-04b.tga
+	textures/egyptsoc_trim/s128-04c.tga
+	textures/egyptsoc_trim/s128-04d.tga
+	textures/egyptsoc_trim/s128-04e.tga
+	textures/egyptsoc_trim/step01a.tga
+	textures/egyptsoc_trim/step01b.tga
+	textures/egyptsoc_trim/stepangle01a.tga
+	textures/egyptsoc_trim/stepangle01b.tga
+	textures/egyptsoc_trim/stepangle01c.tga
+	textures/egyptsoc_trim/stepangle01d.tga
+	textures/egyptsoc_trim/t064-01a.tga
+	textures/egyptsoc_trim/t064-01b.tga
+	textures/egyptsoc_trim/t064-02a.tga
+	textures/egyptsoc_trim/t064-02b.tga
+	textures/egyptsoc_trim/t064-02c.tga
+	textures/egyptsoc_trim/t064-02d.tga
+	textures/egyptsoc_trim/v064-01a.tga
+	textures/egyptsoc_trim/v064-01b.tga
+	textures/egyptsoc_trim/v064-01c.tga
+	textures/egyptsoc_trim/v064-01d.tga
+	textures/egyptsoc_trim/v064-01e.tga
+	textures/egyptsoc_trim/v064-02a.tga
+	textures/egyptsoc_trim/v064-02b.tga
+	textures/egyptsoc_trim/v064-02c.tga
+	textures/egyptsoc_trim/v064-02d.tga
+	textures/egyptsoc_trim/v064-02e.tga
+	textures/egyptsoc_trim/v064-03a.tga
+	textures/egyptsoc_trim/v064-03b.tga
+	textures/egyptsoc_trim/v064-03c.tga
+	textures/egyptsoc_trim/v064-03d.tga
+	textures/egyptsoc_trim/v064-03e.tga
+	textures/egyptsoc_trim/v096-01b.tga
+	textures/egyptsoc_trim/v096-01c.tga
+	textures/egyptsoc_trim/v128-01a.tga
+	textures/egyptsoc_trim/v128-01b.tga
+	textures/egyptsoc_trim/v128-01c.tga
+	textures/egyptsoc_trim/v128-01d.tga
+	textures/egyptsoc_trim/v128-01e.tga
+	textures/egyptsoc_trim/v128-02a.tga
+	textures/egyptsoc_trim/v128-02b.tga
+	textures/egyptsoc_trim/v128-02c.tga
+	textures/egyptsoc_trim/v128-02d.tga
+	textures/egyptsoc_trim/v128-02e.tga
+	textures/egyptsoc_trim/v128-03a.tga
+	textures/egyptsoc_trim/v128-03b.tga
+	textures/egyptsoc_trim/v128-03c.tga
+	textures/egyptsoc_trim/v128-03d.tga
+	textures/egyptsoc_trim/v128-03e.tga
+	textures/egyptsoc_trim/v128-03f.tga
+	textures/egyptsoc_trim/v128-03g.tga
+	textures/egyptsoc_trim/v128-04a.tga
+	textures/egyptsoc_trim/v128-04b.tga
+	textures/egyptsoc_trim/v128-04c.tga
+	textures/egyptsoc_trim/v128-04d.tga
+	textures/egyptsoc_trim/v128-04e.tga
+	textures/egyptsoc_trim/v128-04f.tga
+	textures/egyptsoc_trim/v128-04g.tga
+	textures/egyptsoc_wall/relief03a.tga
+	textures/egyptsoc_wall/relief03b.tga
+	textures/egyptsoc_wall/relief03c.tga
+	textures/egyptsoc_wall/relief03d.tga
+	textures/egyptsoc_wall/relief04a.tga
+	textures/egyptsoc_wall/relief04b.tga
+	textures/egyptsoc_wall/relief04c.tga
+	textures/egyptsoc_wall/relief04d.tga
+	textures/egyptsoc_wall/stone01a.tga
+	textures/egyptsoc_wall/stone01b.tga
+	textures/egyptsoc_wall/stone01c.tga
+	textures/egyptsoc_wall/stone01d.tga
+	textures/egyptsoc_wall/stone02a.tga
+	textures/egyptsoc_wall/stone02b.tga
+	textures/egyptsoc_wall/stone02c.tga
+	textures/egyptsoc_wall/stone02d.tga
+	textures/egyptsoc_wall/stone03a.tga
+	textures/egyptsoc_wall/stone03b.tga
+	textures/egyptsoc_wall/stone03c.tga
+	textures/egyptsoc_wall/stone03d.tga
+	textures/egyptsoc_wall/stone04a.tga
+	textures/egyptsoc_wall/stone04b.tga
+	textures/egyptsoc_wall/stone04c.tga
+	textures/egyptsoc_wall/stone04d.tga
+	textures/egyptsoc_wall/stone05a.tga
+	textures/egyptsoc_wall/stone05b.tga
+	textures/egyptsoc_wall/stone06a.tga
+	textures/egyptsoc_wall/stone06b.tga
+	textures/egyptsoc_wall/stone06e.tga
+	textures/egyptsoc_wall/stone07a.tga
+	textures/egyptsoc_wall/stone07b.tga
+	textures/egyptsoc_wall/stone07c.tga
+	textures/egyptsoc_wall/stone07d.tga
+	textures/egyptsoc_wall/stone08a.tga
+	textures/egyptsoc_wall/stone08b.tga
+	textures/egyptsoc_wall/stone08c.tga
+	textures/egyptsoc_wall/stone08d.tga
+	textures/egyptsoc_wall/stone09a.tga
+	textures/egyptsoc_wall/stone09b.tga
+	textures/egyptsoc_wall/stone09c.tga
+	textures/egyptsoc_wall/stone09d.tga
+	textures/egyptsoc_wall/stone10a.tga
+	textures/egyptsoc_wall/stone10b.tga
+	textures/egyptsoc_wall/stone10c.tga
+	textures/egyptsoc_wall/stone10d.tga
+	textures/egyptsoc_wall/stone11a.tga
+	textures/egyptsoc_wall/stone11b.tga
+	textures/egyptsoc_wall/stone11c.tga
+	textures/egyptsoc_wall/stone11d.tga
 	textures/flags/flag_blue_cloth.tga
 	textures/flags/flag_blue_gloss.tga
 	textures/flags/flag_blue_glow.tga

Modified: branches/nexuiz-2.0/data/defaultNexuiz.cfg
===================================================================
--- branches/nexuiz-2.0/data/defaultNexuiz.cfg	2009-01-29 12:14:47 UTC (rev 5692)
+++ branches/nexuiz-2.0/data/defaultNexuiz.cfg	2009-01-29 12:15:06 UTC (rev 5693)
@@ -28,7 +28,7 @@
 seta g_configversion 0
 
 // default.cfg versioning (update using update-cvarcount.sh, run that every time after adding a new cvar)
-set cvar_check_default a53e77007f17570086417cc970eacf6e
+set cvar_check_default dd56b80c75377e60d4784f49fe91c8a8
 
 // Nexuiz version (formatted for machines)
 // used to determine if a client version is compatible
@@ -101,28 +101,28 @@
 seta crosshair_color_override 0	"when 1, crosshair_color_* overrides the per-weapon color"
 seta crosshair_laser ""
 seta crosshair_laser_color_red 1
-seta crosshair_laser_color_green 0.65
+seta crosshair_laser_color_green 0.35
 seta crosshair_laser_color_blue 0.2
 seta crosshair_laser_color_alpha 0.75
-seta crosshair_laser_size 1
+seta crosshair_laser_size 0.55
 seta crosshair_shotgun ""
 seta crosshair_shotgun_color_red 0.75
 seta crosshair_shotgun_color_green 0.75
 seta crosshair_shotgun_color_blue 0.75
 seta crosshair_shotgun_color_alpha 1
-seta crosshair_shotgun_size 1
+seta crosshair_shotgun_size 1.1
 seta crosshair_uzi ""
 seta crosshair_uzi_color_red 1
 seta crosshair_uzi_color_green 1
-seta crosshair_uzi_color_blue 0.2
+seta crosshair_uzi_color_blue 0.75
 seta crosshair_uzi_color_alpha 1
-seta crosshair_uzi_size 1
+seta crosshair_uzi_size 1.15
 seta crosshair_grenadelauncher ""
 seta crosshair_grenadelauncher_color_red 1
-seta crosshair_grenadelauncher_color_green 0.2
-seta crosshair_grenadelauncher_color_blue 0.2
+seta crosshair_grenadelauncher_color_green 0.5
+seta crosshair_grenadelauncher_color_blue 0.5
 seta crosshair_grenadelauncher_color_alpha 1
-seta crosshair_grenadelauncher_size 1
+seta crosshair_grenadelauncher_size 1.35
 seta crosshair_electro ""
 seta crosshair_electro_color_red 0.35
 seta crosshair_electro_color_green 0.5
@@ -134,25 +134,25 @@
 seta crosshair_crylink_color_green 0.25
 seta crosshair_crylink_color_blue 1
 seta crosshair_crylink_color_alpha 0.85
-seta crosshair_crylink_size 1
+seta crosshair_crylink_size 0.75
 seta crosshair_nex ""
 seta crosshair_nex_color_red 0
 seta crosshair_nex_color_green 1
 seta crosshair_nex_color_blue 1
 seta crosshair_nex_color_alpha 0.85
-seta crosshair_nex_size 1
+seta crosshair_nex_size 0.65
 seta crosshair_hagar ""
 seta crosshair_hagar_color_red 1
 seta crosshair_hagar_color_green 0.75
 seta crosshair_hagar_color_blue 0.5
 seta crosshair_hagar_color_alpha 1
-seta crosshair_hagar_size 1
+seta crosshair_hagar_size 1.35
 seta crosshair_rocketlauncher ""
 seta crosshair_rocketlauncher_color_red 1
 seta crosshair_rocketlauncher_color_green 0.85
 seta crosshair_rocketlauncher_color_blue 0.2
 seta crosshair_rocketlauncher_color_alpha 1
-seta crosshair_rocketlauncher_size 1
+seta crosshair_rocketlauncher_size 1.15
 seta crosshair_porto ""
 seta crosshair_porto_color_red 0.5
 seta crosshair_porto_color_green 1
@@ -164,7 +164,7 @@
 seta crosshair_minstanex_color_green 0.65
 seta crosshair_minstanex_color_blue 1
 seta crosshair_minstanex_color_alpha 1
-seta crosshair_minstanex_size 1
+seta crosshair_minstanex_size 0.65
 seta crosshair_hook ""
 seta crosshair_hook_color_red 0.65
 seta crosshair_hook_color_green 1
@@ -176,13 +176,13 @@
 seta crosshair_hlac_color_green 0.65
 seta crosshair_hlac_color_blue 0.2
 seta crosshair_hlac_color_alpha 1
-seta crosshair_hlac_size 1
+seta crosshair_hlac_size 2
 seta crosshair_seeker ""
 seta crosshair_seeker_color_red 1
 seta crosshair_seeker_color_green 0.35
 seta crosshair_seeker_color_blue 0.35
 seta crosshair_seeker_color_alpha 0.9
-seta crosshair_seeker_size 1
+seta crosshair_seeker_size 2
 seta crosshair_campingrifle ""
 seta crosshair_campingrifle_color_red 1
 seta crosshair_campingrifle_color_green 1
@@ -970,7 +970,6 @@
 seta g_maplist_votable_nodetail 1	"nodetail only shows total count instead of all vote counts per map, so votes don't influence others that much"
 seta g_maplist_votable_abstain 0	"when 1, you can abstain from your vote"
 seta g_maplist_votable_screenshot_dir "maps"	"where to look for map screenshots"
-seta g_maplist_textonly 0	"use old style centerprint"
 alias suggestmap "cmd suggestmap $1"
 
 set g_chat_flood_spl 3	"normal chat: seconds between lines to not count as flooding"
@@ -1427,3 +1426,5 @@
 // "Gentle mode": show no blood
 seta sv_gentle 0	"force gentle mode for everyone, also remove references to acts of killing from the messages"
 seta cl_gentle 0	"client side gentle mode (only replaces gibs)"
+
+seta sbar_increment_maptime 0 // set to 1 if you prefer an increasing timer

Modified: branches/nexuiz-2.0/data/effectinfo.txt
===================================================================
--- branches/nexuiz-2.0/data/effectinfo.txt	2009-01-29 12:14:47 UTC (rev 5692)
+++ branches/nexuiz-2.0/data/effectinfo.txt	2009-01-29 12:15:06 UTC (rev 5693)
@@ -2363,53 +2363,88 @@
 // impact effect indicating damage
 // used in qcsrc/server/cl_player.qc:		pointparticles(particleeffectnum("damage_hit"), hitloc, force, bound(0, damage, 200))
 effect damage_hit
+tex 48 55
 count 1
-type static
-color 0x20FF30 0x80FFC0
-size 1 1
-sizeincrease 5
-alpha 256 256 256
+type alphastatic
+color 0x00FFFF 0xFF00FF
+size 16 16
+sizeincrease -24
+alpha 128 128 192
 gravity -0.4
 bounce 1.5
-airfriction 8
-liquidfriction 16
-//velocityoffset 0 0 120
-velocityjitter 128 128 128
+airfriction 5
+liquidfriction 10
+velocityjitter 256 256 256
+effect damage_hit
+tex 48 55
+count 1
+type alphastatic
+color 0xFF00FF 0xFFFF00
+size 16 16
+sizeincrease -24
+alpha 128 128 192
+gravity -0.4
+bounce 1.5
+airfriction 5
+liquidfriction 10
+velocityjitter 256 256 256
+effect damage_hit
+tex 48 55
+count 1
+type alphastatic
+color 0xFFFF00 0x00FFFF
+size 16 16
+sizeincrease -24
+alpha 128 128 192
+gravity -0.4
+bounce 1.5
+airfriction 5
+liquidfriction 10
+velocityjitter 256 256 256
 
 // effect for removing player model
 // "teleport"
 // used in qcsrc/server/cl_player.qc:			pointparticles(particleeffectnum("damage_dissolve"), self.origin, force, 1)
+
+// large sparks
 effect damage_dissolve
-count 96
-type static
-color 0x66FF66 0xFFFFFF
-size 10 10
-alpha 64 128 128
-airfriction 1
-liquidfriction 4
-originoffset 0 0 28
-originjitter 16 16 28
-velocityjitter 0 0 256
-// flare
+tex 48 55
+count 30
+type alphastatic
+color 0x00FFFF 0xFF00FF
+size 32 32
+sizeincrease -16
+alpha 256 256 128
+gravity -0.4
+bounce 1.5
+airfriction 3
+liquidfriction 6
+velocityjitter 512 512 512
 effect damage_dissolve
-countabsolute 1
-type static
-tex 38 38
-color 0x00FF00 0x99FF99
+tex 48 55
+count 30
+type alphastatic
+color 0xFF00FF 0xFFFF00
 size 32 32
-alpha 256 256 196
-// large sparks
+sizeincrease -16
+alpha 256 256 128
+gravity -0.4
+bounce 1.5
+airfriction 3
+liquidfriction 6
+velocityjitter 512 512 512
 effect damage_dissolve
-count 20
-type static
-color 0x00FF00 0x99FF99
-size 16 16
-alpha 256 256 256
-//gravity 1
+tex 48 55
+count 30
+type alphastatic
+color 0xFFFF00 0x00FFFF
+size 32 32
+sizeincrease -16
+alpha 256 256 128
+gravity -0.4
 bounce 1.5
-airfriction 4
-liquidfriction 16
-//velocityoffset 0 0 120
+airfriction 3
+liquidfriction 6
 velocityjitter 512 512 512
 
 // decal

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

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

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

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

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

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

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

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

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

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

Modified: branches/nexuiz-2.0/data/qcsrc/client/Defs.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/client/Defs.qc	2009-01-29 12:14:47 UTC (rev 5692)
+++ branches/nexuiz-2.0/data/qcsrc/client/Defs.qc	2009-01-29 12:15:06 UTC (rev 5693)
@@ -174,7 +174,6 @@
 .float team_size;
 
 float vid_conwidth, vid_conheight;
-float configdb;
 float binddb;
 
 // QUALIFYING
@@ -221,3 +220,7 @@
 
 .float damageforcescale;
 .void(float thisdmg, float hittype, vector org, vector thisforce) event_damage;
+
+// only for Porto
+float angles_held_status;
+vector angles_held;

Modified: branches/nexuiz-2.0/data/qcsrc/client/Main.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/client/Main.qc	2009-01-29 12:14:47 UTC (rev 5692)
+++ branches/nexuiz-2.0/data/qcsrc/client/Main.qc	2009-01-29 12:15:06 UTC (rev 5693)
@@ -41,16 +41,6 @@
 float __engine_check;
 #endif
 
-string config_get(string key, string defaultvalue)
-{
-	string s;
-	s = db_get(configdb, strcat("/s/", key));
-	if(s == "")
-		return defaultvalue;
-	else
-		return db_get(configdb, strcat("/v/", key));
-}
-
 string forcefog;
 void WaypointSprite_Load();
 void CSQC_Init(void)
@@ -71,7 +61,6 @@
 	CSQC_CheckEngine();
 	dprint_load();
 
-	configdb = db_create();
 	binddb = db_create();
 	tempdb = db_create();
 	compressShortVector_init();
@@ -138,6 +127,24 @@
 	GibSplash_Precache();
 	Casings_Precache();
 	DamageInfo_Precache();
+
+	get_mi_min_max_texcoords(1); // try the CLEVER way first
+	minimapname = strcat("gfx/", mi_shortname, "_radar.tga");
+	shortmapname = mi_shortname;
+
+	if(precache_pic(minimapname) == "")
+	{
+		// but maybe we have a non-clever minimap
+		minimapname = strcat("gfx/", mi_shortname, "_mini.tga");
+		if(precache_pic(minimapname) == "")
+			minimapname = ""; // FAIL
+		else
+			get_mi_min_max_texcoords(0); // load new texcoords
+	}
+
+	mi_center = (mi_min + mi_max) * 0.5;
+	mi_scale = mi_max - mi_min;
+	minimapname = strzone(minimapname);
 }
 
 // CSQC_Shutdown : Called every time the CSQC code is shutdown (changing maps, quitting, etc)
@@ -152,7 +159,6 @@
 
 	remove(teams);
 	remove(players);
-	db_close(configdb);
 	db_close(binddb);
 	db_close(tempdb);
 
@@ -375,10 +381,6 @@
 	InterpolateOrigin_Note();
 }
 
-void Ent_RemoveEntCS()
-{
-}
-
 void Ent_Remove();
 void Ent_ReadPlayerScore()
 {
@@ -460,6 +462,47 @@
 	Sbar_UpdateTeamPos(o);
 }
 
+void Net_Reset()
+{
+}
+
+void Ent_ClientData()
+{
+	float f;
+	float newspectatee_status;
+
+	f = ReadByte();
+
+	sb_showscores_force = (f & 1);
+
+	if(f & 2)
+	{
+		newspectatee_status = ReadByte();
+		if(newspectatee_status == player_localentnum)
+			newspectatee_status = -1; // observing
+	}
+	else
+		newspectatee_status = 0;
+
+	spectatorbutton_zoom = (f & 4);
+
+	if(f & 8)
+	{
+		angles_held_status = 1;
+		angles_held_x = ReadAngle();
+		angles_held_y = ReadAngle();
+		angles_held_z = 0;
+	}
+	
+	if(newspectatee_status != spectatee_status)
+	{
+		// clear race stuff
+		race_laptime = 0;
+		race_checkpointtime = 0;
+	}
+	spectatee_status = newspectatee_status;
+}
+
 void Ent_Nagger()
 {
 	float nags;
@@ -477,11 +520,14 @@
 	ready_waiting_for_me = (nags & 2);
 	vote_waiting = (nags & 4);
 	vote_waiting_for_me = (nags & 8);
+	warmup_stage = (nags & 16);
 }
 
 // CSQC_Ent_Update : Called every frame that the server has indicated an update to the SSQC / CSQC entity has occured.
 // The only parameter reflects if the entity is "new" to the client, meaning it just came into the client's PVS.
 void Ent_RadarLink();
+void Ent_Init();
+void Ent_ScoresInfo();
 void(float bIsNewEntity) CSQC_Ent_Update =
 {
 	float t;
@@ -528,6 +574,14 @@
 		Ent_DamageInfo();
 	else if(self.enttype == ENT_CLIENT_CASING)
 		Ent_Casing();
+	else if(self.enttype == ENT_CLIENT_INIT)
+		Ent_Init();
+	else if(self.enttype == ENT_CLIENT_SCORES_INFO)
+		Ent_ScoresInfo();
+	else if(self.enttype == ENT_CLIENT_MAPVOTE)
+		Ent_MapVote();
+	else if(self.enttype == ENT_CLIENT_CLIENTDATA)
+		Ent_ClientData();
 	else
 		error(strcat("unknown entity type in CSQC_Ent_Update: ", ftos(self.enttype), "\n"));
 	
@@ -539,11 +593,8 @@
 void Ent_Remove()
 {
 	float i;
-	if(self.enttype == ENT_CLIENT_ENTCS)
+	if(self.enttype == ENT_CLIENT_SCORES)
 	{
-		Ent_RemoveEntCS();
-	} else if(self.enttype == ENT_CLIENT_SCORES)
-	{
 		if(self.owner)
 		{
 			SetTeam(self.owner, -1);
@@ -583,24 +634,6 @@
 
 void Gamemode_Init()
 {
-	get_mi_min_max_texcoords(1); // try the CLEVER way first
-	minimapname = strcat("gfx/", mi_shortname, "_radar.tga");
-	shortmapname = mi_shortname;
-
-	if(precache_pic(minimapname) == "")
-	{
-		// but maybe we have a non-clever minimap
-		minimapname = strcat("gfx/", mi_shortname, "_mini.tga");
-		if(precache_pic(minimapname) == "")
-			minimapname = ""; // FAIL
-		else
-			get_mi_min_max_texcoords(0); // load new texcoords
-	}
-
-	mi_center = (mi_min + mi_max) * 0.5;
-	mi_scale = mi_max - mi_min;
-	minimapname = strzone(minimapname);
-
 	if(gametype == GAME_ONSLAUGHT) {
 		print(strcat("Using ", minimapname, " as minimap.\n"));
 		precache_pic("gfx/ons-cp-neutral.tga");
@@ -639,18 +672,11 @@
 		localcmd(strcat("\nfog ", forcefog, "\nr_fog_exp2 0\nr_drawfog 1\n"));
 }
 
-void Net_ReadFog()
-{
-	if(forcefog)
-		strunzone(forcefog);
-	ReadCoord(); // ignore fog interval
-	forcefog = strzone(ReadString());
-}
-
 void Gamemode_Init();
-void Net_ReadScoresInfo()
+void Ent_ScoresInfo()
 {
 	float i;
+	self.classname = "ent_client_scores_info";
 	gametype = ReadByte();
 	for(i = 0; i < MAX_SCORE; ++i)
 	{
@@ -666,17 +692,27 @@
 	Gamemode_Init();
 }
 
-void Net_ReadInit()
+void Ent_Init()
 {
 	float i;
+	self.classname = "ent_client_init";
+
 	csqc_revision = ReadShort();
+
 	maxclients = ReadByte();
 	for(i = 0; i < 24; ++i)
 		weaponimpulse[i] = ReadByte() - 1;
 	hook_shotorigin_x = ReadCoord();
 	hook_shotorigin_y = ReadCoord();
 	hook_shotorigin_z = ReadCoord();
+
+	if(forcefog)
+		strunzone(forcefog);
+	forcefog = strzone(ReadString());
+
 	CSQC_CheckRevision();
+	if(!postinit)
+		PostInit();
 }
 
 string Net_ReadPicture()
@@ -700,15 +736,6 @@
 	return img;
 }
 
-void Net_Config()
-{
-	string key, value;
-	key = ReadString();
-	value = ReadString();
-	db_put(configdb, strcat("/v/", key), value);
-	db_put(configdb, strcat("/s/", key), "1");
-}
-
 void Net_ReadRace()
 {
 	float b;
@@ -776,51 +803,15 @@
 	}
 }
 
-void Net_ReadForceScoreboard()
-{
-	sb_showscores_force = ReadByte();
-}
-
-void Net_Reset()
-{
-	float i;
-	race_laptime = 0;
-	race_checkpointtime = 0;
-	for(i = 0; i < 24; ++i)
-		angles_held_status[i] = 0;
-}
-
-void Net_ReadSpectating()
-{
-	float newspectatee_status;
-	newspectatee_status = ReadByte();
-	if(newspectatee_status == player_localentnum)
-		newspectatee_status = -1; // observing
-	if(newspectatee_status != spectatee_status)
-		Net_Reset();
-	spectatee_status = newspectatee_status;
-}
-
-void Net_ReadZoomNotify()
-{
-	spectatorbutton_zoom = ReadByte();
-}
-
 void Net_ReadSpawn()
 {
 	zoomin_effect = 1;
 	current_viewzoom = 0.6;
 }
 
-void Net_ReadWarmupStage()
-{
-	warmup_stage = ReadByte();
-}
-
 // CSQC_Parse_TempEntity : Handles all temporary entity network data in the CSQC layer.
 // You must ALWAYS first acquire the temporary ID, which is sent as a byte.
 // Return value should be 1 if CSQC handled the temporary entity, otherwise return 0 to have the engine process the event.
-void Net_ReadHoldAngles();
 float CSQC_Parse_TempEntity()
 {
 	local float bHandled;
@@ -832,34 +823,14 @@
 		// NOTE: Could just do return instead of break...
 	switch(nTEID)
 	{
-		case TE_CSQC_INIT:
-			Net_ReadInit();
+		case TE_CSQC_PICTURE:
+			Net_MapVote_Picture();
 			bHandled = true;
 			break;
-		case TE_CSQC_MAPVOTE:
-			Net_Mapvote();
-			bHandled = true;
-			break;
-		case TE_CSQC_CONFIG:
-			Net_Config();
-			bHandled = true;
-			break;
-		case TE_CSQC_SCORESINFO:
-			Net_ReadScoresInfo();
-			bHandled = true;
-			break;
 		case TE_CSQC_RACE:
 			Net_ReadRace();
 			bHandled = true;
 			break;
-		case TE_CSQC_FORCESCOREBOARD:
-			Net_ReadForceScoreboard();
-			bHandled = true;
-			break;
-		case TE_CSQC_SPECTATING:
-			Net_ReadSpectating();
-			bHandled = true;
-			break;
 		case 13: // TE_BEAM
 			Net_GrapplingHook();
 			bHandled = true;
@@ -868,30 +839,11 @@
 			Net_ReadSpawn();
 			bHandled = true;
 			break;
-		case TE_CSQC_ZOOMNOTIFY:
-			Net_ReadZoomNotify();
-			bHandled = true;
-			break;
-		case TE_CSQC_HOLDANGLES:
-			Net_ReadHoldAngles();
-			bHandled = true;
-			break;
-		case TE_CSQC_WARMUP:
-			Net_ReadWarmupStage();
-			bHandled = true;
-			break;
-		case TE_CSQC_FOG:
-			Net_ReadFog();
-			bHandled = true;
-			break;
 		default:
 			// No special logic for this temporary entity; return 0 so the engine can handle it
 			bHandled = false;
 			break;
 	}
-	
-	if(!postinit)
-		PostInit();
 		
 	return bHandled;
 }

Modified: branches/nexuiz-2.0/data/qcsrc/client/View.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/client/View.qc	2009-01-29 12:14:47 UTC (rev 5692)
+++ branches/nexuiz-2.0/data/qcsrc/client/View.qc	2009-01-29 12:15:06 UTC (rev 5693)
@@ -1,20 +1,3 @@
-vector angles_held[24];
-void Net_ReadHoldAngles()
-{
-	float wpn;
-	vector v;
-	wpn = ReadByte();
-	--wpn;
-	angles_held_status[wpn] = ReadByte();
-	if(angles_held_status[wpn])
-	{
-		v_x = ReadAngle();
-		v_y = ReadAngle();
-		v_z = 0;
-		angles_held[wpn] = v;
-	}
-}
-
 entity porto;
 vector polyline[16];
 float trace_dphitcontents;
@@ -30,9 +13,9 @@
 
 	dir = view_forward;
 
-	if(angles_held_status[WEP_PORTO-1])
+	if(angles_held_status)
 	{
-		makevectors(angles_held[WEP_PORTO-1]);
+		makevectors(angles_held);
 		dir = v_forward;
 	}
 

Modified: branches/nexuiz-2.0/data/qcsrc/client/casings.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/client/casings.qc	2009-01-29 12:14:47 UTC (rev 5692)
+++ branches/nexuiz-2.0/data/qcsrc/client/casings.qc	2009-01-29 12:15:06 UTC (rev 5693)
@@ -35,7 +35,7 @@
 				string s;
 				float f;
 
-				f = floor(random() * 3) + 1;
+				f = floor(prandom() * 3) + 1;
 				switch(self.state)
 				{
 					case 1:

Modified: branches/nexuiz-2.0/data/qcsrc/client/damage.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/client/damage.qc	2009-01-29 12:14:47 UTC (rev 5692)
+++ branches/nexuiz-2.0/data/qcsrc/client/damage.qc	2009-01-29 12:15:06 UTC (rev 5693)
@@ -67,7 +67,7 @@
 		secondary = hittype & HITTYPE_SECONDARY;
 		bounce = hittype & HITTYPE_BOUNCE;
 		headshot = hittype & HITTYPE_HEADSHOT;
-		r = random();
+		r = prandom();
 
 		traceline(org - normalize(force) * 16, org + normalize(force) * 16, MOVE_NOMONSTERS, world);
 		if(trace_fraction < 1)

Modified: branches/nexuiz-2.0/data/qcsrc/client/gibs.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/client/gibs.qc	2009-01-29 12:14:47 UTC (rev 5692)
+++ branches/nexuiz-2.0/data/qcsrc/client/gibs.qc	2009-01-29 12:15:06 UTC (rev 5693)
@@ -14,7 +14,7 @@
 		return;
 	}
 	
-	sound(self, CHAN_PAIN, strcat("misc/gib_splat0", ftos(floor(random() * 4 + 1)), ".wav"), VOL_BASE, ATTN_NORM);
+	sound(self, CHAN_PAIN, strcat("misc/gib_splat0", ftos(floor(prandom() * 4 + 1)), ".wav"), VOL_BASE, ATTN_NORM);
 	pointparticles(particleeffectnum("blood"), self.origin + '0 0 1', '0 0 30', 10);
 
 	remove(self);
@@ -69,7 +69,7 @@
 	gib.move_time = time;
 	gib.damageforcescale = 3.5;
 
-	gib.nextthink = time + 12 + random () * 4;
+	gib.nextthink = time + 12 + prandom () * 4;
 }
 
 void Ent_GibSplash()
@@ -107,37 +107,37 @@
 		case 0x01:
 			sound (self, CHAN_PAIN, "misc/gib.wav", VOL_BASE, ATTN_NORM);
 
-			if(random() < amount)
+			if(prandom() < amount)
 				TossGib("models/gibs/eye.md3", org, vel + randomvec() * 150, 0);
 			te_bloodshower(org + mi, org + ma, 1200, 1000 * amount);
-			if(random() < amount)
+			if(prandom() < amount)
 				TossGib("models/gibs/bloodyskull.md3", org, vel + randomvec() * 100, 0);
 
 			for(c = 0; c < amount; ++c)
 			{
 				randomvalue = amount - c;
 					
-				if(random() < randomvalue)
-					TossGib ("models/gibs/arm.md3", org, vel + randomvec() * (random() * 120 + 90),0);
-				if(random() < randomvalue)
-					TossGib ("models/gibs/arm.md3", org, vel + randomvec() * (random() * 120 + 90),0);
-				if(random() < randomvalue)
-					TossGib ("models/gibs/chest.md3", org + '0 0 -12', vel + randomvec() * (random() * 120 + 80),0);
-				if(random() < randomvalue)
-					TossGib ("models/gibs/smallchest.md3", org, vel + randomvec() * (random() * 120 + 80),0);
-				if(random() < randomvalue)
-					TossGib ("models/gibs/leg1.md3", org + '0 0 -5', vel + randomvec() * (random() * 120 + 85),0);
-				if(random() < randomvalue)
-					TossGib ("models/gibs/leg2.md3", org + '0 0 -9', vel + randomvec() * (random() * 120 + 85),0);
+				if(prandom() < randomvalue)
+					TossGib ("models/gibs/arm.md3", org, vel + randomvec() * (prandom() * 120 + 90),0);
+				if(prandom() < randomvalue)
+					TossGib ("models/gibs/arm.md3", org, vel + randomvec() * (prandom() * 120 + 90),0);
+				if(prandom() < randomvalue)
+					TossGib ("models/gibs/chest.md3", org + '0 0 -12', vel + randomvec() * (prandom() * 120 + 80),0);
+				if(prandom() < randomvalue)
+					TossGib ("models/gibs/smallchest.md3", org, vel + randomvec() * (prandom() * 120 + 80),0);
+				if(prandom() < randomvalue)
+					TossGib ("models/gibs/leg1.md3", org + '0 0 -5', vel + randomvec() * (prandom() * 120 + 85),0);
+				if(prandom() < randomvalue)
+					TossGib ("models/gibs/leg2.md3", org + '0 0 -9', vel + randomvec() * (prandom() * 120 + 85),0);
 
 				// these splat on impact
-				if(random() < randomvalue)
+				if(prandom() < randomvalue)
 					TossGib ("models/gibs/chunk.mdl", org, vel + randomvec() * 450,1);
-				if(random() < randomvalue)
+				if(prandom() < randomvalue)
 					TossGib ("models/gibs/chunk.mdl", org, vel + randomvec() * 450,1);
-				if(random() < randomvalue)
+				if(prandom() < randomvalue)
 					TossGib ("models/gibs/chunk.mdl", org, vel + randomvec() * 450,1);
-				if(random() < randomvalue)
+				if(prandom() < randomvalue)
 					TossGib ("models/gibs/chunk.mdl", org, vel + randomvec() * 450,1);
 			}
 			break;
@@ -145,7 +145,7 @@
 			pointparticles(particleeffectnum("blood"), org, vel, amount * 16);
 			break;
 		case 0x03:
-			if(random() < amount)
+			if(prandom() < amount)
 				TossGib ("models/gibs/chunk.mdl", org, vel, 1);
 			break;
 		case 0x81:

Modified: branches/nexuiz-2.0/data/qcsrc/client/main.qh
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/client/main.qh	2009-01-29 12:14:47 UTC (rev 5692)
+++ branches/nexuiz-2.0/data/qcsrc/client/main.qh	2009-01-29 12:15:06 UTC (rev 5693)
@@ -103,8 +103,6 @@
 #define CSQC_FLAG_READPICTURE 1
 #define CSQC_FLAG_COLORCODES 2
 
-string config_get(string key, string defaultvalue);
-
 entity playerslots[255]; // 255 is engine limit on maxclients
 entity teamslots[17];    // 17 teams (including "spectator team")
 .float gotscores;
@@ -126,7 +124,6 @@
 float warmup_stage;
 
 float weaponimpulse[24];
-float angles_held_status[24];
 string getcommandkey(string text, string command);
 float sbar_showbinds;
 float sbar_showbinds_limit;

Modified: branches/nexuiz-2.0/data/qcsrc/client/mapvoting.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/client/mapvoting.qc	2009-01-29 12:14:47 UTC (rev 5692)
+++ branches/nexuiz-2.0/data/qcsrc/client/mapvoting.qc	2009-01-29 12:15:06 UTC (rev 5693)
@@ -1,5 +1,6 @@
 float mv_num_maps;
 
+float mv_active;
 string mv_maps[MAPVOTE_COUNT];
 string mv_pics[MAPVOTE_COUNT];
 string mv_pk3[MAPVOTE_COUNT];
@@ -10,6 +11,7 @@
 float mv_ownvote;
 float mv_detail;
 float mv_timeout;
+float mv_maps_mask;
 
 string MapVote_FormatMapItem(float id, string map, float count, float maxwidth)
 {
@@ -116,6 +118,9 @@
 	float columns, rows;
 	float tsize;
 	vector dist;
+
+	if(!mv_active)
+		return;
 	
 	center = (vid_conwidth - 1)/2;
 	xmin = vid_conwidth*0.05; // 5% border must suffice
@@ -258,11 +263,15 @@
 
 void MapVote_Init()
 {
-	float i, power, m;
-	string map, pk3;
+	float i, power;
+	string map, pk3, ssdir;
 
 	registercmd("+showscores");
 	registercmd("-showscores");
+
+	mv_active = 1;
+
+	ssdir = ReadString();
 	
 	mv_num_maps = min(MAPVOTE_COUNT, ReadByte());
 	mv_abstain = ReadByte();
@@ -274,9 +283,9 @@
 	mv_timeout = ReadCoord();
 
 	if(mv_num_maps <= 8)
-		m = ReadByte();
+		mv_maps_mask = ReadByte();
 	else
-		m = ReadShort();
+		mv_maps_mask = ReadShort();
 	
 	// Assume mv_pk3list is NULL, there should only be 1 mapvote per round
 	mv_pk3list = NULL; // I'm still paranoid!
@@ -285,13 +294,13 @@
 	{
 		mv_votes[i] = 0;
 
-		if(m & power)
+		if(mv_maps_mask & power)
 		{
 			map = strzone(ReadString());
 			pk3 = strzone(ReadString());
 			mv_maps[i] = map;
 			mv_pk3[i] = pk3;
-			map = strzone(strcat(config_get("mv_screenshot_dir", "maps"), "/", map));
+			map = strzone(strcat(ssdir, "/", map));
 			mv_pics[i] = map;
 
 			mv_preview[i] = false;
@@ -307,19 +316,25 @@
 			mv_preview[i] = false;
 		}
 	}
+
+	// do we NEED this, or can we handle key presses directly in CSQC?
+	localcmd("\nin_bind 7 1 \"impulse 1\"; in_bind 7 2 \"impulse 2\"; in_bind 7 3 \"impulse 3\"; in_bind 7 4 \"impulse 4\"; in_bind 7 5 \"impulse 5\"; in_bind 7 6 \"impulse 6\"; in_bind 7 7 \"impulse 7\"; in_bind 7 8 \"impulse 8\"; in_bind 7 9 \"impulse 9\"; in_bind 7 0 \"impulse 10\"; in_bind 7 KP_1 \"impulse 1\"; in_bind 7 KP_2 \"impulse 2\"; in_bind 7 KP_3 \"impulse 3\"; in_bind 7 KP_4 \"impulse 4\"; in_bind 7 KP_5 \"impulse 5\"; in_bind 7 KP_6 \"impulse 6\"; in_bind 7 KP_7 \"impulse 7\"; in_bind 7 KP_8 \"impulse 8\"; in_bind 7 KP_9 \"impulse 9\"; in_bind 7 KP_0 \"impulse 10\"; in_bindmap 7 0\n");
 }
 
-void MapVote_Update()
+void MapVote_UpdateMask()
 {
-	float i, power;
-	float m;
 	if(mv_num_maps <= 8)
-		m = ReadByte();
+		mv_maps_mask = ReadByte();
 	else
-		m = ReadShort();
+		mv_maps_mask = ReadShort();
+}
+
+void MapVote_UpdateVotes()
+{
+	float i, power;
 	for(i = 0, power = 1; i < mv_num_maps; ++i, power *= 2)
 	{
-		if(m & power)
+		if(mv_maps_mask & power)
 		{
 			if(mv_detail)
 				mv_votes[i] = ReadByte();
@@ -329,30 +344,31 @@
 		else
 			mv_votes[i] = -1;
 	}
+
+	mv_ownvote = ReadByte()-1;
 }
 
+void Ent_MapVote()
+{
+	float sf;
+
+	sf = ReadByte();
+
+	if(sf & 1)
+		MapVote_Init();
+
+	if(sf & 2)
+		MapVote_UpdateMask();
+
+	if(sf & 4)
+		MapVote_UpdateVotes();
+}
+
 string Net_ReadPicture();
-void Net_Mapvote()
+void Net_MapVote_Picture()
 {
 	float type;
 	type = ReadByte();
-	switch(type)
-	{
-	case MAPVOTE_NET_INIT:
-		MapVote_Init();
-		// do we NEED this, or can we handle key presses directly in CSQC?
-		localcmd("\nin_bind 7 1 \"impulse 1\"; in_bind 7 2 \"impulse 2\"; in_bind 7 3 \"impulse 3\"; in_bind 7 4 \"impulse 4\"; in_bind 7 5 \"impulse 5\"; in_bind 7 6 \"impulse 6\"; in_bind 7 7 \"impulse 7\"; in_bind 7 8 \"impulse 8\"; in_bind 7 9 \"impulse 9\"; in_bind 7 0 \"impulse 10\"; in_bind 7 KP_1 \"impulse 1\"; in_bind 7 KP_2 \"impulse 2\"; in_bind 7 KP_3 \"impulse 3\"; in_bind 7 KP_4 \"impulse 4\"; in_bind 7 KP_5 \"impulse 5\"; in_bind 7 KP_6 \"impulse 6\"; in_bind 7 KP_7 \"impulse 7\"; in_bind 7 KP_8 \"impulse 8\"; in_bind 7 KP_9 \"impulse 9\"; in_bind 7 KP_0 \"impulse 10\"; in_bindmap 7 0\n");
-		break;
-	case MAPVOTE_NET_UPDATE:
-		MapVote_Update();
-		break;
-	case MAPVOTE_NET_OWNVOTE:
-		mv_ownvote = ReadByte()-1;
-		break;
-	case MAPVOTE_NET_PIC:
-		type = ReadByte();
-		mv_preview[type] = true;
-		mv_pics[type] = strzone(Net_ReadPicture());
-		break;
-	}
+	mv_preview[type] = true;
+	mv_pics[type] = strzone(Net_ReadPicture());
 }

Copied: branches/nexuiz-2.0/data/qcsrc/client/prandom.qc (from rev 5690, trunk/data/qcsrc/client/prandom.qc)
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/client/prandom.qc	                        (rev 0)
+++ branches/nexuiz-2.0/data/qcsrc/client/prandom.qc	2009-01-29 12:15:06 UTC (rev 5693)
@@ -0,0 +1,11 @@
+// prandom - PREDICTABLE random number generator (not seeded yet)
+
+//float prandom_seed;
+float prandom()
+{
+	return random();
+//	float c;
+//	c = crc16(FALSE, strcat(ftos(prandom_seed), ftos(prandom_seed + 3.1415926535)));
+//	prandom_seed = c;
+//	return c / 65536; // in [0..1[
+}

Copied: branches/nexuiz-2.0/data/qcsrc/client/prandom.qh (from rev 5690, trunk/data/qcsrc/client/prandom.qh)
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/client/prandom.qh	                        (rev 0)
+++ branches/nexuiz-2.0/data/qcsrc/client/prandom.qh	2009-01-29 12:15:06 UTC (rev 5693)
@@ -0,0 +1,2 @@
+// prandom - PREDICTABLE random number generator
+float prandom();

Modified: branches/nexuiz-2.0/data/qcsrc/client/progs.src
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/client/progs.src	2009-01-29 12:14:47 UTC (rev 5692)
+++ branches/nexuiz-2.0/data/qcsrc/client/progs.src	2009-01-29 12:15:06 UTC (rev 5693)
@@ -14,6 +14,7 @@
 teamradar.qh
 waypointsprites.qh
 movetypes.qh
+prandom.qh
 
 main.qh
 
@@ -40,6 +41,7 @@
 teamradar.qc
 waypointsprites.qc
 movetypes.qc
+prandom.qc
 
 ../common/util.qc
 ../common/gamecommand.qc

Modified: branches/nexuiz-2.0/data/qcsrc/client/projectile.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/client/projectile.qc	2009-01-29 12:14:47 UTC (rev 5692)
+++ branches/nexuiz-2.0/data/qcsrc/client/projectile.qc	2009-01-29 12:15:06 UTC (rev 5693)
@@ -13,6 +13,52 @@
 .float gravity;
 .float snd_looping;
 
+void Projectile_DrawTrail(vector from, vector to)
+{
+	switch(self.cnt)
+	{
+		case PROJECTILE_ROCKET:
+			trailparticles(self, particleeffectnum("TR_ROCKET"), from, to);
+			break;
+		case PROJECTILE_TAG:
+			trailparticles(self, particleeffectnum("TR_VORESPIKE"), from, to);
+			break;
+		case PROJECTILE_ELECTRO_BEAM:
+			trailparticles(self, particleeffectnum("TR_NEXUIZPLASMA"), from, to);
+			break;
+		case PROJECTILE_GRENADE:
+			trailparticles(self, particleeffectnum("TR_KNIGHTSPIKE"), from, to);
+			break;
+		case PROJECTILE_GRENADE_BOUNCING:
+			trailparticles(self, particleeffectnum("TR_KNIGHTSPIKE"), from, to);
+			break;
+		case PROJECTILE_PORTO_RED:
+			trailparticles(self, particleeffectnum("TR_WIZSPIKE"), from, to);
+			break;
+		case PROJECTILE_PORTO_BLUE:
+			trailparticles(self, particleeffectnum("TR_WIZSPIKE"), from, to);
+			break;
+		case PROJECTILE_FLAC:
+			trailparticles(self, particleeffectnum("TR_VORESPIKE"), from, to);
+			break;
+		case PROJECTILE_SEEKER:
+			trailparticles(self, particleeffectnum("TR_ROCKET"), from, to);
+			break;
+		case PROJECTILE_HOOKBOMB:
+			trailparticles(self, particleeffectnum("TR_KNIGHTSPIKE"), from, to);
+			break;
+		case PROJECTILE_HAGAR:
+			trailparticles(self, particleeffectnum("TR_GRENADE"), from, to);
+			break;
+		case PROJECTILE_HAGAR_BOUNCING:
+			trailparticles(self, particleeffectnum("TR_GRENADE"), from, to);
+			break;
+		default:
+			break;
+	}
+
+}
+
 void Projectile_Draw()
 {
 	vector oldorg;
@@ -30,50 +76,20 @@
 		InterpolateOrigin_Do();
 	}
 
+	Projectile_DrawTrail(oldorg, self.origin);
+
 	switch(self.cnt)
 	{
-		case PROJECTILE_ROCKET:
-			trailparticles(self, particleeffectnum("TR_ROCKET"), oldorg, self.origin);
-			break;
-		case PROJECTILE_TAG:
-			trailparticles(self, particleeffectnum("TR_VORESPIKE"), oldorg, self.origin);
-			break;
-		case PROJECTILE_ELECTRO_BEAM:
-			trailparticles(self, particleeffectnum("TR_NEXUIZPLASMA"), oldorg, self.origin);
-			break;
 		case PROJECTILE_GRENADE:
-			trailparticles(self, particleeffectnum("TR_KNIGHTSPIKE"), oldorg, self.origin);
 			self.angles -= '750 0 0' * time;
 			break;
 		case PROJECTILE_GRENADE_BOUNCING:
-			trailparticles(self, particleeffectnum("TR_KNIGHTSPIKE"), oldorg, self.origin);
 			if(!(self.move_flags & FL_ONGROUND))
 				self.angles += '100 150 100' * time;
 			break;
-		case PROJECTILE_PORTO_RED:
-			// TODO add red dynamic light
-			trailparticles(self, particleeffectnum("TR_WIZSPIKE"), oldorg, self.origin);
-			break;
-		case PROJECTILE_PORTO_BLUE:
-			// TODO add blue dynamic light
-			trailparticles(self, particleeffectnum("TR_WIZSPIKE"), oldorg, self.origin);
-			break;
-		case PROJECTILE_FLAC:
-			trailparticles(self, particleeffectnum("TR_VORESPIKE"), oldorg, self.origin);
-			break;
-		case PROJECTILE_SEEKER:
-			trailparticles(self, particleeffectnum("TR_ROCKET"), oldorg, self.origin);
-			break;
 		case PROJECTILE_HOOKBOMB:
-			trailparticles(self, particleeffectnum("TR_KNIGHTSPIKE"), oldorg, self.origin);
 			self.angles = '0 500 0' * time;
 			break;
-		case PROJECTILE_HAGAR:
-			trailparticles(self, particleeffectnum("TR_GRENADE"), oldorg, self.origin);
-			break;
-		case PROJECTILE_HAGAR_BOUNCING:
-			trailparticles(self, particleeffectnum("TR_GRENADE"), oldorg, self.origin);
-			break;
 		case PROJECTILE_BULLET_GLOWING:
 			R_AddDynamicLight(self.origin, 50, '1 1 0');
 			break;
@@ -100,6 +116,12 @@
 {
 	if(self.snd_looping)
 		sound(self, CHAN_PROJECTILE, "misc/null.wav", VOL_BASE, ATTN_NORM);
+
+	if(self.count & 0x80)
+	{
+		tracebox(self.origin, self.mins, self.maxs, self.origin + self.velocity * 0.05, MOVE_NORMAL, self);
+		Projectile_DrawTrail(self.origin, trace_endpos);
+	}
 }
 
 void Ent_Projectile()

Modified: branches/nexuiz-2.0/data/qcsrc/client/sbar.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/client/sbar.qc	2009-01-29 12:14:47 UTC (rev 5692)
+++ branches/nexuiz-2.0/data/qcsrc/client/sbar.qc	2009-01-29 12:15:06 UTC (rev 5693)
@@ -1128,8 +1128,8 @@
 
 void Sbar_Score(float margin)
 {
-	float timelimit, timeleft, minutes, seconds, distribution, myplace, score;
-	vector sbar_save, place;
+	float timelimit, minutes, seconds, timeleft, minutesLeft, secondsLeft, distribution, myplace, score;
+	vector sbar_save, place, timer_color;
 	entity tm, pl, me;
 	sbar_save = sbar;
 	
@@ -1201,32 +1201,52 @@
 			Sbar_DrawXNum('-128 0 0', score, 4, 32, '1 0 0', 1, DRAWFLAG_NORMAL);
 		}
 	}
+	
+	//draw the remaining or elapsed time
 	timelimit = getstatf(STAT_TIMELIMIT);
 	if(timelimit > 0)
 	{
 		timeleft = max(0, timelimit * 60 + getstatf(STAT_GAMESTARTTIME) - time);
 		timeleft = ceil(timeleft);
-		minutes = floor(timeleft / 60);
-		seconds = timeleft - minutes*60;
-		if(minutes >= 5)
-		{
-			Sbar_DrawXNum('-72 32 0', minutes, 3, 12, '1 1 1', 1, DRAWFLAG_NORMAL);
-			drawpic(sbar + '-36 32 0', "gfx/num_colon", '12 12 0', '1 1 1', sbar_alpha_fg, 0);
-			Sbar_DrawXNum('-24 32 0', seconds, -2, 12, '1 1 1', 1, DRAWFLAG_NORMAL);
-		} else if(minutes >= 1)
-		{
-			Sbar_DrawXNum('-72 32 0', minutes, 3, 12, '1 1 0', 1, DRAWFLAG_NORMAL);
-			drawpic(sbar + '-36 32 0', "gfx/num_colon", '12 12 0', '1 1 0', sbar_alpha_fg, 0);
-			Sbar_DrawXNum('-24 32 0', seconds, -2, 12, '1 1 0', 1, DRAWFLAG_NORMAL);
+		minutesLeft = floor(timeleft / 60);
+		secondsLeft = timeleft - minutesLeft*60;
+		
+		if(minutesLeft >= 5) {
+			timer_color = '1 1 1'; //white
+		} else if(minutesLeft >= 1) {
+			timer_color = '1 1 0'; //yellow
 		} else {
-			Sbar_DrawXNum('-24 32 0', seconds, -2, 12, '1 0 0', 1, DRAWFLAG_NORMAL);
+			timer_color = '1 0 0'; //red
 		}
+		
+		if (cvar("sbar_increment_maptime")) {
+			if (time < getstatf(STAT_GAMESTARTTIME)) {
+				//while restart is still active, show negative counter
+				minutes = 0;
+				seconds = ceil(getstatf(STAT_GAMESTARTTIME) - time);
+			} else {
+				float elapsedTime;
+				elapsedTime = floor(time - getstatf(STAT_GAMESTARTTIME)); //127
+				minutes = floor(elapsedTime / 60);
+				seconds = elapsedTime - minutes*60;
+			}
+		} else {
+			minutes = minutesLeft;
+			seconds = secondsLeft;
+		}
+		
+		if(minutesLeft >= 1 || (cvar("sbar_increment_maptime") && minutes >= 1) ) {
+			Sbar_DrawXNum('-72 32 0', minutes, 3, 12, timer_color, 1, DRAWFLAG_NORMAL);
+			drawpic(sbar + '-36 32 0', "gfx/num_colon", '12 12 0', timer_color, sbar_alpha_fg, 0);
+		}
+		Sbar_DrawXNum('-24 32 0', seconds, -2, 12, timer_color, 1, DRAWFLAG_NORMAL);
 	} else {
+		timer_color = '1 1 1'; //white
 		minutes = floor(time / 60);
 		seconds = floor(time - minutes*60);
-		Sbar_DrawXNum('-72 32 0', minutes, 3, 12, '1 1 1', 1, DRAWFLAG_NORMAL);
-		drawpic(sbar + '-36 32 0', "gfx/num_colon", '12 12 0', '1 1 1', sbar_alpha_fg, 0);
-		Sbar_DrawXNum('-24 32 0', seconds, -2, 12, '1 1 1', 1, DRAWFLAG_NORMAL);
+		Sbar_DrawXNum('-72 32 0', minutes, 3, 12, timer_color, 1, DRAWFLAG_NORMAL);
+		drawpic(sbar + '-36 32 0', "gfx/num_colon", '12 12 0', timer_color, sbar_alpha_fg, 0);
+		Sbar_DrawXNum('-24 32 0', seconds, -2, 12, timer_color, 1, DRAWFLAG_NORMAL);
 	}
 
 	if(gametype == GAME_RACE)

Modified: branches/nexuiz-2.0/data/qcsrc/common/constants.qh
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/common/constants.qh	2009-01-29 12:14:47 UTC (rev 5692)
+++ branches/nexuiz-2.0/data/qcsrc/common/constants.qh	2009-01-29 12:15:06 UTC (rev 5693)
@@ -42,6 +42,17 @@
 const float AS_FLOAT_TRUNCATED	= 2;
 const float AS_FLOAT		= 8;
 
+const float TE_CSQC_PICTURE = 100;
+const float TE_CSQC_RACE = 101;
+const float TE_CSQC_SPAWN = 102;
+
+const float RACE_NET_CHECKPOINT_HIT_QUALIFYING = 0; // byte checkpoint, short time, short recordtime, string recordholder
+const float RACE_NET_CHECKPOINT_CLEAR = 1;
+const float RACE_NET_CHECKPOINT_NEXT_QUALIFYING = 2; // byte nextcheckpoint, short recordtime, string recordholder
+const float RACE_NET_CHECKPOINT_HIT_RACE = 3; // byte checkpoint, short delta, byte lapsdelta, string opponent
+const float RACE_NET_CHECKPOINT_HIT_RACE_BY_OPPONENT = 4; // byte checkpoint, short delta, byte lapsdelta, string opponent
+const float RACE_NET_CHECKPOINT_NEXT_SPEC_QUALIFYING = 5; // byte nextcheckpoint, float laptime, short recordtime, string recordholder
+
 const float ENT_CLIENT = 0;
 const float ENT_CLIENT_DEAD = 1;
 const float ENT_CLIENT_ENTCS = 2;
@@ -58,6 +69,9 @@
 const float ENT_CLIENT_GIBSPLASH = 13;
 const float ENT_CLIENT_DAMAGEINFO = 14;
 const float ENT_CLIENT_CASING = 15;
+const float ENT_CLIENT_INIT = 16;
+const float ENT_CLIENT_MAPVOTE = 17;
+const float ENT_CLIENT_CLIENTDATA = 18;
 
 const float SPRITERULE_DEFAULT = 0;
 const float SPRITERULE_TEAMPLAY = 1;
@@ -208,29 +222,6 @@
 ///////////////////////////
 // csqc communication stuff
 
-const float ENTCS_MSG_END = 0;
-const float ENTCS_MSG_ONS_GPS = 1;
-const float ENTCS_MSG_ONS_REMOVE = 2;
-const float ENTCS_MSG_INIT = 3;
-
-const float TE_CSQC_INIT = 100;
-const float TE_CSQC_PING = 101;
-const float TE_CSQC_CAPTURES = 102;
-const float TE_CSQC_RETURNS = 103;
-const float TE_CSQC_DEATHS = 104;
-const float TE_CSQC_PICTURE = 105;
-const float TE_CSQC_MAPVOTE = 106;
-const float TE_CSQC_CONFIG = 107;
-const float TE_CSQC_SCORESINFO = 108;
-const float TE_CSQC_RACE = 109;
-const float TE_CSQC_FORCESCOREBOARD = 110;
-const float TE_CSQC_SPECTATING = 111;
-const float TE_CSQC_SPAWN = 112;
-const float TE_CSQC_ZOOMNOTIFY = 113;
-const float TE_CSQC_HOLDANGLES = 114;
-const float TE_CSQC_WARMUP = 115;
-const float TE_CSQC_FOG = 116;
-
 const float STAT_KH_KEYS = 32;
 const float STAT_CTF_STATE = 33;
 const float STAT_SYS_TICRATE = 34;
@@ -244,18 +235,7 @@
 // moved that here so the client knows the max.
 // # of maps, I'll use arrays for them :P
 #define MAPVOTE_COUNT 10
-const float MAPVOTE_NET_INIT = 0;
-const float MAPVOTE_NET_UPDATE = 1;
-const float MAPVOTE_NET_PIC = 2;
-const float MAPVOTE_NET_OWNVOTE = 3;
 
-const float RACE_NET_CHECKPOINT_HIT_QUALIFYING = 0; // byte checkpoint, short time, short recordtime, string recordholder
-const float RACE_NET_CHECKPOINT_CLEAR = 1;
-const float RACE_NET_CHECKPOINT_NEXT_QUALIFYING = 2; // byte nextcheckpoint, short recordtime, string recordholder
-const float RACE_NET_CHECKPOINT_HIT_RACE = 3; // byte checkpoint, short delta, byte lapsdelta, string opponent
-const float RACE_NET_CHECKPOINT_HIT_RACE_BY_OPPONENT = 4; // byte checkpoint, short delta, byte lapsdelta, string opponent
-const float RACE_NET_CHECKPOINT_NEXT_SPEC_QUALIFYING = 5; // byte nextcheckpoint, float laptime, short recordtime, string recordholder
-
 /**
  * Lower scores are better (e.g. suicides)
  */

Modified: branches/nexuiz-2.0/data/qcsrc/server/cl_client.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/cl_client.qc	2009-01-29 12:14:47 UTC (rev 5692)
+++ branches/nexuiz-2.0/data/qcsrc/server/cl_client.qc	2009-01-29 12:15:06 UTC (rev 5693)
@@ -1,3 +1,79 @@
+.float spectatee_status;
+.float zoomstate;
+
+.entity clientdata;
+float ClientData_Send(entity to, float sf)
+{
+	if(to != self.owner)
+	{
+		error("wtf");
+		return FALSE;
+	}
+
+	entity e;
+
+	e = to;
+	if(to.classname == "spectator")
+		e = to.enemy;
+
+	sf = 0;
+
+	if(e.race_completed)
+		sf |= 1; // forced scoreboard
+	if(to.spectatee_status)
+		sf |= 2; // spectator ent number follows
+	if(e.zoomstate)
+		sf |= 4; // zoomed
+	if(e.porto_v_angle_held)
+		sf |= 8; // angles held
+	
+	WriteByte(MSG_ENTITY, ENT_CLIENT_CLIENTDATA);
+	WriteByte(MSG_ENTITY, sf);
+
+	if(sf & 2)
+		WriteByte(MSG_ENTITY, to.spectatee_status);
+	
+	if(sf & 8)
+	{
+		WriteAngle(MSG_ENTITY, e.v_angle_x);
+		WriteAngle(MSG_ENTITY, e.v_angle_y);
+	}
+
+	return TRUE;
+}
+
+void ClientData_Attach()
+{
+	self.clientdata = spawn();
+	self.clientdata.SendEntity = ClientData_Send;
+	self.clientdata.effects = EF_NODEPTHTEST;
+	self.clientdata.drawonlytoclient = self;
+	self.clientdata.owner = self;
+	setmodel(self.clientdata, "null");
+}
+
+void ClientData_Detach()
+{
+	remove(self.clientdata);
+	self.clientdata = world;
+}
+
+void ClientData_Touch(entity e)
+{
+	e.clientdata.SendFlags = 1;
+
+	// make it spectatable
+	entity e2;
+	FOR_EACH_REALCLIENT(e2)
+	{
+		if(e2 != e)
+			if(e2.classname == "spectator")
+				if(e2.enemy == e)
+					e2.clientdata.SendFlags = 1;
+	}
+}
+
+
 #define SPAWNPOINT_SCORE frags
 
 .float wantswelcomemessage;
@@ -823,30 +899,36 @@
 	//	ctf_playerchanged();
 }
 
-/*
-=============
-SendCSQCInfo
-
-Send whatever CSQC needs NOW and cannot wait for SendServerInfo to happen...
-=============
-*/
-void SendCSQCInfo(void)
+float ClientInit_SendEntity(entity to, float sf)
 {
 	float i;
-	if(clienttype(self) != CLIENTTYPE_REAL)
-		return;
-	msg_entity = self;
-	WriteByte(MSG_ONE, SVC_TEMPENTITY);
-	WriteByte(MSG_ONE, TE_CSQC_INIT);
-	WriteShort(MSG_ONE, CSQC_REVISION);
-	WriteByte(MSG_ONE, maxclients);
+	WriteByte(MSG_ENTITY, ENT_CLIENT_INIT);
+	WriteShort(MSG_ENTITY, CSQC_REVISION);
+	WriteByte(MSG_ENTITY, maxclients);
 	for(i = 1; i <= 24; ++i)
-		WriteByte(MSG_ONE, (get_weaponinfo(i)).impulse + 1);
-	WriteCoord(MSG_ONE, hook_shotorigin_x);
-	WriteCoord(MSG_ONE, hook_shotorigin_y);
-	WriteCoord(MSG_ONE, hook_shotorigin_z);
+		WriteByte(MSG_ENTITY, (get_weaponinfo(i)).impulse + 1);
+	WriteCoord(MSG_ENTITY, hook_shotorigin_x);
+	WriteCoord(MSG_ENTITY, hook_shotorigin_y);
+	WriteCoord(MSG_ENTITY, hook_shotorigin_z);
+
+	if(sv_foginterval && world.fog != "")
+		WriteString(MSG_ENTITY, world.fog);
+	else
+		WriteString(MSG_ENTITY, "");
+
+	return TRUE;
 }
 
+void ClientInit_Spawn()
+{
+	entity e;
+	e = spawn();
+	e.classname = "ent_client_init";
+	e.SendEntity = ClientInit_SendEntity;
+	setmodel(e, "null");
+	e.effects = EF_NODEPTHTEST;
+}
+
 /*
 =============
 SetNewParms
@@ -1088,31 +1170,6 @@
 	 */
 }
 
-.float fog_set;
-void SendFog()
-{
-	if(clienttype(self) == CLIENTTYPE_REAL)
-	if(world.fog) // NOT string_null!
-	{
-		if(!self.fog_set)
-		{
-			if(sv_foginterval)
-			{
-				msg_entity = self;
-				WriteByte(MSG_ONE, SVC_TEMPENTITY);
-				WriteByte(MSG_ONE, TE_CSQC_FOG);
-				WriteCoord(MSG_ONE, sv_foginterval);
-				WriteString(MSG_ONE, world.fog);
-			}
-			else
-				// set it once
-				stuffcmd(self, strcat("\nfog ", world.fog, "\nr_fog_exp2 0\nr_drawfog 1\n"));
-
-			self.fog_set = 1;
-		}
-	}
-}
-
 /*
 =============
 ClientConnect
@@ -1151,6 +1208,7 @@
 	}
 
 	PlayerScore_Attach(self);
+	ClientData_Attach();
 
 	bot_clientconnect();
 
@@ -1267,23 +1325,7 @@
 	if(clienttype(self) == CLIENTTYPE_REAL)
 	{
 		sprint(self, strcat("nexuiz-csqc protocol ", ftos(CSQC_REVISION), "\n"));
-		SendCSQCInfo();
-		msg_entity = self;
-		if(mapvote_initialized && !cvar("g_maplist_textonly"))
-		{
-			MapVote_SendData(MSG_ONE);
-			MapVote_UpdateData(MSG_ONE);
-		}
-		ScoreInfo_Write(MSG_ONE);
 
-		if(inWarmupStage)
-		{
-			msg_entity = self;
-			WriteByte(MSG_ONE, SVC_TEMPENTITY);
-			WriteByte(MSG_ONE, TE_CSQC_WARMUP);
-			WriteByte(MSG_ONE, 1);
-		}
-
 		if(cvar("g_bugrigs"))
 			stuffcmd(self, "cl_cmd settemp chase_active 1\n");
 	}
@@ -1297,7 +1339,8 @@
 		}
 	}
 
-	SendFog();
+	if(!sv_foginterval && world.fog != "")
+		stuffcmd(self, strcat("\nfog ", world.fog, "\nr_fog_exp2 0\nr_drawfog 1\n"));
 }
 
 /*
@@ -1364,6 +1407,7 @@
 		Spawnqueue_Remove(self);
 	}
 
+	ClientData_Detach();
 	PlayerScore_Detach(self);
 
 	if(self.netname_previous)
@@ -1389,7 +1433,6 @@
 		remove(self);
 		return;
 	}
-	setorigin(self, self.owner.origin + '0 0 15' + self.owner.maxs_z * '0 0 1');
 	if (self.owner.BUTTON_CHAT && !self.owner.deadflag)
 		self.model = self.mdl;
 	else
@@ -1409,7 +1452,9 @@
 		self.chatbubbleentity.think = ChatBubbleThink;
 		self.chatbubbleentity.nextthink = time;
 		setmodel(self.chatbubbleentity, "models/misc/chatbubble.spr"); // precision set below
-		setorigin(self.chatbubbleentity, self.origin + '0 0 15' + self.maxs_z * '0 0 1');
+		//setorigin(self.chatbubbleentity, self.origin + '0 0 15' + self.maxs_z * '0 0 1');
+		setorigin(self.chatbubbleentity, '0 0 15' + self.maxs_z * '0 0 1');
+		setattachment(self.chatbubbleentity, self, "");  // sticks to moving player better, also conserves bandwidth
 		self.chatbubbleentity.mdl = self.chatbubbleentity.model;
 		self.chatbubbleentity.model = "";
 		self.chatbubbleentity.effects = EF_LOWPRECISION;
@@ -1454,7 +1499,7 @@
 		self.teambubbleentity.nextthink = time;
 		setmodel(self.teambubbleentity, "models/misc/teambubble.spr"); // precision set below
 //		setorigin(self.teambubbleentity, self.origin + '0 0 15' + self.maxs_z * '0 0 1');
-		setorigin(self.teambubbleentity, self.teambubbleentity.origin + '0 0 15' + self.maxs_z * '0 0 1');
+		setorigin(self.teambubbleentity, '0 0 15' + self.maxs_z * '0 0 1');
 		setattachment(self.teambubbleentity, self, "");  // sticks to moving player better, also conserves bandwidth
 		self.teambubbleentity.mdl = self.teambubbleentity.model;
 		self.teambubbleentity.model = self.teambubbleentity.mdl;
@@ -1535,17 +1580,9 @@
 		{
 			if (time > self.strength_finished)
 			{
-				if (g_minstagib_invis_alpha > 0)
-				{
-					self.alpha = default_player_alpha;
-					self.exteriorweaponentity.alpha = default_weapon_alpha;
-					self.effects = self.effects | EF_FULLBRIGHT;
-				}
-				else
-				{
-					self.effects -= self.effects & EF_NODRAW;
-				}
-				self.items = self.items - (self.items & IT_STRENGTH);
+				self.alpha = default_player_alpha;
+				self.exteriorweaponentity.alpha = default_weapon_alpha;
+				self.items &~= IT_STRENGTH;
 				sprint(self, "^3Invisibility has worn off\n");
 			}
 		}
@@ -1553,17 +1590,9 @@
 		{
 			if (time < self.strength_finished)
 			{
-				if (g_minstagib_invis_alpha > 0)
-				{
-					self.alpha = g_minstagib_invis_alpha;
-					self.exteriorweaponentity.alpha = g_minstagib_invis_alpha;
-					self.effects -= self.effects & EF_FULLBRIGHT;
-				}
-				else
-				{
-					self.effects = self.effects | EF_NODRAW;
-				}
-				self.items = self.items | IT_STRENGTH;
+				self.alpha = g_minstagib_invis_alpha;
+				self.exteriorweaponentity.alpha = g_minstagib_invis_alpha;
+				self.items |= IT_STRENGTH;
 				sprint(self, "^3You are invisible\n");
 			}
 		}
@@ -1737,18 +1766,11 @@
 		self.event_damage(self, self, 1, DEATH_ROT, self.origin, '0 0 0');
 }
 
-.float zoomstate;
 float zoomstate_set;
 void SetZoomState(float z)
 {
 	if(z != self.zoomstate)
-	{
-		msg_entity = self;
-		WriteByte(MSG_ONE, SVC_TEMPENTITY);
-		WriteByte(MSG_ONE, TE_CSQC_ZOOMNOTIFY);
-		WriteByte(MSG_ONE, z);
-		self.zoomstate = z;
-	}
+		ClientData_Touch(self);
 	zoomstate_set = 1;
 }
 
@@ -2023,7 +2045,6 @@
 =============
 */
 void() ctf_setstatus;
-.float spectatee_status;
 void PlayerPreThink (void)
 {
 	self.stat_sys_ticrate = cvar("sys_ticrate");
@@ -2083,10 +2104,7 @@
 	}
 
 	if(frametime)
-	{
-		SendFog();
 		antilag_record(self);
-	}
 
 	if(self.classname == "player") {
 //		if(self.netname == "Wazat")
@@ -2111,9 +2129,8 @@
 		if(time > self.teleport_time)
 		{
 			self.teleport_time = 0;
-			self.effects = self.effects - (self.effects & EF_NODRAW);
-			if(self.weaponentity)
-				self.weaponentity.flags = self.weaponentity.flags - (self.weaponentity.flags & EF_NODRAW);
+			if(! (self.items & IT_STRENGTH))
+				self.effects = self.effects - (self.effects & EF_NODRAW);
 		}
 
 		Nixnex_GiveCurrentWeapon();
@@ -2281,10 +2298,7 @@
 		self.spectatee_status = 0;
 	if(self.spectatee_status != oldspectatee_status)
 	{
-		msg_entity = self;
-		WriteByte(MSG_ONE, SVC_TEMPENTITY);
-		WriteByte(MSG_ONE, TE_CSQC_SPECTATING);
-		WriteByte(MSG_ONE, self.spectatee_status);
+		ClientData_Touch(self);
 		if(g_race)
 			race_InitSpectator();
 	}

Modified: branches/nexuiz-2.0/data/qcsrc/server/cl_weaponsystem.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/cl_weaponsystem.qc	2009-01-29 12:14:47 UTC (rev 5692)
+++ branches/nexuiz-2.0/data/qcsrc/server/cl_weaponsystem.qc	2009-01-29 12:15:06 UTC (rev 5693)
@@ -279,12 +279,13 @@
 
 	if (self.flags & FL_FLY)
 		// owner is currently being teleported, so don't apply EF_NODRAW otherwise the viewmodel would "blink"
-		self.effects = self.effects - (self.effects & EF_NODRAW);
+		self.effects &~= EF_NODRAW;
 
-	if(self.owner.alpha >= 0)
+	if(self.owner.alpha != 0)
 		self.alpha = self.owner.alpha;
 	else
 		self.alpha = 1;
+	
 	self.colormap = self.owner.colormap;
 
 	self.angles = '0 0 0';
@@ -340,10 +341,11 @@
 	}
 	self.effects = self.owner.effects | EF_LOWPRECISION;
 	self.effects = self.effects & EFMASK_CHEAP; // eat performance
-	if(self.owner.alpha >= 0)
+	if(self.owner.alpha != 0)
 		self.alpha = self.owner.alpha;
 	else
 		self.alpha = 1;
+	
 	self.colormap = self.owner.colormap;
 };
 

Modified: branches/nexuiz-2.0/data/qcsrc/server/clientcommands.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/clientcommands.qc	2009-01-29 12:14:47 UTC (rev 5692)
+++ branches/nexuiz-2.0/data/qcsrc/server/clientcommands.qc	2009-01-29 12:15:06 UTC (rev 5693)
@@ -18,6 +18,8 @@
 		if(to.vote_vote == 0)
 			nags |= 8;
 	}
+	if(inWarmupStage)
+		nags |= 16;
 
 	if(sendflags & 128)
 	{
@@ -283,7 +285,7 @@
 			pointparticles(effectnum, start, end, f);
 		}
 		else
-			print("Usage: sv_cheats 1; restart; cmd pointparticles effectname position(0..1) velocityvector multiplier\n");
+			sprint(self, "Usage: sv_cheats 1; restart; cmd pointparticles effectname position(0..1) velocityvector multiplier\n");
 	} else if(argv(0) == "trailparticles") {
 		if(sv_cheats && tokens == 3)
 		{
@@ -296,7 +298,7 @@
 			trailparticles(self, effectnum, w_shotorg, trace_endpos);
 		}
 		else
-			print("Usage: sv_cheats 1; restart; cmd trailparticles effectname shotorigin\n");
+			sprint(self, "Usage: sv_cheats 1; restart; cmd trailparticles effectname shotorigin\n");
 	} else {
 		//if(ctf_clientcommand())
 		//	return;
@@ -361,14 +363,7 @@
 	FOR_EACH_CLIENTSLOT(e)
 		e.ready = 0;
 	readycount = 0;
-	Nagger_ReadyCounted();
-	FOR_EACH_REALCLIENT(e)
-	{
-		msg_entity = e;
-		WriteByte(MSG_ONE, SVC_TEMPENTITY);
-		WriteByte(MSG_ONE, TE_CSQC_WARMUP);
-		WriteByte(MSG_ONE, 0);
-	}
+	Nagger_ReadyCounted(); // NOTE: this causes a resend of that entity, and will also turn off warmup state on the client
 
 	if(cvar("teamplay_lockonrestart") && teams_matter) {
 		lockteams = 1;

Modified: branches/nexuiz-2.0/data/qcsrc/server/constants.qh
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/constants.qh	2009-01-29 12:14:47 UTC (rev 5692)
+++ branches/nexuiz-2.0/data/qcsrc/server/constants.qh	2009-01-29 12:15:06 UTC (rev 5693)
@@ -1,4 +1,4 @@
-string CVAR_CHECK_DEFAULT = "a53e77007f17570086417cc970eacf6e";
+string CVAR_CHECK_DEFAULT = "dd56b80c75377e60d4784f49fe91c8a8";
 string CVAR_CHECK_WEAPONS = "2a35f7139825257d468d22354209cf54";
 float	FALSE					= 0;
 float	TRUE					= 1;

Modified: branches/nexuiz-2.0/data/qcsrc/server/defs.qh
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/defs.qh	2009-01-29 12:14:47 UTC (rev 5692)
+++ branches/nexuiz-2.0/data/qcsrc/server/defs.qh	2009-01-29 12:15:06 UTC (rev 5693)
@@ -529,3 +529,5 @@
 
 .void() reset; // if set, an entity is reset using this
 .void() reset2; // if set, an entity is reset using this (after calling ALL the reset functions for other entities)
+
+void ClientData_Touch(entity e);

Modified: branches/nexuiz-2.0/data/qcsrc/server/g_world.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/g_world.qc	2009-01-29 12:14:47 UTC (rev 5692)
+++ branches/nexuiz-2.0/data/qcsrc/server/g_world.qc	2009-01-29 12:15:06 UTC (rev 5693)
@@ -23,7 +23,7 @@
 	else
 	{
 		default_player_alpha = cvar("g_player_alpha");
-		if(default_player_alpha <= 0)
+		if(default_player_alpha == 0)
 			default_player_alpha = 1;
 		default_weapon_alpha = default_player_alpha;
 	}
@@ -301,6 +301,7 @@
 float world_already_spawned;
 void RegisterWeapons();
 void Nagger_Init();
+void ClientInit_Spawn();
 void spawnfunc_worldspawn (void)
 {
 	float fd, l, i, j, n;
@@ -555,6 +556,8 @@
 
 	records_reply = strzone(getrecords());
 
+	ClientInit_Spawn();
+
 	world_initialized = 1;
 }
 
@@ -1885,7 +1888,6 @@
 float mapvote_run;
 float mapvote_detail;
 float mapvote_abstain;
-float mapvote_dirty;
 .float mapvote;
 
 void MapVote_ClearAllVotes()
@@ -1947,7 +1949,7 @@
 	mapvote_count += 1;
 }
 
-void MapVote_SendData(float target);
+void MapVote_Spawn();
 void MapVote_Init()
 {
 	float i;
@@ -2000,16 +2002,14 @@
 		mapvote_screenshot_dir = "maps";
 	mapvote_screenshot_dir = strzone(mapvote_screenshot_dir);
 
-	if(!cvar("g_maplist_textonly"))
-		MapVote_SendData(MSG_ALL);
+	MapVote_Spawn();
 }
 
 void MapVote_SendPicture(float id)
 {
 	msg_entity = self;
 	WriteByte(MSG_ONE, SVC_TEMPENTITY);
-	WriteByte(MSG_ONE, TE_CSQC_MAPVOTE);
-	WriteByte(MSG_ONE, MAPVOTE_NET_PIC);
+	WriteByte(MSG_ONE, TE_CSQC_PICTURE);
 	WriteByte(MSG_ONE, id);
 	WritePicture(MSG_ONE, strcat(mapvote_screenshot_dir, "/", mapvote_maps[id]), 3072);
 }
@@ -2018,13 +2018,11 @@
 {
 	if(!intermission_running)
 		return FALSE;
-	if(!cvar("g_maplist_textonly"))
+
+	if(cmd == "mv_getpic")
 	{
-		if(cmd == "mv_getpic")
-		{
-			MapVote_SendPicture(stof(argv(1)));
-			return TRUE;
-		}
+		MapVote_SendPicture(stof(argv(1)));
+		return TRUE;
 	}
 
 	return FALSE;
@@ -2040,68 +2038,85 @@
 	return mask;
 }
 
-void MapVote_SendData(float targ)
+entity mapvote_ent;
+float MapVote_SendEntity(entity to, float sf)
 {
 	string mapfile, pakfile;
 	float i, o;
-	WriteByte(targ, SVC_TEMPENTITY);
-	WriteByte(targ, TE_CSQC_CONFIG);
-	WriteString(targ, "mv_screenshot_dir");
-	WriteString(targ, mapvote_screenshot_dir);
 
-	WriteByte(targ, SVC_TEMPENTITY);
-	WriteByte(targ, TE_CSQC_MAPVOTE);
-	WriteByte(targ, MAPVOTE_NET_INIT);
+	WriteByte(MSG_ENTITY, ENT_CLIENT_MAPVOTE);
+	WriteByte(MSG_ENTITY, sf);
 
-  	WriteByte(targ, mapvote_count);
-  	WriteByte(targ, mapvote_abstain);
-  	WriteByte(targ, mapvote_detail);
-	WriteCoord(targ, mapvote_timeout);
- 	if(mapvote_count <= 8)
- 		WriteByte(targ, MapVote_GetMapMask());
- 	else
- 		WriteShort(targ, MapVote_GetMapMask());
- 	for(i = 0; i < mapvote_count; ++i)
-		if(mapvote_maps[i] != "")
-		{
-			WriteString(targ, mapvote_maps[i]);
-			mapfile = strcat(mapvote_screenshot_dir, "/", mapvote_maps[i]);
-			pakfile = whichpack(strcat(mapfile, ".tga"));
-			if(pakfile == "")
-				pakfile = whichpack(strcat(mapfile, ".jpg"));
-			if(pakfile == "")
-				pakfile = whichpack(strcat(mapfile, ".png"));
-			print("pakfile is ", pakfile, "\n");
-			for(o = strstr(pakfile, "/", 0)+1; o > 0; o = strstr(pakfile, "/", 0)+1)
-				pakfile = substring(pakfile, o, 999);
-			WriteString(targ, pakfile);
-		}
+	if(sf & 1)
+	{
+		// flag 1 == initialization
+		WriteString(MSG_ENTITY, mapvote_screenshot_dir);
+		WriteByte(MSG_ENTITY, mapvote_count);
+		WriteByte(MSG_ENTITY, mapvote_abstain);
+		WriteByte(MSG_ENTITY, mapvote_detail);
+		WriteCoord(MSG_ENTITY, mapvote_timeout);
+		if(mapvote_count <= 8)
+			WriteByte(MSG_ENTITY, MapVote_GetMapMask());
+		else
+			WriteShort(MSG_ENTITY, MapVote_GetMapMask());
+		for(i = 0; i < mapvote_count; ++i)
+			if(mapvote_maps[i] != "")
+			{
+				WriteString(MSG_ENTITY, mapvote_maps[i]);
+				mapfile = strcat(mapvote_screenshot_dir, "/", mapvote_maps[i]);
+				pakfile = whichpack(strcat(mapfile, ".tga"));
+				if(pakfile == "")
+					pakfile = whichpack(strcat(mapfile, ".jpg"));
+				if(pakfile == "")
+					pakfile = whichpack(strcat(mapfile, ".png"));
+				print("pakfile is ", pakfile, "\n");
+				for(o = strstr(pakfile, "/", 0)+1; o > 0; o = strstr(pakfile, "/", 0)+1)
+					pakfile = substring(pakfile, o, 999);
+				WriteString(MSG_ENTITY, pakfile);
+			}
+	}
+
+	if(sf & 2)
+	{
+		// flag 2 == update of mask
+		if(mapvote_count <= 8)
+			WriteByte(MSG_ENTITY, MapVote_GetMapMask());
+		else
+			WriteShort(MSG_ENTITY, MapVote_GetMapMask());
+	}
+
+	if(sf & 4)
+	{
+		if(mapvote_detail)
+			for(i = 0; i < mapvote_count; ++i)
+				if(mapvote_maps[i] != "")
+					WriteByte(MSG_ENTITY, mapvote_votes[i]);
+
+		WriteByte(MSG_ENTITY, to.mapvote);
+	}
+
+	return TRUE;
 }
 
-void MapVote_UpdateData(float targ)
+void MapVote_Spawn()
 {
-	float i;
-	WriteByte(targ, SVC_TEMPENTITY);
-	WriteByte(targ, TE_CSQC_MAPVOTE);
-	WriteByte(targ, MAPVOTE_NET_UPDATE);
-	if(mapvote_count <= 8)
-		WriteByte(targ, MapVote_GetMapMask());
-	else
-		WriteShort(targ, MapVote_GetMapMask());
-	if(mapvote_detail)
-		for(i = 0; i < mapvote_count; ++i)
-			if(mapvote_maps[i] != "")
-				WriteByte(targ, mapvote_votes[i]);
+	mapvote_ent = spawn();
+	mapvote_ent.classname = "ent_client_mapvote";
+	mapvote_ent.SendEntity = MapVote_SendEntity;
+	setmodel(mapvote_ent, "null");
+	mapvote_ent.effects = EF_NODEPTHTEST;
 }
 
-void MapVote_TellVote(float targ, float vote)
+void MapVote_TouchMask()
 {
-	WriteByte(targ, SVC_TEMPENTITY);
-	WriteByte(targ, TE_CSQC_MAPVOTE);
-	WriteByte(targ, MAPVOTE_NET_OWNVOTE);
-	WriteByte(targ, vote);
+	mapvote_ent.SendFlags |= 2;
 }
 
+void MapVote_TouchVotes(entity voter)
+{
+	mapvote_ent.SendFlags |= 4;
+}
+
 float MapVote_Finished(float mappos)
 {
 	string result;
@@ -2200,7 +2215,7 @@
 		if(time > mapvote_keeptwotime || (mapvote_voters_real - firstPlaceVotes - secondPlaceVotes) < secondPlaceVotes)
 		{
 			float didntvote;
-			mapvote_dirty = TRUE;
+			MapVote_TouchMask();
 			mapvote_message = "Now decide between the TOP TWO!";
 			mapvote_keeptwotime = 0;
 			result = strcat(":vote:keeptwo:", mapvote_maps[firstPlace]);
@@ -2233,9 +2248,6 @@
 }
 void MapVote_Tick()
 {
-	string msgstr;
-	string tmp;
-	float i;
 	float keeptwo;
 	float totalvotes;
 
@@ -2254,9 +2266,6 @@
 			other.impulse = 0;
 			if(clienttype(other) == CLIENTTYPE_REAL)
 			{
-				if(cvar("g_maplist_textonly"))
-					stuffcmd(other, "\nin_bind 7 1 \"impulse 1\"; in_bind 7 2 \"impulse 2\"; in_bind 7 3 \"impulse 3\"; in_bind 7 4 \"impulse 4\"; in_bind 7 5 \"impulse 5\"; in_bind 7 6 \"impulse 6\"; in_bind 7 7 \"impulse 7\"; in_bind 7 8 \"impulse 8\"; in_bind 7 9 \"impulse 9\"; in_bind 7 0 \"impulse 10\"; in_bind 7 KP_1 \"impulse 1\"; in_bind 7 KP_2 \"impulse 2\"; in_bind 7 KP_3 \"impulse 3\"; in_bind 7 KP_4 \"impulse 4\"; in_bind 7 KP_5 \"impulse 5\"; in_bind 7 KP_6 \"impulse 6\"; in_bind 7 KP_7 \"impulse 7\"; in_bind 7 KP_8 \"impulse 8\"; in_bind 7 KP_9 \"impulse 9\"; in_bind 7 KP_0 \"impulse 10\"; in_bindmap 7 0\n");
-
 				msg_entity = other;
 				WriteByte(MSG_ONE, SVC_FINALE);
 				WriteString(MSG_ONE, "");
@@ -2275,11 +2284,7 @@
 			if(mapvote_maps[other.impulse - 1] != "")
 			{
 				other.mapvote = other.impulse;
-				if(mapvote_detail)
-					mapvote_dirty = TRUE;
-
-				msg_entity = other;
-				MapVote_TellVote(MSG_ONE, other.mapvote);
+				MapVote_TouchVotes(other);
 			}
 		other.impulse = 0;
 
@@ -2288,63 +2293,6 @@
 	}
 
 	MapVote_CheckRules_1(); // just count
-
-	if(!cvar("g_maplist_textonly"))
-	if(mapvote_dirty) // 1 if "keeptwo" or "impulse" happened before
-	{
-		MapVote_UpdateData(MSG_BROADCAST);
-		mapvote_dirty = FALSE;
-	}
-
-	if(cvar("g_maplist_textonly"))
-	{
-		FOR_EACH_REALCLIENT(other)
-		{
-			// display voting screen
-			msgstr = "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n";
-			msgstr = substring(msgstr, 0, strlen(msgstr) - mapvote_count);
-			if(mapvote_abstain)
-				msgstr = substring(msgstr, 1, strlen(msgstr) - 1);
-			msgstr = strcat(msgstr, mapvote_message);
-			msgstr = strcat(msgstr, "\n\n");
-			for(i = 0; i < mapvote_count; ++i)
-				if(mapvote_maps[i] == "")
-					msgstr = strcat(msgstr, "\n");
-				else
-				{
-					tmp = mapvote_maps[i];
-					tmp = strpad(mapvote_maxlen, tmp);
-					tmp = strcat(ftos(mod(i + 1, 10)), ": ", tmp);
-					if(mapvote_detail)
-					{
-						tmp = strcat(tmp, " ^2(", ftos(mapvote_votes[i]), " vote");
-						if(mapvote_votes[i] != 1)
-							tmp = strcat(tmp, "s");
-						tmp = strcat(tmp, ")");
-						tmp = strpad(mapvote_maxlen + 15, tmp);
-					}
-					if(mapvote_abstain)
-						if(i == mapvote_count - 1)
-							msgstr = strcat(msgstr, "\n");
-					if(other.mapvote == i + 1)
-						msgstr = strcat(msgstr, "^3> ", tmp, "\n");
-					else
-						msgstr = strcat(msgstr, "^7  ", tmp, "\n");
-				}
-
-			msgstr = strcat(msgstr, "\n\n^2", ftos(totalvotes), " vote");
-			if(totalvotes != 1)
-				msgstr = strcat(msgstr, "s");
-			msgstr = strcat(msgstr, " cast");
-			i = ceil(mapvote_timeout - time);
-			msgstr = strcat(msgstr, "\n", ftos(i), " second");
-			if(i != 1)
-				msgstr = strcat(msgstr, "s");
-			msgstr = strcat(msgstr, " left");
-
-			centerprint_atprio(other, CENTERPRIO_MAPVOTE, msgstr);
-		}
-	}
 }
 void MapVote_Start()
 {

Modified: branches/nexuiz-2.0/data/qcsrc/server/miscfunctions.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/miscfunctions.qc	2009-01-29 12:14:47 UTC (rev 5692)
+++ branches/nexuiz-2.0/data/qcsrc/server/miscfunctions.qc	2009-01-29 12:15:06 UTC (rev 5693)
@@ -831,6 +831,9 @@
 		weapon_action(WEP_MINSTANEX, WR_PRECACHE);
 		start_ammo_cells = cvar("g_minstagib_ammo_start");
 		g_minstagib_invis_alpha = cvar("g_minstagib_invis_alpha");
+
+		if(g_minstagib_invis_alpha <= 0)
+			g_minstagib_invis_alpha = -1;
 	}
 	else
 	{

Modified: branches/nexuiz-2.0/data/qcsrc/server/race.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/race.qc	2009-01-29 12:14:47 UTC (rev 5692)
+++ branches/nexuiz-2.0/data/qcsrc/server/race.qc	2009-01-29 12:15:06 UTC (rev 5693)
@@ -115,15 +115,7 @@
 				e.race_completed = 1;
 				MAKE_INDEPENDENT_PLAYER(e);
 				bprint(e.netname, "^7 has finished the race.\n");
-				// TODO support spectators with this (e.g. set a flag for forced sbar)
-				if(clienttype(e) == CLIENTTYPE_REAL)
-				{
-					msg_entity = e;
-					WriteByte(MSG_ONE, SVC_TEMPENTITY);
-					WriteByte(MSG_ONE, TE_CSQC_FORCESCOREBOARD);
-					WriteByte(MSG_ONE, 1);
-					// he can still move, but will see the scoreboard now
-				}
+				ClientData_Touch(e);
 			}
 		}
 	}
@@ -451,15 +443,7 @@
 		p.race_completed = 1;
 		MAKE_INDEPENDENT_PLAYER(p);
 		bprint(p.netname, "^7 has abandoned the race.\n");
-		// TODO support spectators with this (e.g. set a flag for forced sbar)
-		if(clienttype(p) == CLIENTTYPE_REAL)
-		{
-			msg_entity = p;
-			WriteByte(MSG_ONE, SVC_TEMPENTITY);
-			WriteByte(MSG_ONE, TE_CSQC_FORCESCOREBOARD);
-			WriteByte(MSG_ONE, 1);
-			// he can still move, but will see the scoreboard now
-		}
+		ClientData_Touch(p);
 	}
 }
 

Modified: branches/nexuiz-2.0/data/qcsrc/server/runematch.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/runematch.qc	2009-01-29 12:14:47 UTC (rev 5692)
+++ branches/nexuiz-2.0/data/qcsrc/server/runematch.qc	2009-01-29 12:15:06 UTC (rev 5693)
@@ -175,8 +175,7 @@
 
 	makevectors(ang);
 
-	//setorigin(self, v_forward*32);
-	self.view_ofs = v_forward*32;
+	setorigin(self, v_forward*32);
 }
 
 void rune_touch()
@@ -195,14 +194,8 @@
 
 	self.owner = other;
 	self.enemy.owner = other;
-	//setattachment(self, other, "");
-	setattachment(self, world, "");
+	setattachment(self, other, "");
 
-	self.movetype = MOVETYPE_FOLLOW;
-	self.aiment = other;
-	self.view_ofs = other.origin;
-
-	setorigin(self, '0 0 0');
 	other.runes = other.runes | self.runes | self.enemy.runes;
 
 	//self.think = SUB_Null;

Modified: branches/nexuiz-2.0/data/qcsrc/server/scores.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/scores.qc	2009-01-29 12:14:47 UTC (rev 5692)
+++ branches/nexuiz-2.0/data/qcsrc/server/scores.qc	2009-01-29 12:15:06 UTC (rev 5693)
@@ -150,29 +150,38 @@
 	}
 }
 
-void ScoreInfo_Write(float targ)
+float ScoreInfo_SendEntity(entity to, float sf)
 {
 	float i;
-	if not(scores_initialized)
-		return;
-	WriteByte(targ, SVC_TEMPENTITY);
-	WriteByte(targ, TE_CSQC_SCORESINFO);
-	WriteByte(targ, game);
+	WriteByte(MSG_ENTITY, ENT_CLIENT_SCORES_INFO);
+	WriteByte(MSG_ENTITY, game);
 	for(i = 0; i < MAX_SCORE; ++i)
 	{
-		WriteString(targ, scores_label[i]);
-		WriteByte(targ, scores_flags[i]);
+		WriteString(MSG_ENTITY, scores_label[i]);
+		WriteByte(MSG_ENTITY, scores_flags[i]);
 	}
 	for(i = 0; i < MAX_TEAMSCORE; ++i)
 	{
-		WriteString(targ, teamscores_label[i]);
-		WriteByte(targ, teamscores_flags[i]);
+		WriteString(MSG_ENTITY, teamscores_label[i]);
+		WriteByte(MSG_ENTITY, teamscores_flags[i]);
 	}
+	return TRUE;
 }
 
 void ScoreInfo_Init(float teams)
 {
-	scores_initialized = 1;
+	if(scores_initialized)
+	{
+		scores_initialized.SendFlags |= 1; // force a resend
+	}
+	else
+	{
+		scores_initialized = spawn();
+		scores_initialized.classname = "ent_client_scoreinfo";
+		scores_initialized.SendEntity = ScoreInfo_SendEntity;
+		setmodel(scores_initialized, "null");
+		scores_initialized.effects = EF_NODEPTHTEST;
+	}
 	if(teams >= 1)
 		TeamScore_Spawn(COLOR_TEAM1, "Red");
 	if(teams >= 2)
@@ -181,7 +190,6 @@
 		TeamScore_Spawn(COLOR_TEAM3, "Yellow");
 	if(teams >= 4)
 		TeamScore_Spawn(COLOR_TEAM4, "Pink");
-	ScoreInfo_Write(MSG_ALL);
 }
 
 /*

Modified: branches/nexuiz-2.0/data/qcsrc/server/scores.qh
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/scores.qh	2009-01-29 12:14:47 UTC (rev 5692)
+++ branches/nexuiz-2.0/data/qcsrc/server/scores.qh	2009-01-29 12:15:06 UTC (rev 5693)
@@ -1,4 +1,4 @@
-float scores_initialized; // 1 when scores labels/rules have been set
+entity scores_initialized; // non-world when scores labels/rules have been set
 .float scores[MAX_SCORE];
 .float teamscores[MAX_TEAMSCORE];
 
@@ -75,12 +75,6 @@
 void ScoreInfo_Init(float teams);
 
 /**
- * Writes the scores info to the given stream. Use this in ClientConnect to
- * notify newly connecting players.
- */
-void ScoreInfo_Write(float targ);
-
-/**
  * Clear ALL scores (for ready-restart).
  */
 void Score_ClearAll();

Modified: branches/nexuiz-2.0/data/qcsrc/server/t_teleporters.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/t_teleporters.qc	2009-01-29 12:14:47 UTC (rev 5692)
+++ branches/nexuiz-2.0/data/qcsrc/server/t_teleporters.qc	2009-01-29 12:15:06 UTC (rev 5693)
@@ -65,6 +65,8 @@
 	player.fixangle = TRUE;
 	player.velocity = to_velocity;
 
+	UpdateCSQCProjectile(player);
+
 	if(player.classname == "player")
 	{
 		if(player.takedamage && player.deadflag == DEAD_NO && !g_race)

Modified: branches/nexuiz-2.0/data/qcsrc/server/w_porto.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/w_porto.qc	2009-01-29 12:14:47 UTC (rev 5692)
+++ branches/nexuiz-2.0/data/qcsrc/server/w_porto.qc	2009-01-29 12:15:06 UTC (rev 5693)
@@ -219,13 +219,9 @@
 			if(!self.BUTTON_ATCK2)
 			{
 				msg_entity = self;
-				WRITESPECTATABLE_MSG_ONE_VARNAME(dummy1, {
-					WriteByte(MSG_ONE, SVC_TEMPENTITY);
-					WriteByte(MSG_ONE, TE_CSQC_HOLDANGLES);
-					WriteByte(MSG_ONE, WEP_PORTO);
-					WriteByte(MSG_ONE, 0);
-				});
 				self.porto_v_angle_held = 0;
+
+				ClientData_Touch(self);
 			}
 		}
 		else
@@ -234,15 +230,9 @@
 			{
 				self.porto_v_angle = self.v_angle;
 				msg_entity = self;
-				WRITESPECTATABLE_MSG_ONE_VARNAME(dummy2, {
-					WriteByte(MSG_ONE, SVC_TEMPENTITY);
-					WriteByte(MSG_ONE, TE_CSQC_HOLDANGLES);
-					WriteByte(MSG_ONE, WEP_PORTO);
-					WriteByte(MSG_ONE, 1);
-					WriteAngle(MSG_ONE, self.v_angle_x);
-					WriteAngle(MSG_ONE, self.v_angle_y);
-				});
 				self.porto_v_angle_held = 1;
+
+				ClientData_Touch(self);
 			}
 		}
 		v_angle_save = self.v_angle;

Modified: branches/nexuiz-2.0/data/qcsrc/server/w_rocketlauncher.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/w_rocketlauncher.qc	2009-01-29 12:14:47 UTC (rev 5692)
+++ branches/nexuiz-2.0/data/qcsrc/server/w_rocketlauncher.qc	2009-01-29 12:15:06 UTC (rev 5693)
@@ -238,7 +238,7 @@
 	missile.cnt = time + cvar("g_balance_rocketlauncher_lifetime");
 	missile.flags = FL_PROJECTILE;
 
-	CSQCProjectile(missile, cvar("g_balance_rocketlauncher_speedaccel") == 0 && cvar("g_laserguided_missiles") == 0, PROJECTILE_ROCKET);
+	CSQCProjectile(missile, cvar("g_balance_rocketlauncher_speedaccel") == 0 && !g_laserguided_missile, PROJECTILE_ROCKET);
 	missile.effects |= EF_NODEPTHTEST; // because of fly sound
 
 	// muzzle flash for 1st person view

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

Modified: branches/nexuiz-2.0/data/sound/misc/armor1.wav
===================================================================
(Binary files differ)

Modified: branches/nexuiz-2.0/data/sound/misc/bodyimpact1.wav
===================================================================
(Binary files differ)

Modified: branches/nexuiz-2.0/data/sound/misc/bodyimpact2.wav
===================================================================
(Binary files differ)

Modified: branches/nexuiz-2.0/data/sound/misc/gib_splat01.wav
===================================================================
(Binary files differ)

Modified: branches/nexuiz-2.0/data/sound/misc/gib_splat02.wav
===================================================================
(Binary files differ)

Modified: branches/nexuiz-2.0/data/sound/misc/gib_splat03.wav
===================================================================
(Binary files differ)

Modified: branches/nexuiz-2.0/data/sound/misc/gib_splat04.wav
===================================================================
(Binary files differ)

Modified: branches/nexuiz-2.0/data/sound/misc/hit.wav
===================================================================
(Binary files differ)

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

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

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

Copied: branches/nexuiz-2.0/misc/tools/shader-checksums.pl (from rev 5690, trunk/misc/tools/shader-checksums.pl)
===================================================================
--- branches/nexuiz-2.0/misc/tools/shader-checksums.pl	                        (rev 0)
+++ branches/nexuiz-2.0/misc/tools/shader-checksums.pl	2009-01-29 12:15:06 UTC (rev 5693)
@@ -0,0 +1,46 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+use Digest::MD5;
+
+my $shadertext = "";
+my $level = 0;
+my $curshader;
+while(<STDIN>)
+{
+	s/\r//gs;
+	chomp;
+
+	s/\/\/.*//s;
+	s/^\s+//;
+	s/\s+$//;
+	next if /^$/;
+
+	my @line = map { s/"//g; $_; } split /\s+/, $_;
+
+	$shadertext .= "@line\n";
+
+	if($line[0] eq '{')
+	{
+		++$level;
+	}
+	elsif($line[0] eq '}')
+	{
+		--$level;
+		if($level <= 0)
+		{
+			$level = 0;
+			if(defined $curshader)
+			{
+				printf "%s  %s\n", Digest::MD5::md5_hex($shadertext), $curshader;
+			}
+			$curshader = undef;
+		}
+	}
+	elsif($level == 0)
+	{
+		$curshader = $line[0];
+		$shadertext = "";
+	}
+}

Modified: branches/nexuiz-2.0/server/rcon.pl
===================================================================
--- branches/nexuiz-2.0/server/rcon.pl	2009-01-29 12:14:47 UTC (rev 5692)
+++ branches/nexuiz-2.0/server/rcon.pl	2009-01-29 12:15:06 UTC (rev 5693)
@@ -128,9 +128,9 @@
 sub color_rgb2basic($)
 {
 	my ($data) = @_;
-	my ($r, $g, $b) = @$data;
-	my $min = [sort ($r, $g, $b)]->[0];
-	my $max = [sort ($r, $g, $b)]->[-1];
+	my ($R, $G, $B) = @$data;
+	my $min = [sort { $a <=> $b } ($R, $G, $B)]->[0];
+	my $max = [sort { $a <=> $b } ($R, $G, $B)]->[-1];
 
 	my $v = $max / 15;
 	my $s = ($max == $min) ? 0 : 1 - $min/$max;
@@ -146,17 +146,17 @@
 	{
 		$h = 0;
 	}
-	elsif($max == $r)
+	elsif($max == $R)
 	{
-		$h = (60 * ($g - $b) / ($max - $min)) % 360;
+		$h = (60 * ($G - $B) / ($max - $min)) % 360;
 	}
-	elsif($max == $g)
+	elsif($max == $G)
 	{
-		$h = (60 * ($b - $r) / ($max - $min)) + 120;
+		$h = (60 * ($B - $R) / ($max - $min)) + 120;
 	}
-	elsif($max == $b)
+	elsif($max == $B)
 	{
-		$h = (60 * ($r - $g) / ($max - $min)) + 240;
+		$h = (60 * ($R - $G) / ($max - $min)) + 240;
 	}
 
 	return 1 if $h < 36;

Modified: branches/nexuiz-2.0/server/rcon2irc/rcon2irc.pl
===================================================================
--- branches/nexuiz-2.0/server/rcon2irc/rcon2irc.pl	2009-01-29 12:14:47 UTC (rev 5692)
+++ branches/nexuiz-2.0/server/rcon2irc/rcon2irc.pl	2009-01-29 12:15:06 UTC (rev 5693)
@@ -129,9 +129,9 @@
 sub color_rgb2basic($)
 {
 	my ($data) = @_;
-	my ($r, $g, $b) = @$data;
-	my $min = [sort ($r, $g, $b)]->[0];
-	my $max = [sort ($r, $g, $b)]->[-1];
+	my ($R, $G, $B) = @$data;
+	my $min = [sort { $a <=> $b } ($R, $G, $B)]->[0];
+	my $max = [sort { $a <=> $b } ($R, $G, $B)]->[-1];
 
 	my $v = $max / 15;
 	my $s = ($max == $min) ? 0 : 1 - $min/$max;
@@ -147,17 +147,17 @@
 	{
 		$h = 0;
 	}
-	elsif($max == $r)
+	elsif($max == $R)
 	{
-		$h = (60 * ($g - $b) / ($max - $min)) % 360;
+		$h = (60 * ($G - $B) / ($max - $min)) % 360;
 	}
-	elsif($max == $g)
+	elsif($max == $G)
 	{
-		$h = (60 * ($b - $r) / ($max - $min)) + 120;
+		$h = (60 * ($B - $R) / ($max - $min)) + 120;
 	}
-	elsif($max == $b)
+	elsif($max == $B)
 	{
-		$h = (60 * ($r - $g) / ($max - $min)) + 240;
+		$h = (60 * ($R - $G) / ($max - $min)) + 240;
 	}
 
 	return 1 if $h < 36;




More information about the nexuiz-commits mailing list