[nexuiz-commits] r6762 - in branches/nexuiz-2.0: . data data/gfx data/models/onslaught data/models/sprites data/qcsrc/client data/qcsrc/common data/qcsrc/menu/nexuiz data/qcsrc/server data/scripts data/sound/misc data/sound/onslaught data/textures misc/mediasource misc/netradiant-NexuizPack/nexuiz.game/data misc/tools server/rcon2irc

DONOTREPLY at icculus.org DONOTREPLY at icculus.org
Sun May 24 05:17:59 EDT 2009


Author: div0
Date: 2009-05-24 05:17:59 -0400 (Sun, 24 May 2009)
New Revision: 6762

Added:
   branches/nexuiz-2.0/data/models/onslaught/boom.md3
   branches/nexuiz-2.0/data/models/onslaught/gen_gib1.md3
   branches/nexuiz-2.0/data/models/onslaught/gen_gib2.md3
   branches/nexuiz-2.0/data/models/onslaught/gen_gib3.md3
   branches/nexuiz-2.0/data/models/onslaught/generator_dmg3.md3
   branches/nexuiz-2.0/data/models/onslaught/generator_dmg4.md3
   branches/nexuiz-2.0/data/models/onslaught/generator_dmg5.md3
   branches/nexuiz-2.0/data/models/onslaught/generator_dmg6.md3
   branches/nexuiz-2.0/data/models/onslaught/generator_dmg7.md3
   branches/nexuiz-2.0/data/models/onslaught/generator_dmg8.md3
   branches/nexuiz-2.0/data/models/onslaught/generator_dmg9.md3
   branches/nexuiz-2.0/data/models/onslaught/shockwave.md3
   branches/nexuiz-2.0/data/models/onslaught/shockwave2.md3
   branches/nexuiz-2.0/data/models/onslaught/shockwavetransring.md3
   branches/nexuiz-2.0/data/models/onslaught/shockwavetranssphere.md3
   branches/nexuiz-2.0/data/models/sprites/item-extralife_frame0.tga
   branches/nexuiz-2.0/data/models/sprites/item-extralife_frame1.tga
   branches/nexuiz-2.0/data/models/sprites/item-fuelregen_frame0.tga
   branches/nexuiz-2.0/data/models/sprites/item-fuelregen_frame1.tga
   branches/nexuiz-2.0/data/models/sprites/item-invis_frame0.tga
   branches/nexuiz-2.0/data/models/sprites/item-invis_frame1.tga
   branches/nexuiz-2.0/data/models/sprites/item-jetpack_frame0.tga
   branches/nexuiz-2.0/data/models/sprites/item-jetpack_frame1.tga
   branches/nexuiz-2.0/data/models/sprites/item-shield_frame0.tga
   branches/nexuiz-2.0/data/models/sprites/item-shield_frame1.tga
   branches/nexuiz-2.0/data/models/sprites/item-speed_frame0.tga
   branches/nexuiz-2.0/data/models/sprites/item-speed_frame1.tga
   branches/nexuiz-2.0/data/models/sprites/item-strength_frame0.tga
   branches/nexuiz-2.0/data/models/sprites/item-strength_frame1.tga
   branches/nexuiz-2.0/data/sound/misc/itemrespawncountdown.ogg
   branches/nexuiz-2.0/data/sound/onslaught/shockwave.ogg
   branches/nexuiz-2.0/data/textures/generator.tga
   branches/nexuiz-2.0/data/textures/generator_destroyed.tga
   branches/nexuiz-2.0/data/textures/generator_gloss.tga
   branches/nexuiz-2.0/data/textures/generator_glow.tga
   branches/nexuiz-2.0/data/textures/generator_lightning.tga
   branches/nexuiz-2.0/data/textures/generator_lightning2.tga
   branches/nexuiz-2.0/data/textures/generator_norm.tga
   branches/nexuiz-2.0/data/textures/generator_pants.tga
   branches/nexuiz-2.0/data/textures/ons_boom1.tga
   branches/nexuiz-2.0/data/textures/ons_gengib.tga
   branches/nexuiz-2.0/data/textures/ons_shockwave1.tga
   branches/nexuiz-2.0/data/textures/ons_shockwave2.tga
   branches/nexuiz-2.0/data/textures/ons_smoke1.tga
   branches/nexuiz-2.0/misc/mediasource/sb_str_inv.xcf
   branches/nexuiz-2.0/misc/tools/hitplot2tga.c
Removed:
   branches/nexuiz-2.0/data/textures/core.tga
   branches/nexuiz-2.0/data/textures/core_dmg1.tga
   branches/nexuiz-2.0/data/textures/core_dmg1_glow.tga
   branches/nexuiz-2.0/data/textures/core_dmg2.tga
   branches/nexuiz-2.0/data/textures/core_dmg2_glow.tga
   branches/nexuiz-2.0/data/textures/core_gloss.tga
   branches/nexuiz-2.0/data/textures/core_glow.tga
   branches/nexuiz-2.0/data/textures/reactor.jpg
   branches/nexuiz-2.0/data/textures/reactor.tga
   branches/nexuiz-2.0/data/textures/reactor_dead.tga
   branches/nexuiz-2.0/data/textures/reactor_dmg1.tga
   branches/nexuiz-2.0/data/textures/reactor_dmg1_glow.tga
   branches/nexuiz-2.0/data/textures/reactor_dmg1_shirt.tga
   branches/nexuiz-2.0/data/textures/reactor_dmg2.tga
   branches/nexuiz-2.0/data/textures/reactor_dmg2_glow.tga
   branches/nexuiz-2.0/data/textures/reactor_dmg2_shirt.tga
   branches/nexuiz-2.0/data/textures/reactor_glow.tga
   branches/nexuiz-2.0/data/textures/reactor_shirt.tga
Modified:
   branches/nexuiz-2.0/.patchsets
   branches/nexuiz-2.0/data/build-compat-pack.sh
   branches/nexuiz-2.0/data/defaultNexuiz.cfg
   branches/nexuiz-2.0/data/gfx/sb_invinc.tga
   branches/nexuiz-2.0/data/gfx/sb_str.tga
   branches/nexuiz-2.0/data/models/onslaught/generator.md3
   branches/nexuiz-2.0/data/models/onslaught/generator_dead.md3
   branches/nexuiz-2.0/data/models/onslaught/generator_dmg1.md3
   branches/nexuiz-2.0/data/models/onslaught/generator_dmg2.md3
   branches/nexuiz-2.0/data/models/sprites/make-sprites.sh
   branches/nexuiz-2.0/data/qcsrc/client/Main.qc
   branches/nexuiz-2.0/data/qcsrc/client/main.qh
   branches/nexuiz-2.0/data/qcsrc/client/sbar.qc
   branches/nexuiz-2.0/data/qcsrc/client/teamradar.qc
   branches/nexuiz-2.0/data/qcsrc/client/waypointsprites.qc
   branches/nexuiz-2.0/data/qcsrc/common/constants.qh
   branches/nexuiz-2.0/data/qcsrc/common/items.qc
   branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/dialog_singleplayer.c
   branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/maplist.c
   branches/nexuiz-2.0/data/qcsrc/server/cl_client.qc
   branches/nexuiz-2.0/data/qcsrc/server/cl_impulse.qc
   branches/nexuiz-2.0/data/qcsrc/server/cl_player.qc
   branches/nexuiz-2.0/data/qcsrc/server/cl_weapons.qc
   branches/nexuiz-2.0/data/qcsrc/server/cl_weaponsystem.qc
   branches/nexuiz-2.0/data/qcsrc/server/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/extensions.qh
   branches/nexuiz-2.0/data/qcsrc/server/func_breakable.qc
   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/mode_onslaught.qc
   branches/nexuiz-2.0/data/qcsrc/server/t_items.qc
   branches/nexuiz-2.0/data/qcsrc/server/w_campingrifle.qc
   branches/nexuiz-2.0/data/qcsrc/server/w_hook.qc
   branches/nexuiz-2.0/data/qcsrc/server/w_porto.qc
   branches/nexuiz-2.0/data/scripts/entities.def
   branches/nexuiz-2.0/data/scripts/onslaught.shader
   branches/nexuiz-2.0/data/weapons.cfg
   branches/nexuiz-2.0/data/weaponsHavoc.cfg
   branches/nexuiz-2.0/misc/netradiant-NexuizPack/nexuiz.game/data/entities.def
   branches/nexuiz-2.0/server/rcon2irc/rbiserver.pl
Log:
r6698 | greenmarine | 2009-05-10 12:19:30 +0200 (Sun, 10 May 2009) | 1 line
fix issue 19
r6699 | morphed | 2009-05-10 17:25:17 +0200 (Sun, 10 May 2009) | 1 line
missing shader for onslaught
r6700 | div0 | 2009-05-10 20:56:07 +0200 (Sun, 10 May 2009) | 2 lines
hitplot writing
r6701 | div0 | 2009-05-10 21:09:43 +0200 (Sun, 10 May 2009) | 2 lines
hit plot fix of closing file handle -1
r6702 | div0 | 2009-05-10 21:20:37 +0200 (Sun, 10 May 2009) | 2 lines
fix two bugs in hitplotting
r6703 | div0 | 2009-05-11 12:24:18 +0200 (Mon, 11 May 2009) | 2 lines
handle antilag for bots correctly for hitplot purposes
r6704 | div0 | 2009-05-11 13:30:50 +0200 (Mon, 11 May 2009) | 2 lines
hitplot to tga tool
r6705 | div0 | 2009-05-11 14:34:11 +0200 (Mon, 11 May 2009) | 2 lines
hit plots: also print weapon number
r6706 | div0 | 2009-05-11 20:33:07 +0200 (Mon, 11 May 2009) | 2 lines
hook now takes fuel
r6707 | div0 | 2009-05-11 21:05:01 +0200 (Mon, 11 May 2009) | 2 lines
fix stupid typo in HUD score defintiion
r6708 | div0 | 2009-05-11 21:09:20 +0200 (Mon, 11 May 2009) | 2 lines
hooked: less ammo (so you can always hook twice with one hook pickup)
r6709 | div0 | 2009-05-12 12:16:09 +0200 (Tue, 12 May 2009) | 4 lines
testing:
randomize powerup respawns by 10 seconds
show powerup respawns in advance by 5 seconds (and play a countdown sound)
r6710 | div0 | 2009-05-12 12:18:08 +0200 (Tue, 12 May 2009) | 2 lines
cvar check :P
r6711 | div0 | 2009-05-12 12:31:07 +0200 (Tue, 12 May 2009) | 2 lines
fix shield sprite
r6712 | div0 | 2009-05-12 12:34:09 +0200 (Tue, 12 May 2009) | 2 lines
new compat pack :P
r6713 | div0 | 2009-05-12 12:49:43 +0200 (Tue, 12 May 2009) | 2 lines
use grey for jetpack, not orange
r6714 | div0 | 2009-05-12 13:14:58 +0200 (Tue, 12 May 2009) | 2 lines
fix respawn display of teamed items
r6715 | div0 | 2009-05-12 13:23:31 +0200 (Tue, 12 May 2009) | 2 lines
fix team radar pings
r6716 | div0 | 2009-05-12 14:01:04 +0200 (Tue, 12 May 2009) | 2 lines
remove <err.h> dependency to make it compile on stupid operating systems too
r6717 | div0 | 2009-05-12 14:02:07 +0200 (Tue, 12 May 2009) | 2 lines
also implement errx
r6718 | div0 | 2009-05-12 15:35:36 +0200 (Tue, 12 May 2009) | 2 lines
compat pack missed a file
r6719 | div0 | 2009-05-12 17:16:41 +0200 (Tue, 12 May 2009) | 3 lines
items: randomize initial spawn of powerups fully
regeneration: always regenerate fuel, even in LMS
r6720 | div0 | 2009-05-12 21:31:40 +0200 (Tue, 12 May 2009) | 2 lines
the "noobhud": a HUD that does not show armor and health, but instead shows which of the two is "larger", and how much total damage you survive
r6721 | div0 | 2009-05-12 23:25:49 +0200 (Tue, 12 May 2009) | 2 lines
fix typos in hudselector 2
r6723 | div0 | 2009-05-13 00:07:08 +0200 (Wed, 13 May 2009) | 2 lines
new strength/invincible images
r6724 | div0 | 2009-05-13 00:07:15 +0200 (Wed, 13 May 2009) | 2 lines
new strength/invincible images
r6725 | div0 | 2009-05-13 00:14:45 +0200 (Wed, 13 May 2009) | 2 lines
make strength/invincible countdown look better with the new pics
r6726 | div0 | 2009-05-13 00:17:43 +0200 (Wed, 13 May 2009) | 2 lines
updated xcf
r6727 | div0 | 2009-05-13 00:18:08 +0200 (Wed, 13 May 2009) | 2 lines
make these pics poweroftwo while I'm at it
r6728 | div0 | 2009-05-13 00:43:56 +0200 (Wed, 13 May 2009) | 2 lines
debrisskin parameter to func_breakable
r6729 | morphed | 2009-05-13 01:38:05 +0200 (Wed, 13 May 2009) | 1 line
new generator model, with damage models and small code changes for it
r6730 | div0 | 2009-05-13 11:57:49 +0200 (Wed, 13 May 2009) | 2 lines
turn off intermission cdtrack to fix #214
r6731 | div0 | 2009-05-13 21:40:16 +0200 (Wed, 13 May 2009) | 2 lines
fix compat pack building
r6732 | div0 | 2009-05-14 11:22:35 +0200 (Thu, 14 May 2009) | 2 lines
print pure check details to IRC
r6733 | div0 | 2009-05-14 14:34:24 +0200 (Thu, 14 May 2009) | 2 lines
make maxplayers at least bot_number+1
r6734 | mrbougo | 2009-05-15 16:29:33 +0200 (Fri, 15 May 2009) | 1 line
someone forgot to merge the entities
r6735 | div0 | 2009-05-16 16:58:20 +0200 (Sat, 16 May 2009) | 2 lines
forbid LOD models if ALLOW_VARIABLE_LOD is set
r6736 | div0 | 2009-05-16 20:14:43 +0200 (Sat, 16 May 2009) | 2 lines
I have no idea why this logic needs inverting, but it does. But then, this code apparently never worked in 2.5 or 2.5.1.
r6737 | div0 | 2009-05-16 20:38:21 +0200 (Sat, 16 May 2009) | 2 lines
print which item you picked up if you pick up jetpack; fallback to fuel if an item jetpack or fuel regen would be useless
r6738 | div0 | 2009-05-16 21:29:09 +0200 (Sat, 16 May 2009) | 2 lines
don't ask me why - put the condition back. maybe a temporary engien bug?
r6739 | div0 | 2009-05-17 21:40:49 +0200 (Sun, 17 May 2009) | 2 lines
now the trolls have done it. An official "mute" and "unmute" command.
r6740 | morphed | 2009-05-18 02:23:15 +0200 (Mon, 18 May 2009) | 1 line
onslaught sfx assets
r6741 | mand1nga | 2009-05-18 17:11:47 +0200 (Mon, 18 May 2009) | 1 line
Shockwave sound by m0rphed
r6742 | mand1nga | 2009-05-18 19:30:04 +0200 (Mon, 18 May 2009) | 1 line
Updated ons effects by //\//\0rph3d
r6743 | mand1nga | 2009-05-18 19:33:30 +0200 (Mon, 18 May 2009) | 1 line
New generator explosion for Onslaught
r6744 | mand1nga | 2009-05-18 19:34:09 +0200 (Mon, 18 May 2009) | 1 line
Updated sound by morphed
r6745 | div0 | 2009-05-20 19:30:14 +0200 (Wed, 20 May 2009) | 3 lines
new supercontents flags: BOTCLIP (matching Q3's botclip), and OPAQUE (matching anything fully opaque, good for line-of-sight checks)
impulse 146 as a test for it
r6746 | mand1nga | 2009-05-21 01:27:25 +0200 (Thu, 21 May 2009) | 1 line
Fix typo


Modified: branches/nexuiz-2.0/.patchsets
===================================================================
--- branches/nexuiz-2.0/.patchsets	2009-05-24 09:11:30 UTC (rev 6761)
+++ branches/nexuiz-2.0/.patchsets	2009-05-24 09:17:59 UTC (rev 6762)
@@ -1,2 +1,2 @@
 master = svn://svn.icculus.org/nexuiz/trunk
-revisions_applied = 1-6697
+revisions_applied = 1-6721,6723-6746

Modified: branches/nexuiz-2.0/data/build-compat-pack.sh
===================================================================
--- branches/nexuiz-2.0/data/build-compat-pack.sh	2009-05-24 09:11:30 UTC (rev 6761)
+++ branches/nexuiz-2.0/data/build-compat-pack.sh	2009-05-24 09:17:59 UTC (rev 6762)
@@ -4,1287 +4,52 @@
 
 COMPAT_FILES="
 	effectinfo.txt
-	gfx/aggressor_radar.tga
-	gfx/aneurysm_radar.tga
-	gfx/basementctf_radar.tga
-	gfx/bleach_radar.tga
-	gfx/bloodprisonctf_radar.tga
-	gfx/bloodprison_radar.tga
-	gfx/bluesky_radar.tga
-	gfx/dieselpower_radar.tga
-	gfx/dismal_radar.tga
-	gfx/final_rage_radar.tga
-	gfx/inv_weapon10.tga
-	gfx/inv_weapon11.tga
-	gfx/inv_weapon12.tga
-	gfx/inv_weapon13.tga
-	gfx/inv_weapon14.tga
-	gfx/inv_weapon9.tga
-	gfx/keys/key_backward.tga
-	gfx/keys/key_bg.tga
-	gfx/keys/key_crouch.tga
-	gfx/keys/key_forward.tga
-	gfx/keys/key_jump.tga
-	gfx/keys/key_left.tga
-	gfx/keys/key_right.tga
-	gfx/reslimed_radar.tga
-	gfx/runningman_1on1remix_radar.tga
-	gfx/runningmanctf_radar.tga
-	gfx/runningman_radar.tga
-	gfx/sb_flag_blue_shielded.tga
-	gfx/sb_flag_red_shielded.tga
-	gfx/sb_kh_full.tga
-	gfx/sb_kh_outline.tga
-	gfx/sb_player_ready.tga
-	gfx/sb_playercolor_base.tga
-	gfx/sb_playercolor_pants.tga
-	gfx/sb_playercolor_shirt.tga
-	gfx/silvercity_radar.tga
-	gfx/stormkeep_radar.tga
-	gfx/strength_radar.tga
-	gfx/teamradar_icon_1.tga
-	gfx/teamradar_icon_2.tga
-	gfx/teamradar_ping.tga
-	gfx/toxic_radar.tga
-	gfx/warfare_radar.tga
-	maps/eggandbacon.bsp
-	models/ctf/flags.md3
-	models/ctf/flags.md3_0.skin
-	models/ctf/flags.md3_1.skin
-	models/hlac_bullet.md3
-	models/hlac_bullet.tga
-	models/player/carni.zym.sounds
-	models/player/headhunter.zym.sounds
-	models/player/insurrectionist.zym.sounds
-	models/player/lurk.zym.sounds
-	models/player/lycanthrope.zym.sounds
-	models/player/marine.zym.sounds
-	models/player/nexus.zym.sounds
-	models/player/pyria.zym.sounds
-	models/player/shock.zym.sounds
-	models/player/skadi.zym.sounds
-	models/player/specop.zym.sounds
-	models/player/visitant.zym.sounds
-	models/player/xolar.zym.sounds
-	models/portal.md3
-	models/portal.md3_0.skin
-	models/portal.md3_1.skin
-	models/portal.md3_2.skin
-	models/sprites/as-defend_frame0.tga
-	models/sprites/as-destroy_frame0.tga
-	models/sprites/as-push_frame0.tga
-	models/sprites/bluebase.tga
-	models/sprites/danger.tga
-	models/sprites/defend.tga
-	models/sprites/destroy.tga
-	models/sprites/flagcarrier.tga
-	models/sprites/helpme.tga
-	models/sprites/here.tga
-	models/sprites/keycarrier-blue.tga
-	models/sprites/keycarrier-finish.tga
-	models/sprites/keycarrier-friend.tga
-	models/sprites/keycarrier-pink.tga
-	models/sprites/keycarrier-red.tga
-	models/sprites/keycarrier-yellow.tga
-	models/sprites/key-dropped.tga
-	models/sprites/ons-cp-atck-blue_frame0.tga
-	models/sprites/ons-cp-atck-blue_frame1.tga
-	models/sprites/ons-cp-atck-neut_frame0.tga
-	models/sprites/ons-cp-atck-neut_frame1.tga
-	models/sprites/ons-cp-atck-red_frame0.tga
-	models/sprites/ons-cp-atck-red_frame1.tga
-	models/sprites/ons-cp-blue.tga
-	models/sprites/ons-cp-dfnd-blue_frame0.tga
-	models/sprites/ons-cp-dfnd-blue_frame1.tga
-	models/sprites/ons-cp-dfnd-red_frame0.tga
-	models/sprites/ons-cp-dfnd-red_frame1.tga
-	models/sprites/ons-cp-neut.tga
-	models/sprites/ons-cp-red.tga
-	models/sprites/ons-gen-blue.tga
-	models/sprites/ons-gen-red.tga
-	models/sprites/ons-gen-shielded.tga
-	models/sprites/push.tga
-	models/sprites/race-checkpoint.sp2
-	models/sprites/race-checkpoint.tga
-	models/sprites/race-finish.sp2
-	models/sprites/race-finish.tga
-	models/sprites/redbase.tga
-	models/sprites/waypoint.tga
-	models/sprites/wpn-campingrifle_frame0.tga
-	models/sprites/wpn-crylink_frame0.tga
-	models/sprites/wpn-electro_frame0.tga
-	models/sprites/wpn-gl_frame0.tga
-	models/sprites/wpn-hagar_frame0.tga
-	models/sprites/wpn-hlac_frame0.tga
-	models/sprites/wpn-hookgun_frame0.tga
-	models/sprites/wpn-laser_frame0.tga
-	models/sprites/wpn-minstanex_frame0.tga
-	models/sprites/wpn-nex_frame0.tga
-	models/sprites/wpn-porto_frame0.tga
-	models/sprites/wpn-rl_frame0.tga
-	models/sprites/wpn-seeker_frame0.tga
-	models/sprites/wpn-shotgun_frame0.tga
-	models/sprites/wpn-uzi_frame0.tga
-	models/tagrocket.md3
-	models/tagrocket.tga
-	models/turrets/base-gib1.md3
-	models/turrets/base-gib2.md3
-	models/turrets/base-gib3.md3
-	models/turrets/base-gib4.md3
-	models/turrets/base.md3
-	models/turrets/c512.md3
-	models/turrets/c8.md3
-	models/turrets/flac.md3
-	models/turrets/fusion_top.md3
-	models/turrets/fusreac.md3
-	models/turrets/head-gib1.md3
-	models/turrets/head-gib2.md3
-	models/turrets/head-gib3.md3
-	models/turrets/head-gib4.md3
-	models/turrets/hellion.md3
-	models/turrets/hk.md3
-	models/turrets/hunter2.md3
-	models/turrets/machinegun.md3
-	models/turrets/mlrs.md3
-	models/turrets/mlrs_rocket.md3
-	models/turrets/pd_proj.md3
-	models/turrets/phaser_beam.md3
-	models/turrets/phaser.md3
-	models/turrets/plasmad.md3
-	models/turrets/plasma.md3
-	models/turrets/reactor.md3
-	models/turrets/rocket.md3
-	models/turrets/tesla_base.md3
-	models/turrets/tesla_head.md3
-	models/turrets/tesla.md3
-	models/turrets/walker_body.md3
-	models/turrets/walker_head_minigun.md3
-	models/turrets/walker_mghead.md3
-	models/turrets/walker_props.md3
-	models/turrets/walker_spawn.md3
-	models/weapons/g_campingrifle.md3
-	models/weapons/g_hlac.md3
-	models/weapons/g_hookgun.md3
-	models/weapons/g_minstanex.md3
-	models/weapons/g_porto.md3
-	models/weapons/g_seeker.md3
-	models/weapons/h_campingrifle.dpm
-	models/weapons/h_campingrifle.dpm.animinfo
-	models/weapons/h_crylink.dpm
-	models/weapons/h_crylink.dpm.animinfo
-	models/weapons/h_electro.dpm
-	models/weapons/h_electro.dpm.animinfo
-	models/weapons/h_gl.dpm
-	models/weapons/h_gl.dpm.animinfo
-	models/weapons/h_hagar.dpm
-	models/weapons/h_hagar.dpm.animinfo
-	models/weapons/h_hlac.dpm
-	models/weapons/h_hlac.dpm.animinfo
-	models/weapons/h_hookgun.dpm
-	models/weapons/h_hookgun.dpm.animinfo
-	models/weapons/h_laser.dpm
-	models/weapons/h_laser.dpm.animinfo
-	models/weapons/h_minstanex.dpm
-	models/weapons/h_minstanex.dpm.animinfo
-	models/weapons/h_nex.dpm
-	models/weapons/h_nex.dpm.animinfo
-	models/weapons/h_porto.dpm
-	models/weapons/h_porto.dpm.animinfo
-	models/weapons/h_rl.dpm
-	models/weapons/h_rl.dpm.animinfo
-	models/weapons/h_seeker.dpm
-	models/weapons/h_seeker.dpm.animinfo
-	models/weapons/h_shotgun.dpm
-	models/weapons/h_shotgun.dpm.animinfo
-	models/weapons/h_uzi.dpm
-	models/weapons/h_uzi.dpm.animinfo
-	models/weapons/v_campingrifle.md3
-	models/weapons/v_hlac.md3
-	models/weapons/v_hookgun.md3
-	models/weapons/v_minstanex.md3
-	models/weapons/v_porto.md3
-	models/weapons/v_seeker.md3
-	particles/particlefont.tga
-	scripts/eggandbacon.shader
-	scripts/egyptsoc.shader
-	scripts/flags.shader
-	scripts/hlac.shader
-	scripts/portals.shader
-	sound/announcer/male/airshot.ogg
-	sound/announcer/male/electrobitch.ogg
-	sound/announcer/male/headshot.ogg
-	sound/announcer/male/impressive.ogg
-	sound/announcer/male/yoda.ogg
-	sound/ctf/bluecapture.ogg
-	sound/ctf/redcapture.ogg
-	sound/ctf/respawn.wav
-	sound/ctf/return.wav
-	sound/ctf/take.wav
-	sound/domination/claim.wav
-	sound/kh/alarm.wav
-	sound/kh/capture.wav
-	sound/kh/collect.wav
-	sound/kh/destroy.wav
-	sound/kh/drop.wav
-	sound/misc/armor10.wav
-	sound/misc/armor1.wav
+	sound/misc/itemrespawncountdown.ogg
 	sound/misc/armor25.wav
-	sound/misc/footstep01.wav
-	sound/misc/footstep02.wav
-	sound/misc/footstep03.wav
-	sound/misc/footstep04.wav
-	sound/misc/footstep05.wav
-	sound/misc/footstep06.wav
-	sound/misc/gib.wav
-	sound/misc/hitground1.ogg
-	sound/misc/hitground2.ogg
-	sound/misc/hitground3.ogg
-	sound/misc/hitground4.ogg
-	sound/misc/hit.wav
-	sound/misc/itempickup.ogg
-	sound/misc/jumppad.ogg
-	sound/misc/mediumhealth.ogg
-	sound/misc/metalfootstep01.wav
-	sound/misc/metalfootstep02.wav
-	sound/misc/metalfootstep03.wav
-	sound/misc/metalfootstep04.wav
-	sound/misc/metalfootstep05.wav
-	sound/misc/metalfootstep06.wav
-	sound/misc/metalhitground1.ogg
-	sound/misc/metalhitground2.ogg
-	sound/misc/metalhitground3.ogg
-	sound/misc/metalhitground4.ogg
-	sound/misc/minihealth.ogg
-	sound/misc/powerup.ogg
-	sound/misc/powerup_shield.ogg
-	sound/misc/typehit.wav
-	sound/player/carni-lycan/coms/attackinfive.ogg
-	sound/player/carni-lycan/coms/attack.ogg
-	sound/player/carni-lycan/coms/coverme.ogg
-	sound/player/carni-lycan/coms/defend.ogg
-	sound/player/carni-lycan/coms/freelance1.ogg
-	sound/player/carni-lycan/coms/freelance2.ogg
-	sound/player/carni-lycan/coms/incoming.ogg
-	sound/player/carni-lycan/coms/meet.ogg
-	sound/player/carni-lycan/coms/needhelp1.ogg
-	sound/player/carni-lycan/coms/seenflag.ogg
-	sound/player/carni-lycan/coms/taunt1.ogg
-	sound/player/carni-lycan/coms/taunt2.ogg
-	sound/player/carni-lycan/coms/taunt3.ogg
-	sound/player/carni-lycan/coms/teamshoot1.ogg
-	sound/player/carni-lycan/coms/teamshoot2.ogg
-	sound/player/carni-lycan/coms/teamshoot3.ogg
-	sound/player/carni-lycan/player/death1.ogg
-	sound/player/carni-lycan/player/death2.ogg
-	sound/player/carni-lycan/player/death3.ogg
-	sound/player/carni-lycan/player/drown.ogg
-	sound/player/carni-lycan/player/fall1.ogg
-	sound/player/carni-lycan/player/falling.ogg
-	sound/player/carni-lycan/player/gasp.ogg
-	sound/player/carni-lycan/player/jump.ogg
-	sound/player/carni-lycan/player/pain100.ogg
-	sound/player/carni-lycan/player/pain25.ogg
-	sound/player/carni-lycan/player/pain50.ogg
-	sound/player/carni-lycan/player/pain75.ogg
-	sound/player/default.sounds
-	sound/player/fricka/coms/attackinfive.ogg
-	sound/player/fricka/coms/attack.ogg
-	sound/player/fricka/coms/coverme.ogg
-	sound/player/fricka/coms/defend.ogg
-	sound/player/fricka/coms/flagseen.ogg
-	sound/player/fricka/coms/freelance1.ogg
-	sound/player/fricka/coms/freelance2.ogg
-	sound/player/fricka/coms/incoming.ogg
-	sound/player/fricka/coms/taunt1.ogg
-	sound/player/fricka/coms/taunt2.ogg
-	sound/player/fricka/coms/taunt3.ogg
-	sound/player/fricka/coms/taunt4.ogg
-	sound/player/fricka/coms/teamshoot1.ogg
-	sound/player/fricka/coms/teamshoot2.ogg
-	sound/player/fricka/coms/teamshoot3.ogg
-	sound/player/fricka/coms/waypoint.ogg
-	sound/player/fricka/player/death1.ogg
-	sound/player/fricka/player/death2.ogg
-	sound/player/fricka/player/death3.ogg
-	sound/player/fricka/player/drown.ogg
-	sound/player/fricka/player/fall1.ogg
-	sound/player/fricka/player/falling.ogg
-	sound/player/fricka/player/gasp.ogg
-	sound/player/fricka/player/jump.ogg
-	sound/player/fricka/player/pain100.ogg
-	sound/player/fricka/player/pain25.ogg
-	sound/player/fricka/player/pain50.ogg
-	sound/player/fricka/player/pain75.ogg
-	sound/player/insurrectionist/coms/attackinfive.ogg
-	sound/player/insurrectionist/coms/attack.ogg
-	sound/player/insurrectionist/coms/coverme.ogg
-	sound/player/insurrectionist/coms/defend.ogg
-	sound/player/insurrectionist/coms/freelance1.ogg
-	sound/player/insurrectionist/coms/freelance2.ogg
-	sound/player/insurrectionist/coms/incoming.ogg
-	sound/player/insurrectionist/coms/meet.ogg
-	sound/player/insurrectionist/coms/needhelp1.ogg
-	sound/player/insurrectionist/coms/needhelp2.ogg
-	sound/player/insurrectionist/coms/seenflag.ogg
-	sound/player/insurrectionist/coms/taunt1.ogg
-	sound/player/insurrectionist/coms/taunt2.ogg
-	sound/player/insurrectionist/coms/taunt3.ogg
-	sound/player/insurrectionist/coms/taunt4.ogg
-	sound/player/insurrectionist/coms/teamshoot1.ogg
-	sound/player/insurrectionist/coms/teamshoot2.ogg
-	sound/player/insurrectionist/coms/teamshoot3.ogg
-	sound/player/insurrectionist/player/death1.ogg
-	sound/player/insurrectionist/player/death2.ogg
-	sound/player/insurrectionist/player/death3.ogg
-	sound/player/insurrectionist/player/drown.ogg
-	sound/player/insurrectionist/player/fall1.ogg
-	sound/player/insurrectionist/player/falling.ogg
-	sound/player/insurrectionist/player/gasp.ogg
-	sound/player/insurrectionist/player/jump.ogg
-	sound/player/insurrectionist/player/pain100.ogg
-	sound/player/insurrectionist/player/pain25.ogg
-	sound/player/insurrectionist/player/pain50.ogg
-	sound/player/insurrectionist/player/pain75.ogg
-	sound/player/lava.wav
-	sound/player/marine/coms/attackinfive.ogg
-	sound/player/marine/coms/attack.ogg
-	sound/player/marine/coms/coverme.ogg
-	sound/player/marine/coms/defend.ogg
-	sound/player/marine/coms/freelance1.ogg
-	sound/player/marine/coms/freelance2.ogg
-	sound/player/marine/coms/incoming.ogg
-	sound/player/marine/coms/meet.ogg
-	sound/player/marine/coms/needhelp1.ogg
-	sound/player/marine/coms/needhelp2.ogg
-	sound/player/marine/coms/seenflag.ogg
-	sound/player/marine/coms/taunt1.ogg
-	sound/player/marine/coms/taunt2.ogg
-	sound/player/marine/coms/taunt3.ogg
-	sound/player/marine/coms/teamshoot1.ogg
-	sound/player/marine/coms/teamshoot2.ogg
-	sound/player/marine/coms/teamshoot3.ogg
-	sound/player/marine/coms/teamshoot4.ogg
-	sound/player/marine/player/death1.ogg
-	sound/player/marine/player/death2.ogg
-	sound/player/marine/player/death3.ogg
-	sound/player/marine/player/drown.ogg
-	sound/player/marine/player/fall1.ogg
-	sound/player/marine/player/falling.ogg
-	sound/player/marine/player/gasp.ogg
-	sound/player/marine/player/jump.ogg
-	sound/player/marine/player/pain100.ogg
-	sound/player/marine/player/pain25.ogg
-	sound/player/marine/player/pain50.ogg
-	sound/player/marine/player/pain75.ogg
-	sound/player/pyria-skadi/coms/attack1.ogg
-	sound/player/pyria-skadi/coms/attack2.ogg
-	sound/player/pyria-skadi/coms/attackinfive.ogg
-	sound/player/pyria-skadi/coms/coverme.ogg
-	sound/player/pyria-skadi/coms/defend.ogg
-	sound/player/pyria-skadi/coms/freelance1.ogg
-	sound/player/pyria-skadi/coms/freelance2.ogg
-	sound/player/pyria-skadi/coms/incoming.ogg
-	sound/player/pyria-skadi/coms/meet.ogg
-	sound/player/pyria-skadi/coms/needhelp1.ogg
-	sound/player/pyria-skadi/coms/seenflag.ogg
-	sound/player/pyria-skadi/coms/taunt1.ogg
-	sound/player/pyria-skadi/coms/taunt2.ogg
-	sound/player/pyria-skadi/coms/taunt3.ogg
-	sound/player/pyria-skadi/coms/taunt4.ogg
-	sound/player/pyria-skadi/coms/taunt5.ogg
-	sound/player/pyria-skadi/coms/teamshoot1.ogg
-	sound/player/pyria-skadi/coms/teamshoot2.ogg
-	sound/player/pyria-skadi/coms/teamshoot3.ogg
-	sound/player/pyria-skadi/coms/teamshoot4.ogg
-	sound/player/pyria-skadi/player/death1.ogg
-	sound/player/pyria-skadi/player/death2.ogg
-	sound/player/pyria-skadi/player/death3.ogg
-	sound/player/pyria-skadi/player/drown.ogg
-	sound/player/pyria-skadi/player/fall1.ogg
-	sound/player/pyria-skadi/player/falling.ogg
-	sound/player/pyria-skadi/player/gasp.ogg
-	sound/player/pyria-skadi/player/jump.ogg
-	sound/player/pyria-skadi/player/pain100.ogg
-	sound/player/pyria-skadi/player/pain25.ogg
-	sound/player/pyria-skadi/player/pain50.ogg
-	sound/player/pyria-skadi/player/pain75.ogg
-	sound/player/reptilian/coms/attackinfive.ogg
-	sound/player/reptilian/coms/attack.ogg
-	sound/player/reptilian/coms/coverme.ogg
-	sound/player/reptilian/coms/defend.ogg
-	sound/player/reptilian/coms/freelance1.ogg
-	sound/player/reptilian/coms/freelance2.ogg
-	sound/player/reptilian/coms/incoming.ogg
-	sound/player/reptilian/coms/meet.ogg
-	sound/player/reptilian/coms/needhelp1.ogg
-	sound/player/reptilian/coms/needhelp2.ogg
-	sound/player/reptilian/coms/seenflag.ogg
-	sound/player/reptilian/coms/taunt1.ogg
-	sound/player/reptilian/coms/taunt2.ogg
-	sound/player/reptilian/coms/taunt3.ogg
-	sound/player/reptilian/coms/teamshoot1.ogg
-	sound/player/reptilian/coms/teamshoot2.ogg
-	sound/player/reptilian/coms/teamshoot3.ogg
-	sound/player/reptilian/player/death1.ogg
-	sound/player/reptilian/player/death2.ogg
-	sound/player/reptilian/player/death3.ogg
-	sound/player/reptilian/player/drown.ogg
-	sound/player/reptilian/player/fall1.ogg
-	sound/player/reptilian/player/falling.ogg
-	sound/player/reptilian/player/gasp.ogg
-	sound/player/reptilian/player/jump.ogg
-	sound/player/reptilian/player/pain100.ogg
-	sound/player/reptilian/player/pain25.ogg
-	sound/player/reptilian/player/pain50.ogg
-	sound/player/reptilian/player/pain75.ogg
-	sound/player/slime.wav
-	sound/player/soldier/coms/attackinfive.ogg
-	sound/player/soldier/coms/attack.ogg
-	sound/player/soldier/coms/coverme.ogg
-	sound/player/soldier/coms/defend.ogg
-	sound/player/soldier/coms/freelance1.ogg
-	sound/player/soldier/coms/freelance2.ogg
-	sound/player/soldier/coms/ideas/flagcarriertakingdamage.ogg
-	sound/player/soldier/coms/ideas/getourflagback.ogg
-	sound/player/soldier/coms/incoming.ogg
-	sound/player/soldier/coms/meet.ogg
-	sound/player/soldier/coms/needhelp1.ogg
-	sound/player/soldier/coms/needhelp2.ogg
-	sound/player/soldier/coms/seenflag.ogg
-	sound/player/soldier/coms/taunt1.ogg
-	sound/player/soldier/coms/taunt2.ogg
-	sound/player/soldier/coms/taunt3.ogg
-	sound/player/soldier/coms/teamshoot1.ogg
-	sound/player/soldier/coms/teamshoot2.ogg
-	sound/player/soldier/coms/teamshoot3.ogg
-	sound/player/soldier/player/death1.ogg
-	sound/player/soldier/player/death2.ogg
-	sound/player/soldier/player/death3.ogg
-	sound/player/soldier/player/drown.ogg
-	sound/player/soldier/player/fall1.ogg
-	sound/player/soldier/player/falling.ogg
-	sound/player/soldier/player/gasp.ogg
-	sound/player/soldier/player/jump.ogg
-	sound/player/soldier/player/pain100.ogg
-	sound/player/soldier/player/pain25.ogg
-	sound/player/soldier/player/pain50.ogg
-	sound/player/soldier/player/pain75.ogg
-	sound/player/specop/coms/attackinfive.ogg
-	sound/player/specop/coms/attack.ogg
-	sound/player/specop/coms/coverme.ogg
-	sound/player/specop/coms/defend.ogg
-	sound/player/specop/coms/freelance1.ogg
-	sound/player/specop/coms/freelance2.ogg
-	sound/player/specop/coms/incoming.ogg
-	sound/player/specop/coms/meet.ogg
-	sound/player/specop/coms/needhelp1.ogg
-	sound/player/specop/coms/seenflag.ogg
-	sound/player/specop/coms/taunt1.ogg
-	sound/player/specop/coms/taunt2.ogg
-	sound/player/specop/coms/taunt3.ogg
-	sound/player/specop/coms/taunt4.ogg
-	sound/player/specop/coms/teamshoot1.ogg
-	sound/player/specop/coms/teamshoot2.ogg
-	sound/player/specop/coms/teamshoot3.ogg
-	sound/player/specop/coms/teamshoot4.ogg
-	sound/player/specop/player/death1.ogg
-	sound/player/specop/player/death2.ogg
-	sound/player/specop/player/death3.ogg
-	sound/player/specop/player/drown.ogg
-	sound/player/specop/player/fall1.ogg
-	sound/player/specop/player/falling.ogg
-	sound/player/specop/player/gasp.ogg
-	sound/player/specop/player/jump.ogg
-	sound/player/specop/player/pain100.ogg
-	sound/player/specop/player/pain25.ogg
-	sound/player/specop/player/pain50.ogg
-	sound/player/specop/player/pain75.ogg
-	sound/player/torus/attack.ogg
-	sound/player/torus/coverme.ogg
-	sound/player/torus/death.ogg
-	sound/player/torus/drown.ogg
-	sound/player/torus/fall.ogg
-	sound/player/torus/flagseen.ogg
-	sound/player/torus/gasp.ogg
-	sound/player/torus/hooah.ogg
-	sound/player/torus/incoming.ogg
-	sound/player/torus/jump.ogg
-	sound/player/torus/letsgo.ogg
-	sound/player/torus/needhelp.ogg
-	sound/player/torus/pain100.ogg
-	sound/player/torus/pain25.ogg
-	sound/player/torus/pain50.ogg
-	sound/player/torus/pain75.ogg
-	sound/player/torus/taunt.ogg
-	sound/player/torus/teamshoot.ogg
-	sound/player/torus/waypoint.ogg
-	sound/porto/bounce.ogg
-	sound/porto/create.ogg
-	sound/porto/expire.ogg
-	sound/porto/explode.ogg
-	sound/porto/fire.ogg
-	sound/porto/unsupported.ogg
-	sound/weapons/brass1.ogg
-	sound/weapons/brass2.ogg
-	sound/weapons/brass3.ogg
-	sound/weapons/campingrifle_fire.ogg
-	sound/weapons/campingrifle_reload.ogg
-	sound/weapons/casings1.ogg
-	sound/weapons/casings2.ogg
-	sound/weapons/casings3.ogg
-	sound/weapons/crylink_fire2.ogg
-	sound/weapons/crylink_fire.ogg
-	sound/weapons/crylink_impact2.ogg
-	sound/weapons/crylink_impact.ogg
-	sound/weapons/electro_bounce.ogg
-	sound/weapons/electro_fire2.ogg
-	sound/weapons/electro_fire.ogg
-	sound/weapons/electro_fly.ogg
-	sound/weapons/electro_impact.ogg
-	sound/weapons/flacexp1.ogg
-	sound/weapons/flacexp2.ogg
-	sound/weapons/flacexp3.ogg
-	sound/weapons/flac_fire.ogg
-	sound/weapons/grenade_bounce1.ogg
-	sound/weapons/grenade_bounce2.ogg
-	sound/weapons/grenade_bounce3.ogg
-	sound/weapons/grenade_bounce4.ogg
-	sound/weapons/grenade_bounce5.ogg
-	sound/weapons/grenade_bounce6.ogg
-	sound/weapons/grenade_fire.ogg
-	sound/weapons/grenade_impact.ogg
-	sound/weapons/hagar_fire.ogg
-	sound/weapons/hagexp1.ogg
-	sound/weapons/hagexp2.ogg
-	sound/weapons/hagexp3.ogg
-	sound/weapons/hookbomb_fire.ogg
-	sound/weapons/hookbomb_impact.ogg
-	sound/weapons/hook_fire.ogg
-	sound/weapons/hook_impact.ogg
-	sound/weapons/lasergun_fire.ogg
-	sound/weapons/laserimpact.ogg
-	sound/weapons/minstanexfire.ogg
-	sound/weapons/nexfire.ogg
-	sound/weapons/neximpact.ogg
-	sound/weapons/rocket_det.ogg
-	sound/weapons/rocket_fire.ogg
-	sound/weapons/rocket_fly.ogg
-	sound/weapons/rocket_impact.ogg
-	sound/weapons/rocket_mode.ogg
-	sound/weapons/seekerexp1.ogg
-	sound/weapons/seekerexp2.ogg
-	sound/weapons/seekerexp3.ogg
-	sound/weapons/seeker_fire.ogg
-	sound/weapons/shotgun_fire.ogg
-	sound/weapons/strength_fire.ogg
-	sound/weapons/tagexp1.ogg
-	sound/weapons/tagexp2.ogg
-	sound/weapons/tagexp3.ogg
-	sound/weapons/tag_fire.ogg
-	sound/weapons/tag_impact.ogg
-	sound/weapons/tag_rocket_fly.ogg
-	sound/weapons/uzi_fire.ogg
-	sound/weapons/weaponpickup.ogg
-	sound/weapons/weapon_switch.ogg
-	textures/campingrifle_bump.tga
-	textures/campingrifle_gloss.tga
-	textures/campingrifle_glow.tga
-	textures/campingrifle_pants.tga
-	textures/campingrifle_shirt.tga
-	textures/campingrifle.tga
-	textures/crifleflashider_bump.tga
-	textures/crifleflashider_gloss.tga
-	textures/crifleflashider.tga
-	textures/eggandbacon/black.tga
-	textures/eggandbacon/platten_bump.tga
-	textures/eggandbacon/platten_gloss.tga
-	textures/eggandbacon/platten.tga
-	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
-	textures/flags/flag_blue_laser.tga
-	textures/flags/flag_blue_norm.tga
-	textures/flags/flag_blue.tga
-	textures/flags/flag_red_cloth.tga
-	textures/flags/flag_red_gloss.tga
-	textures/flags/flag_red_glow.tga
-	textures/flags/flag_red_laser.tga
-	textures/flags/flag_red_norm.tga
-	textures/flags/flag_red.tga
-	textures/hlac_accessory_gloss.tga
-	textures/hlac_accessory_norm.tga
-	textures/hlac_accessory_pants.tga
-	textures/hlac_accessory_shirt.tga
-	textures/hlac_accessory.tga
-	textures/hlac_body_gloss.tga
-	textures/hlac_body_glow.tga
-	textures/hlac_body_norm.tga
-	textures/hlac_body_pants.tga
-	textures/hlac_body_shirt.tga
-	textures/hlac_body.tga
-	textures/hlac_glass.tga
-	textures/hlac_metal.tga
-	textures/hlac_plasma.tga
-	textures/hlac.tga
-	textures/hookgun_gloss.tga
-	textures/hookgun_norm.tga
-	textures/hookgun_pants.tga
-	textures/hookgun.tga
-	textures/nex_bump.tga
-	textures/nex_gloss.tga
-	textures/nex_glow.tga
-	textures/nex_pants.tga
-	textures/nex_shirt.tga
-	textures/nex.tga
-	textures/portalgun_gloss.tga
-	textures/portalgun_glow.tga
-	textures/portalgun_norm.tga
-	textures/portalgun.tga
-	textures/portals/portals_blue_gloss.tga
-	textures/portals/portals_blue_glow.tga
-	textures/portals/portals_blue_norm.tga
-	textures/portals/portals_blue.tga
-	textures/portals/portals_blue_vortex.tga
-	textures/portals/portals_inactive.tga
-	textures/portals/portals_inactive_vortex.tga
-	textures/portals/portals_red_gloss.tga
-	textures/portals/portals_red_glow.tga
-	textures/portals/portals_red_norm.tga
-	textures/portals/portals_red.tga
-	textures/portals/portals_red_vortex.tga
-	textures/seeker_gloss.tga
-	textures/seeker_glow.tga
-	textures/seeker_norm.tga
-	textures/seeker_pants.tga
-	textures/seeker.tga
+	sound/misc/poweroff.wav
+	scripts/onslaught.shader
+	models/sprites/item-extralife_frame0.tga
+	models/sprites/item-extralife_frame1.tga
+	models/sprites/item-fuelregen_frame0.tga
+	models/sprites/item-fuelregen_frame1.tga
+	models/sprites/item-invis_frame0.tga
+	models/sprites/item-invis_frame1.tga
+	models/sprites/item-jetpack_frame0.tga
+	models/sprites/item-jetpack_frame1.tga
+	models/sprites/item-shield_frame0.tga
+	models/sprites/item-shield_frame1.tga
+	models/sprites/item-speed_frame0.tga
+	models/sprites/item-speed_frame1.tga
+	models/sprites/item-strength_frame0.tga
+	models/sprites/item-strength_frame1.tga
 "
 
 rm -rf pack
 mkdir pack
 for F in $COMPAT_FILES; do
-	mkdir -p pack/${F%/*}
+	case "$F" in
+		*/*)
+			mkdir -p pack/${F%/*}
+			;;
+	esac
 	cp "$F" pack/"$F"
 done
 
 cd pack
 
-find . -type f -print0 | qual=85 scaledown=256x256 xargs -0 ../../misc/tools/jpeg-if-not-alpha.sh
+if false; then
+	find . -type f -print0 | qual=85 scaledown=256x256 xargs -0 ../../misc/tools/jpeg-if-not-alpha.sh
 
-find . -name \*.ogg | while IFS= read -r NAME; do
-	c=`vorbiscomment -l "$NAME"`
-	oggdec -o "$NAME.wav" "$NAME"
-	oggenc -q 0 -o "$NAME" "$NAME.wav"
-	echo "$c" | vorbiscomment -w "$NAME"
-	rm -f "$NAME.wav"
+	find . -name \*.ogg | while IFS= read -r NAME; do
+		c=`vorbiscomment -l "$NAME"`
+		oggdec -o "$NAME.wav" "$NAME"
+		oggenc -q 0 -o "$NAME" "$NAME.wav"
+		echo "$c" | vorbiscomment -w "$NAME"
+		rm -f "$NAME.wav"
+		touch "${NAME%.ogg}.wav" # to disable this file, should the client have it
+	done
+fi
 
-	touch "${NAME%.ogg}.wav" # to disable this file, should the client have it
-done
-
 rev=`svnversion .. | sed 's/M$//g; s/.*://g;'`
 pack="zzz_svn-compat-$rev"
 echo "Support files to play on svn servers of revision $rev" > "$pack.txt"

Modified: branches/nexuiz-2.0/data/defaultNexuiz.cfg
===================================================================
--- branches/nexuiz-2.0/data/defaultNexuiz.cfg	2009-05-24 09:11:30 UTC (rev 6761)
+++ branches/nexuiz-2.0/data/defaultNexuiz.cfg	2009-05-24 09:17:59 UTC (rev 6762)
@@ -24,7 +24,7 @@
 seta g_configversion 0	"Configuration file version (used to upgrade settings) 0: first run, or previous start was <2.4.1  Later, it's overridden by config.cfg, version ranges are defined in config_update.cfg"
 
 // default.cfg versioning (update using update-cvarcount.sh, run that every time after adding a new cvar)
-set cvar_check_default dbe0a62fd00f815592a25cea67fc6156
+set cvar_check_default ca174b42ef38020187602cfda6d8ef43
 
 // Nexuiz version (formatted for machines)
 // used to determine if a client version is compatible
@@ -812,20 +812,28 @@
 alias _weapnext_001 "impulse 10"
 alias _weapnext_010 "impulse 10"
 alias _weapnext_011 "impulse 10"
+alias _weapnext_020 "impulse 10"
+alias _weapnext_021 "impulse 10"
 alias _weapnext_100 "impulse 10"
 alias _weapnext_101 "impulse 15"
 alias _weapnext_110 "impulse 18"
 alias _weapnext_111 "impulse 15"
+alias _weapnext_120 "impulse 18"
+alias _weapnext_121 "impulse 15"
 alias weaplast "impulse 11"
 alias weapprev "_weapprev_${_supports_weaponpriority}${sbar_hudselector}${cl_weaponpriority_useforcycling}"
 alias _weapprev_000 "impulse 12"
 alias _weapprev_001 "impulse 12"
 alias _weapprev_010 "impulse 12"
 alias _weapprev_011 "impulse 12"
+alias _weapprev_020 "impulse 12"
+alias _weapprev_021 "impulse 12"
 alias _weapprev_100 "impulse 12"
 alias _weapprev_101 "impulse 16"
 alias _weapprev_110 "impulse 19"
 alias _weapprev_111 "impulse 16"
+alias _weapprev_120 "impulse 19"
+alias _weapprev_121 "impulse 16"
 set _supports_weaponpriority 0	"set to 1 by csqc if supported, and to 0 on disconnect"
 alias weapbest "impulse 13"
 
@@ -1250,6 +1258,10 @@
 
 seta menu_maxplayers 8 "maxplayers value when the menu starts a game"
 
+// command executed before loading a map by the menu
+// makes sure maxplayers is at least minplayers or bot_number + 1
+alias menu_loadmap_prepare "disconnect; wait; g_campaign 0; menu_cmd rpn /_menu_loadmap_maxplayers menu_maxplayers minplayers bot_number 1 add max max def; maxplayers $_menu_loadmap_maxplayers; g_maplist_shufflenow"
+
 // useful vote aliases
 set timelimit_increment 5
 set timelimit_decrement 5
@@ -1320,7 +1332,7 @@
 set g_cdtracks_remaplist "digital-pursuit breakdown-easy brainsukker chaos-fog infight neuronal-diving subcities thru-the-mirror calling-bogus beast-of-insanity thunder creation brokenlight stairs sixtyfour_ desert3 ninesix sixtyfour_revisited" "list used by mapinfo system to automatically assign cdtracks - must match the cd remap command"
 set g_cdtracks_dontusebydefault "digital-pursuit thunder brokenlight" "list used by mapinfo system to automatically assign cdtracks - must be a subset of g_cdtracks_remaplist"
 cd remap $g_cdtracks_remaplist
-set sv_intermission_cdtrack brainsukker
+set sv_intermission_cdtrack ""
 set menu_cdtrack brokenlight
 
 // maxidle (in seconds): kick players idle for more than that amount of time
@@ -1521,6 +1533,11 @@
 set cl_effects_lightningarc_branchfactor_start 0.25
 set cl_effects_lightningarc_branchfactor_add 0.1
 
+set g_hitplots 0 "when set to 1, hitplots are stored by the server to provide a means of proving that a triggerbot was used"
+
+alias mute "prvm_edictset server $1 muted 1" // I am lazy and not making an actual command of this
+alias unmute "prvm_edictset server $1 muted 0" // dito
+
 rcon_secure 1
 
 set menu_updatecheck 1

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Modified: branches/nexuiz-2.0/data/models/sprites/make-sprites.sh
===================================================================
--- branches/nexuiz-2.0/data/models/sprites/make-sprites.sh	2009-05-24 09:11:30 UTC (rev 6761)
+++ branches/nexuiz-2.0/data/models/sprites/make-sprites.sh	2009-05-24 09:17:59 UTC (rev 6762)
@@ -191,3 +191,11 @@
 sprite dom-blue           "CONTROL POINT" 0000ff 000000 0.0
 sprite dom-yellow         "CONTROL POINT" ffff00 000000 0.0
 sprite dom-pink           "CONTROL POINT" ff00ff 000000 0.0
+
+sprite item-invis         "INVISIBILITY"  0000ff 000000 0.5 0000ff ffff00 0.5
+sprite item-extralife     "EXTRA LIFE"    ff0000 000000 0.5 ff0000 ffff00 0.5
+sprite item-speed         "SPEED"         ff00ff 000000 0.5 ff00ff ffff00 0.5
+sprite item-strength      "STRENGTH"      0000ff 000000 0.5 0000ff ffff00 0.5
+sprite item-shield        "SHIELD"        ff00ff 000000 0.5 ff00ff ffff00 0.5
+sprite item-fuelregen     "FUEL REGEN"    ff8000 000000 0.5 ff8000 ffff00 0.5
+sprite item-jetpack       "JET PACK"      808080 000000 0.5 808080 ffff00 0.5

Modified: branches/nexuiz-2.0/data/qcsrc/client/Main.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/client/Main.qc	2009-05-24 09:11:30 UTC (rev 6761)
+++ branches/nexuiz-2.0/data/qcsrc/client/Main.qc	2009-05-24 09:17:59 UTC (rev 6762)
@@ -886,6 +886,8 @@
 		strunzone(forcefog);
 	forcefog = strzone(ReadString());
 
+	armorblockpercent = ReadByte() / 255.0;
+
 	if(!postinit)
 		PostInit();
 }

Modified: branches/nexuiz-2.0/data/qcsrc/client/main.qh
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/client/main.qh	2009-05-24 09:11:30 UTC (rev 6761)
+++ branches/nexuiz-2.0/data/qcsrc/client/main.qh	2009-05-24 09:17:59 UTC (rev 6762)
@@ -149,3 +149,5 @@
 void centerprint(string strMessage);
 
 #define ALPHA_MIN_VISIBLE 0.003
+
+float armorblockpercent;

Modified: branches/nexuiz-2.0/data/qcsrc/client/sbar.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/client/sbar.qc	2009-05-24 09:11:30 UTC (rev 6761)
+++ branches/nexuiz-2.0/data/qcsrc/client/sbar.qc	2009-05-24 09:17:59 UTC (rev 6762)
@@ -61,7 +61,7 @@
 	value = (active) ? 1 : 0.6;
 	color_x = color_y = color_z = value;
 	
-	if(sbar_hudselector == 1)
+	if(sbar_hudselector == 1 || sbar_hudselector == 2)
 	{
 		// width = 300, height = 100
 		const float w_width = 32, w_height = 12, w_space = 2, font_size = 8;
@@ -362,7 +362,7 @@
 		"+lms/lives +lms/rank ",
 		"+kh/caps +kh/pushes +kh/destroyed ",
 		"?+race/laps ?+race/time ?+race/fastest ",
-		"+as/objectives +nexball/faults +nexball/goals",
+		"+as/objectives +nexball/faults +nexball/goals ",
 		"-lms,race,nexball/score");
 }
 
@@ -1449,8 +1449,8 @@
 	vector pos, picsize, number_position;
 	float strength_time, invincibility_time, countdown_fontsize;
 
-	picsize = '40 40 0';
-	countdown_fontsize = 22;
+	picsize = '48 48 0';
+	countdown_fontsize = 24;
 	
 	//element will be positioned on the right side of the screen:
 	pos_x = vid_conwidth - picsize_x - 10; //margin 10 from right border
@@ -1462,7 +1462,7 @@
 	//now calculate the values Sbar_DrawXNum() will be called with:
 	number_position_x = number_position_x - sbar_x; //relative to sbar coordinates
 	number_position_y = number_position_y - sbar_y; //relative to sbar coordinates
-	number_position_y += 10; //center number vertically to the icon
+	number_position_y += 14; //center number vertically to the icon
 	
 	pos_z = number_position_z = 0;
 	
@@ -1957,162 +1957,213 @@
 		}
 		else
 		{
-			if (sb_lines && sbar_hudselector == 1)
+			if(sb_lines)
 			{
-				stat_items = getstati(STAT_ITEMS);
-				stat_weapons = getstati(STAT_WEAPONS);
+				float armor, health;
+				armor = getstati(STAT_ARMOR);
+				health = getstati(STAT_HEALTH);
 
-				sbar_x = (vid_conwidth - 320.0)*0.5;
-				sbar_y = vid_conheight - 24.0 - 16.0;
-				sbar_z = 0;
-			
-				fade = 3.2 - 2 * (time - weapontime);
-				fade = bound(0.7, fade, 1);
+				if (sbar_hudselector == 1 || sbar_hudselector == 2)
+				{
+					stat_items = getstati(STAT_ITEMS);
+					stat_weapons = getstati(STAT_WEAPONS);
 
-				x = 1.0;
-				Sbar_DrawWeapon_Clear();
-				for(i = 1; i <= 24; ++i)
-				{
-					if(weaponimpulse[i-1] >= 0)
-					if(stat_weapons & x)
+					sbar_x = (vid_conwidth - 320.0)*0.5;
+					sbar_y = vid_conheight - 24.0 - 16.0;
+					sbar_z = 0;
+				
+					fade = 3.2 - 2 * (time - weapontime);
+					fade = bound(0.7, fade, 1);
+
+					x = 1.0;
+					Sbar_DrawWeapon_Clear();
+					for(i = 1; i <= 24; ++i)
 					{
-						Sbar_DrawWeapon(i-1, fade, (i == activeweapon));
+						if(weaponimpulse[i-1] >= 0)
+						if(stat_weapons & x)
+						{
+							Sbar_DrawWeapon(i-1, fade, (i == activeweapon));
+						}
+						x *= 2;
 					}
-					x *= 2;
-				}
 
-				// armor
-				x = getstati(STAT_ARMOR);
-				if (x > 0)
-				{
-					// "gfx/sb_armor"
-					//Sbar_DrawStretchPic (72, 0, sb_armor[0], sbar_alpha_fg.value, 24, 24);
-					drawpic(sbar + '72 0 0', "gfx/sb_armor", '24 24 0', '1 1 1', sbar_alpha_fg, 0);
-					if(x > 200)
-						Sbar_DrawXNum('0 0 0', x, 3, 24, '0 1 0', 1, 0);
-					else if(x > 100)
-						Sbar_DrawXNum('0 0 0', x, 3, 24, '0.2 1 0', 1, 0);
-					else if(x > 50)
-						Sbar_DrawXNum('0 0 0', x, 3, 24, '0.6 0.7 0.8', 1, 0);
-					else if(x > 25)
-						Sbar_DrawXNum('0 0 0', x, 3, 24, '1 1 0.2', 1, 0);
-					else
-						Sbar_DrawXNum('0 0 0', x, 3, 24, '0.7 0 0', 1, 0);
-				}
+					if(health != 0)
+					{
+						if(sbar_hudselector == 2)
+						{
+							// NOTE: we'll always choose the SMALLER value...
+							float healthdamage, armordamage, armorideal;
+							healthdamage = (health - 1) / (1 - armorblockpercent); // damage we can take if we could use more health
+							armordamage = armor + (health - 1); // damage we can take if we could use more armor
+							armorideal = healthdamage * armorblockpercent;
 
-				// health
-				x = getstati(STAT_HEALTH);
-				if (x != 0)
-				{
-					// "gfx/sb_health"
-					//Sbar_DrawStretchPic (184, 0, sb_health, sbar_alpha_fg.value, 24, 24);
-					drawpic(sbar + '184 0 0', "gfx/sb_health", '24 24 0', '1 1 1', sbar_alpha_fg, 0);
-					if(x > 200)
-						Sbar_DrawXNum('112 0 0', x, 3, 24, '0 1 0', 1, 0);
-					else if(x > 100)
-						Sbar_DrawXNum('112 0 0', x, 3, 24, '0.2 1 0', 1, 0);
-					else if(x > 50)
-						Sbar_DrawXNum('112 0 0', x, 3, 24, '0.6 0.7 0.8', 1, 0);
-					else if(x > 25)
-						Sbar_DrawXNum('112 0 0', x, 3, 24, '1 1 0.2', 1, 0);
-					else
-						Sbar_DrawXNum('112 0 0', x, 3, 24, '0.7 0 0', 1, 0);
-				}
+							if(armordamage < healthdamage)
+							{
+								// here, armorideal > armor
+								x = floor(armordamage + 1);
+								drawpic(sbar + '116 0 0', "gfx/sb_health", '24 24 0', '1 1 1', sbar_alpha_fg, 0);
+								drawpic(sbar + '142 2 0', "gfx/sb_armor", '20 20 0', '1 1 1', sbar_alpha_fg * armor / armorideal, 0);
+								if(x > 200)
+									Sbar_DrawXNum('44 0 0', x, 3, 24, '0 1 0', 1, 0);
+								else if(x > 100)
+									Sbar_DrawXNum('44 0 0', x, 3, 24, '0.2 1 0', 1, 0);
+								else if(x > 50)
+									Sbar_DrawXNum('44 0 0', x, 3, 24, '0.6 0.7 0.8', 1, 0);
+								else if(x > 25)
+									Sbar_DrawXNum('44 0 0', x, 3, 24, '1 1 0.2', 1, 0);
+								else
+									Sbar_DrawXNum('44 0 0', x, 3, 24, '0.7 0 0', 1, 0);
+							}
+							else
+							{
+								x = floor(healthdamage + 1);
+								drawpic(sbar + '116 2 0', "gfx/sb_health", '20 20 0', '1 1 1', sbar_alpha_fg * armorideal / armor, 0);
+								drawpic(sbar + '140 0 0', "gfx/sb_armor", '24 24 0', '1 1 1', sbar_alpha_fg, 0);
+								if(x > 200)
+									Sbar_DrawXNum('44 0 0', x, 3, 24, '0 1 0', 1, 0);
+								else if(x > 100)
+									Sbar_DrawXNum('44 0 0', x, 3, 24, '0.2 1 0', 1, 0);
+								else if(x > 50)
+									Sbar_DrawXNum('44 0 0', x, 3, 24, '0.6 0.7 0.8', 1, 0);
+								else if(x > 25)
+									Sbar_DrawXNum('44 0 0', x, 3, 24, '1 1 0.2', 1, 0);
+								else
+									Sbar_DrawXNum('44 0 0', x, 3, 24, '0.7 0 0', 1, 0);
+							}
+						}
+						else
+						{
+							// armor
+							x = armor;
+							if (x > 0)
+							{
+								// "gfx/sb_armor"
+								//Sbar_DrawStretchPic (72, 0, sb_armor[0], sbar_alpha_fg.value, 24, 24);
+								drawpic(sbar + '72 0 0', "gfx/sb_armor", '24 24 0', '1 1 1', sbar_alpha_fg, 0);
+								if(x > 200)
+									Sbar_DrawXNum('0 0 0', x, 3, 24, '0 1 0', 1, 0);
+								else if(x > 100)
+									Sbar_DrawXNum('0 0 0', x, 3, 24, '0.2 1 0', 1, 0);
+								else if(x > 50)
+									Sbar_DrawXNum('0 0 0', x, 3, 24, '0.6 0.7 0.8', 1, 0);
+								else if(x > 25)
+									Sbar_DrawXNum('0 0 0', x, 3, 24, '1 1 0.2', 1, 0);
+								else
+									Sbar_DrawXNum('0 0 0', x, 3, 24, '0.7 0 0', 1, 0);
+							}
 
-				// ammo
-				for(i = 0, v = '0 0 0'; (x = GetAmmoStat(i)) >= 0; ++i)
-					if(stat_items & GetAmmoItemCode(i))
-					{
-						x = getstati(x);
-						drawpic(sbar + '296 0 0' + v, GetAmmoPicture(i), '24 24 0', '1 1 1', sbar_alpha_fg, 0);
-						if(x > 10)
-							Sbar_DrawXNum('224 0 0' + v, x, 3, 24, '0.6 0.7 0.8', 1, 0);
-						else
-							Sbar_DrawXNum('224 0 0' + v, x, 3, 24, '0.7 0 0', 1, 0);
-						v_y -= 30;
+							x = health;
+							// "gfx/sb_health"
+							//Sbar_DrawStretchPic (184, 0, sb_health, sbar_alpha_fg.value, 24, 24);
+							drawpic(sbar + '184 0 0', "gfx/sb_health", '24 24 0', '1 1 1', sbar_alpha_fg, 0);
+							if(x > 200)
+								Sbar_DrawXNum('112 0 0', x, 3, 24, '0 1 0', 1, 0);
+							else if(x > 100)
+								Sbar_DrawXNum('112 0 0', x, 3, 24, '0.2 1 0', 1, 0);
+							else if(x > 50)
+								Sbar_DrawXNum('112 0 0', x, 3, 24, '0.6 0.7 0.8', 1, 0);
+							else if(x > 25)
+								Sbar_DrawXNum('112 0 0', x, 3, 24, '1 1 0.2', 1, 0);
+							else
+								Sbar_DrawXNum('112 0 0', x, 3, 24, '0.7 0 0', 1, 0);
+						}
 					}
 
-				if (sbar_x + 320 + 160 <= vid_conwidth)
-					Sbar_MiniDeathmatchOverlay(sbar + '320 0 0');
-				if (sbar_x > 0)
-					Sbar_Score(16);
-				// The margin can be at most 8 to support 640x480 console size:
-				//   320 + 2 * (144 + 16) = 640
-			}
-			else if (sb_lines)
-			{
-			
-				stat_items = getstati(STAT_ITEMS);
-				stat_weapons = getstati(STAT_WEAPONS);
-			
-				sbar_x = (vid_conwidth - 640.0)*0.5;
-				sbar_y = vid_conheight - 47;
-				sbar_z = 0;
+					// ammo
+					for(i = 0, v = '0 0 0'; (x = GetAmmoStat(i)) >= 0; ++i)
+						if(stat_items & GetAmmoItemCode(i))
+						{
+							x = getstati(x);
+							drawpic(sbar + '296 0 0' + v, GetAmmoPicture(i), '24 24 0', '1 1 1', sbar_alpha_fg, 0);
+							if(x > 10)
+								Sbar_DrawXNum('224 0 0' + v, x, 3, 24, '0.6 0.7 0.8', 1, 0);
+							else
+								Sbar_DrawXNum('224 0 0' + v, x, 3, 24, '0.7 0 0', 1, 0);
+							v_y -= 30;
+						}
 
-				fade = 3 - 2 * (time - weapontime);
+					if (sbar_x + 320 + 160 <= vid_conwidth)
+						Sbar_MiniDeathmatchOverlay(sbar + '320 0 0');
+					if (sbar_x > 0)
+						Sbar_Score(16);
+					// The margin can be at most 8 to support 640x480 console size:
+					//   320 + 2 * (144 + 16) = 640
+				}
+				else
+				{
+				
+					stat_items = getstati(STAT_ITEMS);
+					stat_weapons = getstati(STAT_WEAPONS);
+				
+					sbar_x = (vid_conwidth - 640.0)*0.5;
+					sbar_y = vid_conheight - 47;
+					sbar_z = 0;
 
-				x = 1.0;
-				Sbar_DrawWeapon_Clear();
-				for(i = 1; i <= 24; ++i)
-				{
-					if(weaponimpulse[i-1] >= 0)
-					if(stat_weapons & x)
+					fade = 3 - 2 * (time - weapontime);
+
+					x = 1.0;
+					Sbar_DrawWeapon_Clear();
+					for(i = 1; i <= 24; ++i)
 					{
-						Sbar_DrawWeapon(i-1, fade, (i == activeweapon));
+						if(weaponimpulse[i-1] >= 0)
+						if(stat_weapons & x)
+						{
+							Sbar_DrawWeapon(i-1, fade, (i == activeweapon));
+						}
+						x *= 2;
 					}
-					x *= 2;
-				}
 
-				if (sb_lines > 24)
-					drawpic(sbar, "gfx/sbar", '0 0 0', '1 1 1', sbar_alpha_fg, 0);
-				else
-					drawpic(sbar, "gfx/sbar_minimal", '0 0 0', '1 1 1', sbar_alpha_fg, 0);
+					if (sb_lines > 24)
+						drawpic(sbar, "gfx/sbar", '0 0 0', '1 1 1', sbar_alpha_fg, 0);
+					else
+						drawpic(sbar, "gfx/sbar_minimal", '0 0 0', '1 1 1', sbar_alpha_fg, 0);
 
-				// armor
-				// (340-3*24) = 268
-				Sbar_DrawXNum('268 12 0', getstati(STAT_ARMOR), 3, 24, '0.6 0.7 0.8', 1, 0);
+					// armor
+					// (340-3*24) = 268
+					Sbar_DrawXNum('268 12 0', getstati(STAT_ARMOR), 3, 24, '0.6 0.7 0.8', 1, 0);
 
-				// health
-				// (154-3*24) = 82
-				x = getstati(STAT_HEALTH);
-				if(x > 100)
-					Sbar_DrawXNum('82 12 0', x, 3, 24, '1 1 1', 1, 0);
-				else if(x <= 25 && time - floor(time) > 0.5)
-					Sbar_DrawXNum('82 12 0', x, 3, 24, '0.7 0 0', 1, 0);
-				else
-					Sbar_DrawXNum('81 12 0', x, 3, 24, '0.6 0.7 0.8', 1, 0);
+					// health
+					// (154-3*24) = 82
+					x = getstati(STAT_HEALTH);
+					if(x > 100)
+						Sbar_DrawXNum('82 12 0', x, 3, 24, '1 1 1', 1, 0);
+					else if(x <= 25 && time - floor(time) > 0.5)
+						Sbar_DrawXNum('82 12 0', x, 3, 24, '0.7 0 0', 1, 0);
+					else
+						Sbar_DrawXNum('81 12 0', x, 3, 24, '0.6 0.7 0.8', 1, 0);
 
-				// ammo
-				for(i = 0, v = '0 0 0'; (x = GetAmmoStat(i)) >= 0; ++i)
-					if(stat_items & GetAmmoItemCode(i))
-					{
-						x = getstati(x);
-						drawpic(sbar + '519 0 0' + v, GetAmmoPicture(i), '0 0 0', '1 1 1', sbar_alpha_fg, 0);
-						if(x > 10)
-							Sbar_DrawXNum('447 12 0' + v, x, 3, 24, '0.6 0.7 0.8', 1, 0);
-						else
-							Sbar_DrawXNum('447 12 0' + v, x, 3, 24, '0.7 0 0', 1, 0);
-						v_y -= 40;
-					}
+					// ammo
+					for(i = 0, v = '0 0 0'; (x = GetAmmoStat(i)) >= 0; ++i)
+						if(stat_items & GetAmmoItemCode(i))
+						{
+							x = getstati(x);
+							drawpic(sbar + '519 0 0' + v, GetAmmoPicture(i), '0 0 0', '1 1 1', sbar_alpha_fg, 0);
+							if(x > 10)
+								Sbar_DrawXNum('447 12 0' + v, x, 3, 24, '0.6 0.7 0.8', 1, 0);
+							else
+								Sbar_DrawXNum('447 12 0' + v, x, 3, 24, '0.7 0 0', 1, 0);
+							v_y -= 40;
+						}
 
-				if (sb_lines > 24)
-					drawpic(sbar, "gfx/sbar_overlay", '0 0 0', '1 1 1', 1, DRAWFLAG_MODULATE);
+					if (sb_lines > 24)
+						drawpic(sbar, "gfx/sbar_overlay", '0 0 0', '1 1 1', 1, DRAWFLAG_MODULATE);
 
-				if (sbar_x + 600 + 160 <= vid_conwidth)
-					Sbar_MiniDeathmatchOverlay (sbar + '600 0 0');
+					if (sbar_x + 600 + 160 <= vid_conwidth)
+						Sbar_MiniDeathmatchOverlay (sbar + '600 0 0');
 
-				if (sbar_x > 0)
-					Sbar_Score(-16);
-				// Because:
-				//   Mini scoreboard uses 12*4 per other team, that is, 144
-				//   pixels when there are four teams...
-				//   Nexuiz by default sets vid_conwidth to 800... makes
-				//   sbar_x == 80...
-				//   so we need to shift it by 64 pixels to the right to fit
-				//   BUT: then it overlaps with the image that gets drawn
-				//   for viewsize 100! Therefore, just account for 3 teams,
-				//   that is, 96 pixels mini scoreboard size, needing 16 pixels
-				//   to the right!
+					if (sbar_x > 0)
+						Sbar_Score(-16);
+					// Because:
+					//   Mini scoreboard uses 12*4 per other team, that is, 144
+					//   pixels when there are four teams...
+					//   Nexuiz by default sets vid_conwidth to 800... makes
+					//   sbar_x == 80...
+					//   so we need to shift it by 64 pixels to the right to fit
+					//   BUT: then it overlaps with the image that gets drawn
+					//   for viewsize 100! Therefore, just account for 3 teams,
+					//   that is, 96 pixels mini scoreboard size, needing 16 pixels
+					//   to the right!
+				}
 			}
 			
 			//show strength/invincibility ICON and timer:
@@ -2163,7 +2214,7 @@
 	
 	pos_z = 0;
 
-	if(sbar_hudselector == 1)
+	if(sbar_hudselector == 1 || sbar_hudselector == 2)
 		pos_y = (vid_conheight - sbar_y) - cvar("sbar_flagstatus_pos") - 64;
 	else
 		pos_y = -117;
@@ -2220,7 +2271,7 @@
 	
 	pos_z = 0;
 
-	if(sbar_hudselector == 1)
+	if(sbar_hudselector == 1 || sbar_hudselector == 2)
 		pos_y = (vid_conheight - sbar_y) - cvar_or("sbar_ballstatus_pos", 123) - 64;
 	else
 		pos_y = -124; // 17 more than flag icons

Modified: branches/nexuiz-2.0/data/qcsrc/client/teamradar.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/client/teamradar.qc	2009-05-24 09:11:30 UTC (rev 6761)
+++ branches/nexuiz-2.0/data/qcsrc/client/teamradar.qc	2009-05-24 09:17:59 UTC (rev 6762)
@@ -144,7 +144,7 @@
 			if(dt == 0)
 				continue;
 			dt = time - dt;
-			if(dt > 1)
+			if(dt >= 1 || dt <= 0)
 				continue;
 			v = '2 2 0' * teamradar_size * dt;
 			drawpic(coord - 0.5 * v, "gfx/teamradar_ping", v, '1 1 1', 1 - dt, DRAWFLAG_ADDITIVE);

Modified: branches/nexuiz-2.0/data/qcsrc/client/waypointsprites.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/client/waypointsprites.qc	2009-05-24 09:11:30 UTC (rev 6761)
+++ branches/nexuiz-2.0/data/qcsrc/client/waypointsprites.qc	2009-05-24 09:17:59 UTC (rev 6762)
@@ -16,6 +16,7 @@
 .float fadetime;
 .float maxdistance;
 .float hideflags;
+.float spawntime;
 
 vector SPRITE_SIZE = '128 32 0';
 vector SPRITE_HOTSPOT = '64 32 0';
@@ -185,7 +186,7 @@
 	if(t == 0)
 		spriteimage = strcat("models/sprites/", spriteimage);
 	else
-		spriteimage = strcat("models/sprites/", spriteimage, "_frame", ftos(mod(floor(time * 2), t)));
+		spriteimage = strcat("models/sprites/", spriteimage, "_frame", ftos(mod(floor((max(0, time - self.spawntime)) * 2), t)));
 
 	drawrotpic(o, rot * 90 * DEG2RAD, spriteimage, SPRITE_SIZE * waypointsprite_scale * vidscale, SPRITE_HOTSPOT * waypointsprite_scale * vidscale, '1 1 1', a, DRAWFLAG_MIPMAP);
 }
@@ -205,6 +206,9 @@
 	float sendflags, f;
 	sendflags = ReadByte();
 
+	if(!self.spawntime)
+		self.spawntime = time;
+
 	self.draw2d = Draw_WaypointSprite;
 
 	InterpolateOrigin_Undo();

Modified: branches/nexuiz-2.0/data/qcsrc/common/constants.qh
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/common/constants.qh	2009-05-24 09:11:30 UTC (rev 6761)
+++ branches/nexuiz-2.0/data/qcsrc/common/constants.qh	2009-05-24 09:17:59 UTC (rev 6762)
@@ -92,6 +92,7 @@
 const float RADARICON_GENERATOR = 1;
 const float RADARICON_OBJECTIVE = 1;
 const float RADARICON_DOMPOINT = 1;
+const float RADARICON_POWERUP = 1;
 
 ///////////////////////////
 // key constants

Modified: branches/nexuiz-2.0/data/qcsrc/common/items.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/common/items.qc	2009-05-24 09:11:30 UTC (rev 6761)
+++ branches/nexuiz-2.0/data/qcsrc/common/items.qc	2009-05-24 09:17:59 UTC (rev 6762)
@@ -98,21 +98,21 @@
 void RegisterWeapons()
 {
 	// %weaponaddpoint
-	register_weapon(WEP_LASER,            w_laser,        0,          1, 1, 1, 0,                      "laser",        "laser",           "Laser");
-	register_weapon(WEP_SHOTGUN,          w_shotgun,      IT_SHELLS,  2, 1, 0, BOT_PICKUP_RATING_LOW,  "shotgun",      "shotgun",         "Shotgun");
-	register_weapon(WEP_UZI,              w_uzi,          IT_NAILS,   3, 1, 0, BOT_PICKUP_RATING_MID,  "uzi",          "uzi",             "Machine Gun");
-	register_weapon(WEP_GRENADE_LAUNCHER, w_glauncher,    IT_ROCKETS, 4, 1, 1, BOT_PICKUP_RATING_MID,  "gl",           "grenadelauncher", "Mortar");
-	register_weapon(WEP_ELECTRO,          w_electro,      IT_CELLS,   5, 1, 0, BOT_PICKUP_RATING_MID,  "electro",      "electro",         "Electro");
-	register_weapon(WEP_CRYLINK,          w_crylink,      IT_CELLS,   6, 1, 0, BOT_PICKUP_RATING_MID,  "crylink",      "crylink",         "Crylink");
-	register_weapon(WEP_NEX,              w_nex,          IT_CELLS,   7, 1, 0, BOT_PICKUP_RATING_HIGH, "nex",          "nex",             "Nex");
-	register_weapon(WEP_HAGAR,            w_hagar,        IT_ROCKETS, 8, 1, 1, BOT_PICKUP_RATING_MID,  "hagar",        "hagar",           "Hagar");
-	register_weapon(WEP_ROCKET_LAUNCHER,  w_rlauncher,    IT_ROCKETS, 9, 1, 1, BOT_PICKUP_RATING_HIGH, "rl",           "rocketlauncher",  "Rocket Launcher");
-	register_weapon(WEP_PORTO,            w_porto,        0,          0, 0, 0, 0,                      "porto" ,       "porto",           "Port-O-Launch");
-	register_weapon(WEP_MINSTANEX,        w_minstanex,    IT_CELLS,   7, 0, 1, BOT_PICKUP_RATING_HIGH, "minstanex",    "minstanex",       "MinstaNex");
-	register_weapon(WEP_HOOK,             w_hook,         IT_CELLS,   0, 0, 1, 0,                      "hookgun",      "hook",            "Grappling Hook");
-	register_weapon(WEP_SEEKER,           w_seeker,       IT_ROCKETS, 8, 0, 0, BOT_PICKUP_RATING_HIGH, "seeker",       "seeker",          "T.A.G. Seeker");
-	register_weapon(WEP_HLAC,             w_hlac,         IT_CELLS,   6, 1, 0, BOT_PICKUP_RATING_MID,  "hlac",         "hlac",            "Heavy Laser Assault Cannon");
-	register_weapon(WEP_CAMPINGRIFLE,     w_campingrifle, IT_NAILS,   3, 1, 0, BOT_PICKUP_RATING_MID,  "campingrifle", "campingrifle",    "Rifle");
+	register_weapon(WEP_LASER,            w_laser,        0,                1, 1, 1, 0,                      "laser",        "laser",           "Laser");
+	register_weapon(WEP_SHOTGUN,          w_shotgun,      IT_SHELLS,        2, 1, 0, BOT_PICKUP_RATING_LOW,  "shotgun",      "shotgun",         "Shotgun");
+	register_weapon(WEP_UZI,              w_uzi,          IT_NAILS,         3, 1, 0, BOT_PICKUP_RATING_MID,  "uzi",          "uzi",             "Machine Gun");
+	register_weapon(WEP_GRENADE_LAUNCHER, w_glauncher,    IT_ROCKETS,       4, 1, 1, BOT_PICKUP_RATING_MID,  "gl",           "grenadelauncher", "Mortar");
+	register_weapon(WEP_ELECTRO,          w_electro,      IT_CELLS,         5, 1, 0, BOT_PICKUP_RATING_MID,  "electro",      "electro",         "Electro");
+	register_weapon(WEP_CRYLINK,          w_crylink,      IT_CELLS,         6, 1, 0, BOT_PICKUP_RATING_MID,  "crylink",      "crylink",         "Crylink");
+	register_weapon(WEP_NEX,              w_nex,          IT_CELLS,         7, 1, 0, BOT_PICKUP_RATING_HIGH, "nex",          "nex",             "Nex");
+	register_weapon(WEP_HAGAR,            w_hagar,        IT_ROCKETS,       8, 1, 1, BOT_PICKUP_RATING_MID,  "hagar",        "hagar",           "Hagar");
+	register_weapon(WEP_ROCKET_LAUNCHER,  w_rlauncher,    IT_ROCKETS,       9, 1, 1, BOT_PICKUP_RATING_HIGH, "rl",           "rocketlauncher",  "Rocket Launcher");
+	register_weapon(WEP_PORTO,            w_porto,        0,                0, 0, 0, 0,                      "porto" ,       "porto",           "Port-O-Launch");
+	register_weapon(WEP_MINSTANEX,        w_minstanex,    IT_CELLS,         7, 0, 1, BOT_PICKUP_RATING_HIGH, "minstanex",    "minstanex",       "MinstaNex");
+	register_weapon(WEP_HOOK,             w_hook,         IT_CELLS|IT_FUEL, 0, 0, 1, 0,                      "hookgun",      "hook",            "Grappling Hook");
+	register_weapon(WEP_SEEKER,           w_seeker,       IT_ROCKETS,       8, 0, 0, BOT_PICKUP_RATING_HIGH, "seeker",       "seeker",          "T.A.G. Seeker");
+	register_weapon(WEP_HLAC,             w_hlac,         IT_CELLS,         6, 1, 0, BOT_PICKUP_RATING_MID,  "hlac",         "hlac",            "Heavy Laser Assault Cannon");
+	register_weapon(WEP_CAMPINGRIFLE,     w_campingrifle, IT_NAILS,         3, 1, 0, BOT_PICKUP_RATING_MID,  "campingrifle", "campingrifle",    "Rifle");
 
 	register_weapons_done();
 }

Modified: branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/dialog_singleplayer.c
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/dialog_singleplayer.c	2009-05-24 09:11:30 UTC (rev 6761)
+++ branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/dialog_singleplayer.c	2009-05-24 09:17:59 UTC (rev 6762)
@@ -40,7 +40,7 @@
 		else if(argv(0) == "changelevel")
 		{
 			fclose(fh);
-			localcmd("\ndisconnect\nwait\ng_campaign 0\nmaxplayers $menu_maxplayers\n");
+			localcmd("\nmenu_loadmap_prepare\n");
 			MapInfo_SwitchGameType(MAPINFO_TYPE_DEATHMATCH);
 			MapInfo_LoadMap(argv(1));
 			cvar_set("lastlevel", "1");

Modified: branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/maplist.c
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/maplist.c	2009-05-24 09:11:30 UTC (rev 6761)
+++ branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/maplist.c	2009-05-24 09:17:59 UTC (rev 6762)
@@ -272,7 +272,7 @@
 	}
 	if(MapInfo_CheckMap(m))
 	{
-		localcmd("\ndisconnect\nwait\ng_campaign 0\nmaxplayers $menu_maxplayers\ng_maplist_shufflenow\n");
+		localcmd("\nmenu_loadmap_prepare\n");
 		if(cvar("menu_use_default_hostname"))
 			localcmd("hostname \"", strdecolorize(cvar_string("_cl_name")), "'s Nexuiz server\"\n");
 		MapInfo_LoadMap(m);

Modified: branches/nexuiz-2.0/data/qcsrc/server/cl_client.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/cl_client.qc	2009-05-24 09:11:30 UTC (rev 6761)
+++ branches/nexuiz-2.0/data/qcsrc/server/cl_client.qc	2009-05-24 09:17:59 UTC (rev 6762)
@@ -362,6 +362,13 @@
 		if(substring(plyermodel,strlen(plyermodel)-4,4) != ".md3")
 		if(substring(plyermodel,strlen(plyermodel)-4,4) != ".psk")
 			return FallbackPlayerModel;
+#ifdef ALLOW_VARIABLE_LOD
+		// forbid the LOD models
+		if(substring(plyermodel, strlen(plyermodel)-6,2) == "_1")
+			return FallbackPlayerModel;
+		if(substring(plyermodel, strlen(plyermodel)-6,2) == "_2")
+			return FallbackPlayerModel;
+#endif
 		if(plyermodel != strtolower(plyermodel))
 			return FallbackPlayerModel;
 		if(!fexists(plyermodel))
@@ -923,7 +930,7 @@
 		WriteString(MSG_ENTITY, world.fog);
 	else
 		WriteString(MSG_ENTITY, "");
-
+	WriteByte(MSG_ENTITY, cvar("g_balance_armor_blockpercent") * 255.0);
 	return TRUE;
 }
 
@@ -1350,6 +1357,14 @@
 		stuffcmd(self, strcat("\nfog ", world.fog, "\nr_fog_exp2 0\nr_drawfog 1\n"));
 
 	SoundEntity_Attach(self);
+
+	if(cvar("g_hitplots"))
+	{
+		self.hitplotfh = fopen(strcat("hits-", matchid, "-", ftos(self.playerid), ".plot"), FILE_WRITE);
+		fputs(self.hitplotfh, strcat("#name ", self.netname, "\n"));
+	}
+	else
+		self.hitplotfh = -1;
 }
 
 /*
@@ -1370,6 +1385,12 @@
 		return;
 	}
 
+	if(self.hitplotfh >= 0)
+	{
+		fclose(self.hitplotfh);
+		self.hitplotfh = -1;
+	}
+
 	bot_clientdisconnect();
 
 	if(self.entcs)
@@ -1731,9 +1752,6 @@
 	limita = cvar("g_balance_armor_limit");
 	limitf = cvar("g_balance_fuel_limit");
 
-	if (g_minstagib || (g_lms && !cvar("g_lms_regenerate")))
-		return;
-
 	max_mod = regen_mod = rot_mod = limit_mod = 1;
 
 	if (self.runes & RUNE_REGEN)
@@ -1769,38 +1787,51 @@
 	limita = limita * limit_mod;
 	//limitf = limitf * limit_mod;
 
-	if (self.armorvalue > maxa)
+	if (!g_minstagib && (!g_lms || cvar("g_lms_regenerate")))
 	{
-		if (time > self.pauserotarmor_finished)
+		if (self.armorvalue > maxa)
 		{
-			self.armorvalue = max(maxa, self.armorvalue + (maxa - self.armorvalue) * cvar("g_balance_armor_rot") * frametime);
-			self.armorvalue = max(maxa, self.armorvalue - cvar("g_balance_armor_rotlinear") * frametime);
+			if (time > self.pauserotarmor_finished)
+			{
+				self.armorvalue = max(maxa, self.armorvalue + (maxa - self.armorvalue) * cvar("g_balance_armor_rot") * frametime);
+				self.armorvalue = max(maxa, self.armorvalue - cvar("g_balance_armor_rotlinear") * frametime);
+			}
 		}
-	}
-	else if (self.armorvalue < maxa)
-	{
-		if (time > self.pauseregen_finished)
+		else if (self.armorvalue < maxa)
 		{
-			self.armorvalue = CalcRegen(self.armorvalue, maxa, cvar("g_balance_armor_regen"));
-			self.armorvalue = min(maxa, self.armorvalue + cvar("g_balance_armor_regenlinear") * frametime);
+			if (time > self.pauseregen_finished)
+			{
+				self.armorvalue = CalcRegen(self.armorvalue, maxa, cvar("g_balance_armor_regen"));
+				self.armorvalue = min(maxa, self.armorvalue + cvar("g_balance_armor_regenlinear") * frametime);
+			}
 		}
-	}
-	if (self.health > maxh)
-	{
-		if (time > self.pauserothealth_finished)
+		if (self.armorvalue > limita)
+			self.armorvalue = limita;
+
+		if (self.health > maxh)
 		{
-			self.health = max(maxh, self.health + (maxh - self.health) * rot_mod*cvar("g_balance_health_rot") * frametime);
-			self.health = max(maxh, self.health - rot_mod*cvar("g_balance_health_rotlinear") * frametime);
+			if (time > self.pauserothealth_finished)
+			{
+				self.health = max(maxh, self.health + (maxh - self.health) * rot_mod*cvar("g_balance_health_rot") * frametime);
+				self.health = max(maxh, self.health - rot_mod*cvar("g_balance_health_rotlinear") * frametime);
+			}
 		}
-	}
-	else if (self.health < maxh)
-	{
-		if (time > self.pauseregen_finished)
+		else if (self.health < maxh)
 		{
-			self.health = CalcRegen(self.health, maxh, regen_mod * cvar("g_balance_health_regen"));
-			self.health = min(maxh, self.health + regen_mod*cvar("g_balance_health_regenlinear") * frametime);
+			if (time > self.pauseregen_finished)
+			{
+				self.health = CalcRegen(self.health, maxh, regen_mod * cvar("g_balance_health_regen"));
+				self.health = min(maxh, self.health + regen_mod*cvar("g_balance_health_regenlinear") * frametime);
+			}
 		}
+		if (self.health > limith)
+			self.health = limith;
+
+		// if player rotted to death...  die!
+		if(self.health < 1)
+			self.event_damage(self, self, 1, DEATH_ROT, self.origin, '0 0 0');
 	}
+
 	if (self.ammo_fuel > maxf)
 	{
 		if (time > self.pauserotfuel_finished)
@@ -1820,17 +1851,8 @@
 			}
 		}
 	}
-
-	if (self.health > limith)
-		self.health = limith;
-	if (self.armorvalue > limita)
-		self.armorvalue = limita;
 	if (self.ammo_fuel > limitf)
 		self.ammo_fuel = limitf;
-
-	// if player rotted to death...  die!
-	if(self.health < 1)
-		self.event_damage(self, self, 1, DEATH_ROT, self.origin, '0 0 0');
 }
 
 float zoomstate_set;
@@ -2168,6 +2190,7 @@
 */
 void() ctf_setstatus;
 void() nexball_setstatus;
+.float items_added;
 void PlayerPreThink (void)
 {
 	self.stat_sys_ticrate = cvar("sys_ticrate");
@@ -2391,12 +2414,16 @@
 
 		if(frametime)
 		{
+			self.items &~= self.items_added;
+
 			W_WeaponFrame();
 
-			self.items &~= IT_FUEL; // TODO don't do this if the current weapon actually USES fuel...
+			self.items_added = 0;
 			if(self.items & IT_JETPACK)
 				if(self.items & IT_FUEL_REGEN || self.ammo_fuel >= 0.01)
-					self.items |= IT_FUEL;
+					self.items_added |= IT_FUEL;
+
+			self.items |= self.items_added;
 		}
 
 		player_regen();

Modified: branches/nexuiz-2.0/data/qcsrc/server/cl_impulse.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/cl_impulse.qc	2009-05-24 09:11:30 UTC (rev 6761)
+++ branches/nexuiz-2.0/data/qcsrc/server/cl_impulse.qc	2009-05-24 09:17:59 UTC (rev 6762)
@@ -416,6 +416,15 @@
 						traceline(self.origin + self.view_ofs, self.origin + self.view_ofs + v_forward * 65536, FALSE, self);
 						sprint(self, strcat("distance: ", ftos(fabs(vlen(trace_endpos - (self.origin + self.view_ofs)))), "\n"));
 						break;
+					case 146:
+						makevectors(self.v_angle);
+						i = self.dphitcontentsmask;
+						self.dphitcontentsmask = DPCONTENTS_OPAQUE;
+						traceline(self.origin + self.view_ofs, self.origin + self.view_ofs + v_forward * 65536, FALSE, self);
+						self.dphitcontentsmask = i;
+						sprint(self, strcat("distance: ", ftos(fabs(vlen(trace_endpos - (self.origin + self.view_ofs)))), "\n"));
+						pointparticles(particleeffectnum("fire_big"), trace_endpos, '0 0 0', 10);
+						break;
 					case 148:
 						FOR_EACH_PLAYER(e)
 						{

Modified: branches/nexuiz-2.0/data/qcsrc/server/cl_player.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/cl_player.qc	2009-05-24 09:11:30 UTC (rev 6761)
+++ branches/nexuiz-2.0/data/qcsrc/server/cl_player.qc	2009-05-24 09:17:59 UTC (rev 6762)
@@ -665,9 +665,7 @@
 		self.last_selected_player = self.selected_player;
 }
 
-.float floodcontrol_chat;
-.float floodcontrol_chatteam;
-.float floodcontrol_chattell;
+.float muted; // to be used by prvm_edictset server playernumber muted 1
 void Say(entity source, float teamsay, entity privatesay, string msgin, float floodcontrol)
 {
 	string msgstr, colorstr, cmsgstr, namestr, fullmsgstr, sourcemsgstr, fullcmsgstr, sourcecmsgstr, privatemsgprefix;
@@ -798,6 +796,9 @@
 			msgstr = fullmsgstr;
 		}
 	}
+	
+	if (timeoutStatus == 2) //when game is paused, no flood protection
+		source.flood_field = flood = 0;
 
 	if(flood == 2)
 	{
@@ -833,12 +834,23 @@
 	if(privatesay)
 		sourcemsgstr = strcat(privatemsgprefix, substring(sourcemsgstr, privatemsgprefixlen, -1));
 
-	if(flood == 1)
+	if(source.muted)
 	{
+		// always fake the message
+		sprint(source, sourcemsgstr);
+		if(cmsgstr != "" && !privatesay)
+			centerprint(source, sourcecmsgstr);
+	}
+	else if(flood == 1)
+	{
 		if(cvar("g_chat_flood_notify_flooder"))
 			sprint(source, strcat("^3FLOOD CONTROL: ^7wait ^1", ftos(source.flood_field - time), "^3 seconds\n"));
 		else
+		{
 			sprint(source, sourcemsgstr);
+			if(cmsgstr != "" && !privatesay)
+				centerprint(source, sourcecmsgstr);
+		}
 	}
 	else if(privatesay)
 	{
@@ -1100,8 +1112,6 @@
 	GlobalSound(sample, chan, voicetype);
 }
 
-.float floodcontrol_voice;
-.float floodcontrol_voiceteam;
 void VoiceMessage(string type, string msg)
 {
 	var .string sample;
@@ -1137,6 +1147,9 @@
 		self.flood_field = max(time, self.flood_field) + flood_spv;
 	else
 		flood = 1;
+		
+	if (timeoutStatus == 2) //when game is paused, no flood protection
+		self.flood_field = flood = 0;
 
 	if (msg != "")
 		Say(self, ownteam, world, msg, 0);

Modified: branches/nexuiz-2.0/data/qcsrc/server/cl_weapons.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/cl_weapons.qc	2009-05-24 09:11:30 UTC (rev 6761)
+++ branches/nexuiz-2.0/data/qcsrc/server/cl_weapons.qc	2009-05-24 09:17:59 UTC (rev 6762)
@@ -173,11 +173,12 @@
 	SUB_SetFade(self, time + 20, 1);
 }
 
-// returns amount of ammo used, or -1 for failure, or 0 for no ammo count
-float W_ThrowNewWeapon(entity own, float wpn, float doreduce, vector org, vector velo)
+// returns amount of ammo used as string, or -1 for failure, or 0 for no ammo count
+string W_ThrowNewWeapon(entity own, float wpn, float doreduce, vector org, vector velo)
 {
 	entity oldself, wep;
-	float wa, thisammo;
+	float wa, thisammo, i, j;
+	string s;
 	var .float ammofield;
 
 	wep = spawn();
@@ -198,29 +199,38 @@
 		weapon_defaultspawnfunc(wpn);
 		self = oldself;
 		if(startitem_failed)
-			return -1;
+			return string_null;
 		wep.think = thrown_wep_think;
 		wep.nextthink = time + 0.5;
-		return 0;
+		return "";
 	}
 	else
 	{
-		ammofield = Item_CounterField(wa);
+		s = "";
 		oldself = self;
 		self = wep;
 		weapon_defaultspawnfunc(wpn);
 		self = oldself;
 		if(startitem_failed)
-			return -1;
+			return string_null;
 		if(doreduce)
 		{
-			thisammo = min(own.ammofield, wep.ammofield);
-			wep.ammofield = thisammo;
-			own.ammofield -= thisammo;
+			for(i = 0, j = 1; i < 24; ++i, j *= 2)
+			{
+				if(wa & j)
+				{
+					ammofield = Item_CounterField(j);
+					thisammo = min(own.ammofield, wep.ammofield);
+					wep.ammofield = thisammo;
+					own.ammofield -= thisammo;
+					s = strcat(s, " and ", ftos(thisammo), " ", Item_CounterFieldName(j));
+				}
+			}
+			s = substring(s, 5, -1);
 		}
 		wep.think = thrown_wep_think;
 		wep.nextthink = time + 0.5;
-		return wep.ammofield;
+		return s;
 	}
 }
 
@@ -248,7 +258,8 @@
 // toss current weapon
 void W_ThrowWeapon(vector velo, vector delta, float doreduce)
 {
-	local float w, a, wb;
+	local float w, wb;
+	string a;
 
 	w = self.weapon;
 	if (w == 0)
@@ -273,14 +284,14 @@
 	self.weapons &~= wb;
 	W_SwitchWeapon_Force(self, w_getbestweapon(self));
 	a = W_ThrowNewWeapon(self, w, doreduce, self.origin + delta, velo);
-	if(a < 0)
+	if not(a)
 		return;
 	if(self.health >= 1)
 	{
-		if(a == 0)
+		if(a == "")
 			sprint(self, strcat("You dropped the ^2", W_Name(w), "\n"));
 		else
-			sprint(self, strcat("You dropped the ^2", W_Name(w), " with ", ftos(a), " ", Item_CounterFieldName(W_AmmoItemCode(w)), "\n"));
+			sprint(self, strcat("You dropped the ^2", W_Name(w), " with ", a, "\n"));
 	}
 };
 
@@ -346,7 +357,7 @@
 	while (c < 5)
 	{
 		c = c + 1;
-		if(wb && self.weapons & wb == 0)
+		if(wb && ((self.weapons & wb) == 0))
 		{
 			W_SwitchWeapon_Force(self, w_getbestweapon(self));
 			wb = 0;

Modified: branches/nexuiz-2.0/data/qcsrc/server/cl_weaponsystem.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/cl_weaponsystem.qc	2009-05-24 09:11:30 UTC (rev 6761)
+++ branches/nexuiz-2.0/data/qcsrc/server/cl_weaponsystem.qc	2009-05-24 09:17:59 UTC (rev 6762)
@@ -25,6 +25,78 @@
 
 void(float fr, float t, void() func) weapon_thinkf;
 
+vector W_HitPlotUnnormalizedUntransform(vector screenforward, vector screenright, vector screenup, vector v)
+{
+	vector ret;
+	ret_x = screenright * v;
+	ret_y = screenup * v;
+	ret_z = screenforward * v;
+	return ret;
+}
+
+vector W_HitPlotNormalizedUntransform(vector org, entity targ, vector screenforward, vector screenright, vector screenup, vector v)
+{
+	float i, j, k;
+	vector mi, ma, thisv, myv, ret;
+
+	myv = W_HitPlotUnnormalizedUntransform(screenforward, screenright, screenup, org);
+
+	// x = 0..1 relative to hitbox; y = 0..1 relative to hitbox; z = distance
+
+	for(i = 0; i < 2; ++i) for(j = 0; j < 2; ++j) for(k = 0; k < 2; ++k)
+	{
+		thisv = targ.origin;
+		if(i) thisv_x += targ.maxs_x; else thisv_x += targ.mins_x;
+		if(j) thisv_y += targ.maxs_y; else thisv_y += targ.mins_y;
+		if(k) thisv_z += targ.maxs_z; else thisv_z += targ.mins_z;
+		thisv = W_HitPlotUnnormalizedUntransform(screenforward, screenright, screenup, thisv);
+		if(i || j || k)
+		{
+			if(mi_x > thisv_x) mi_x = thisv_x; if(ma_x < thisv_x) ma_x = thisv_x;
+			if(mi_y > thisv_y) mi_y = thisv_y; if(ma_y < thisv_y) ma_y = thisv_y;
+			//if(mi_z > thisv_z) mi_z = thisv_z; if(ma_z < thisv_z) ma_y = thisv_z;
+		}
+		else
+		{
+			// first run
+			mi = ma = thisv;
+		}
+	}
+
+	thisv = W_HitPlotUnnormalizedUntransform(screenforward, screenright, screenup, v);
+	ret_x = (thisv_x - mi_x) / (ma_x - mi_x);
+	ret_y = (thisv_y - mi_y) / (ma_y - mi_y);
+	ret_z = thisv_z - myv_z;
+	return ret;
+}
+
+void W_HitPlotAnalysis(entity player, vector screenforward, vector screenright, vector screenup)
+{
+	vector hitplot; 
+	vector org;
+	float lag;
+
+	if(player.hitplotfh >= 0)
+	{
+		lag = ANTILAG_LATENCY(player);
+		if(lag < 0.001)
+			lag = 0;
+		if(clienttype(player) != CLIENTTYPE_REAL)
+			lag = 0; // only antilag for clients
+
+		org = player.origin + player.view_ofs;
+		traceline_antilag_force(player, org, org + screenforward * MAX_SHOT_DISTANCE, MOVE_NORMAL, player, lag);
+		if(trace_ent.flags & FL_CLIENT)
+		{
+			antilag_takeback(trace_ent, time - lag);
+			hitplot = W_HitPlotNormalizedUntransform(org, trace_ent, screenforward, screenright, screenup, trace_endpos);
+			antilag_restore(trace_ent);
+			fputs(player.hitplotfh, strcat(ftos(hitplot_x), " ", ftos(hitplot_y), " ", ftos(hitplot_z), " ", ftos(player.switchweapon), "\n"));
+			//print(strcat(ftos(hitplot_x), " ", ftos(hitplot_y), " ", ftos(hitplot_z), "\n"));
+		}
+	}
+}
+
 vector w_shotorg;
 vector w_shotdir;
 
@@ -42,6 +114,8 @@
 	traceline(ent.origin + ent.view_ofs, ent.origin + ent.view_ofs + v_forward * MAX_SHOT_DISTANCE, MOVE_NOMONSTERS, ent);
 	trueaimpoint = trace_endpos;
 
+	W_HitPlotAnalysis(ent, v_forward, v_right, v_up);
+
 	if(ent.weaponentity.movedir_x > 0)
 	{
 		vecs = ent.weaponentity.movedir;

Modified: branches/nexuiz-2.0/data/qcsrc/server/clientcommands.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/clientcommands.qc	2009-05-24 09:11:30 UTC (rev 6761)
+++ branches/nexuiz-2.0/data/qcsrc/server/clientcommands.qc	2009-05-24 09:17:59 UTC (rev 6762)
@@ -388,6 +388,9 @@
 			else
 				self.nickspamcount += 1;
 			self.nickspamtime = time + cvar("g_nick_flood_penalty");
+			
+			if (timeoutStatus == 2) //when game is paused, no flood protection
+				self.nickspamcount = self.nickspamtime = 0;
 		}
 
 		clientcommand(self,s);

Modified: branches/nexuiz-2.0/data/qcsrc/server/constants.qh
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/constants.qh	2009-05-24 09:11:30 UTC (rev 6761)
+++ branches/nexuiz-2.0/data/qcsrc/server/constants.qh	2009-05-24 09:17:59 UTC (rev 6762)
@@ -1,5 +1,5 @@
-string CVAR_CHECK_DEFAULT = "dbe0a62fd00f815592a25cea67fc6156";
-string CVAR_CHECK_WEAPONS = "00219e78f5d78d7d8a1600c4f4c73aa5";
+string CVAR_CHECK_DEFAULT = "ca174b42ef38020187602cfda6d8ef43";
+string CVAR_CHECK_WEAPONS = "c5b3e579a14c45d555550b08f203a607";
 
 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-05-24 09:11:30 UTC (rev 6761)
+++ branches/nexuiz-2.0/data/qcsrc/server/defs.qh	2009-05-24 09:17:59 UTC (rev 6762)
@@ -33,6 +33,12 @@
 float g_pickup_respawntime_medium;
 float g_pickup_respawntime_long;
 float g_pickup_respawntime_powerup;
+float g_pickup_respawntimejitter_weapon;
+float g_pickup_respawntimejitter_ammo;
+float g_pickup_respawntimejitter_short;
+float g_pickup_respawntimejitter_medium;
+float g_pickup_respawntimejitter_long;
+float g_pickup_respawntimejitter_powerup;
 float g_maplist_allow_hidden;
 float g_jetpack;
 
@@ -162,6 +168,7 @@
 .string playerskin;
 
 .float	respawntime;
+.float	respawntimejitter;
 //.float	chasecam;
 
 .float	damageforcescale;
@@ -567,7 +574,16 @@
 
 .vector prevorigin;
 
+//flood fields
 .float nickspamtime; // time of last nick change
 .float nickspamcount;
+.float floodcontrol_chat;
+.float floodcontrol_chatteam;
+.float floodcontrol_chattell;
+.float floodcontrol_voice;
+.float floodcontrol_voiceteam;
 
 .float stat_shotorg; // networked stat for trueaim HUD
+
+string matchid;
+.float hitplotfh;

Modified: branches/nexuiz-2.0/data/qcsrc/server/extensions.qh
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/extensions.qh	2009-05-24 09:11:30 UTC (rev 6761)
+++ branches/nexuiz-2.0/data/qcsrc/server/extensions.qh	2009-05-24 09:17:59 UTC (rev 6762)
@@ -1650,6 +1650,8 @@
 float DPCONTENTS_MONSTERCLIP = 512; // blocks monster movement
 float DPCONTENTS_DONOTENTER = 1024; // AI hint brush
 float DPCONTENTS_LIQUIDSMASK = 14; // WATER | SLIME | LAVA
+float DPCONTENTS_BOTCLIP = 2048; // AI hint brush
+float DPCONTENTS_OPAQUE = 4096; // only fully opaque brushes get this (may be useful for line of sight checks)
 float Q3SURFACEFLAG_NODAMAGE = 1;
 float Q3SURFACEFLAG_SLICK = 2; // low friction surface
 float Q3SURFACEFLAG_SKY = 4; // sky surface (also has NOIMPACT and NOMARKS set)

Modified: branches/nexuiz-2.0/data/qcsrc/server/func_breakable.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/func_breakable.qc	2009-05-24 09:11:30 UTC (rev 6761)
+++ branches/nexuiz-2.0/data/qcsrc/server/func_breakable.qc	2009-05-24 09:17:59 UTC (rev 6762)
@@ -13,6 +13,7 @@
 .float debristimejitter;
 .float debrisfadetime;
 .float debrisdamageforcescale;
+.float debrisskin;
 
 .string mdl_dead; // or "" to hide when broken
 .string debris; // space separated list of debris models
@@ -48,6 +49,8 @@
 	           + '0 1 0' * random() * (self.absmax_y - self.absmin_y)
 	           + '0 0 1' * random() * (self.absmax_z - self.absmin_z));
 	setmodel (dbr, debrisname );
+	dbr.skin = self.debrisskin;
+	dbr.colormap = self.colormap; // inherit team colors
 	dbr.owner = self; // do not be affected by our own explosion
 	dbr.movetype = self.debrismovetype;
 	dbr.solid = self.debrissolid;

Modified: branches/nexuiz-2.0/data/qcsrc/server/g_world.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/g_world.qc	2009-05-24 09:11:30 UTC (rev 6761)
+++ branches/nexuiz-2.0/data/qcsrc/server/g_world.qc	2009-05-24 09:17:59 UTC (rev 6762)
@@ -79,6 +79,10 @@
 		else {
 			//now pause the game:
 			timeoutStatus = 2;
+			//reset all the flood variables
+			FOR_EACH_CLIENT(plr) {
+				plr.nickspamcount = plr.nickspamtime = plr.floodcontrol_chat = plr.floodcontrol_chatteam = plr.floodcontrol_chattell = plr.floodcontrol_voice = plr.floodcontrol_voiceteam = 0;
+			}
 			cvar_set("slowmo", ftos(TIMEOUT_SLOWMO_VALUE));
 			//copy .v_angle to .lastV_angle for every player in order to fix their view during pause (see PlayerPreThink)
 			FOR_EACH_REALPLAYER(plr) {
@@ -500,6 +504,8 @@
 	{
 		s = strcat(cvar_string("sv_eventlog_files_counter"), ".");
 		s = strcat(s, ftos(random()));
+		matchid = strzone(s);
+
 		GameLogEcho(strcat(":gamestart:", GetGametype(), "_", GetMapname(), ":", s));
 		s = ":gameinfo:mutators:LIST";
 		if(cvar("g_grappling_hook"))
@@ -527,6 +533,8 @@
 		GameLogEcho(s);
 		GameLogEcho(":gameinfo:end");
 	}
+	else
+		matchid = strzone(ftos(random()));
 
 	cvar_set("nextmap", "");
 

Modified: branches/nexuiz-2.0/data/qcsrc/server/miscfunctions.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/miscfunctions.qc	2009-05-24 09:11:30 UTC (rev 6761)
+++ branches/nexuiz-2.0/data/qcsrc/server/miscfunctions.qc	2009-05-24 09:17:59 UTC (rev 6762)
@@ -943,30 +943,16 @@
 		}
 	}
 
-	if(start_weapons & WEPBIT_HOOK)
+	if(g_jetpack || (g_grappling_hook && (start_weapons & WEPBIT_HOOK)))
 	{
-		// can't have off-hand hook, if hook weapon is enabled
-
-		// note: if g_grappling_hook is 1, also give some initial cells
-		if(g_grappling_hook)
-		{
-			if(!start_ammo_cells)
-				start_ammo_cells = g_pickup_cells;
-			if(!warmup_start_ammo_cells)
-				warmup_start_ammo_cells = g_pickup_cells;
-		}
-
-		g_grappling_hook = 0;
-	}
-
-	if(g_jetpack)
-	{
 		g_grappling_hook = 0; // these two can't coexist, as they use the same button
-		start_items |= IT_JETPACK;
 		start_items |= IT_FUEL_REGEN;
 		start_ammo_fuel = max(start_ammo_fuel, cvar("g_balance_fuel_stable"));
 	}
 
+	if(g_jetpack)
+		start_items |= IT_JETPACK;
+
 	if(g_weapon_stay == 2)
 	{
 		if(!start_ammo_shells) start_ammo_shells = g_pickup_shells;
@@ -1078,6 +1064,12 @@
 	g_pickup_respawntime_medium = cvar("g_pickup_respawntime_medium");
 	g_pickup_respawntime_long = cvar("g_pickup_respawntime_long");
 	g_pickup_respawntime_powerup = cvar("g_pickup_respawntime_powerup");
+	g_pickup_respawntimejitter_weapon = cvar("g_pickup_respawntimejitter_weapon");
+	g_pickup_respawntimejitter_ammo = cvar("g_pickup_respawntimejitter_ammo");
+	g_pickup_respawntimejitter_short = cvar("g_pickup_respawntimejitter_short");
+	g_pickup_respawntimejitter_medium = cvar("g_pickup_respawntimejitter_medium");
+	g_pickup_respawntimejitter_long = cvar("g_pickup_respawntimejitter_long");
+	g_pickup_respawntimejitter_powerup = cvar("g_pickup_respawntimejitter_powerup");
 
 	if(g_minstagib) g_nixnex = g_weaponarena = 0;
 	if(g_nixnex) g_weaponarena = 0;

Modified: branches/nexuiz-2.0/data/qcsrc/server/mode_onslaught.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/mode_onslaught.qc	2009-05-24 09:11:30 UTC (rev 6761)
+++ branches/nexuiz-2.0/data/qcsrc/server/mode_onslaught.qc	2009-05-24 09:17:59 UTC (rev 6762)
@@ -380,23 +380,165 @@
 	}
 };
 
+void onslaught_generator_ring_think()
+{
+	self.nextthink = time;
+	if(self.count>20)
+	{
+		self.think = SUB_Remove;
+		return;
+	}
+
+	self.scale = self.count * 4;
+	setsize(self, self.mins * self.scale, self.maxs * self.scale);
+
+	self.frame = self.count * 4;
+
+	self.count +=1;
+	self.alpha = 0.3;
+};
+
+void onslaught_generator_ring_spawn(vector org)
+{
+	entity e;
+	e = spawn();
+	setmodel(e, "models/onslaught/shockwavetransring.md3");
+	setorigin(e,org);
+
+	e.count = 1;
+	e.alpha = 0;
+
+	e.think = onslaught_generator_ring_think;
+	e.nextthink = time;
+};
+
+void onslaught_generator_shockwave_think()
+{
+	self.nextthink = time;
+	if(self.count>20)
+	{
+		self.think = SUB_Remove;
+		return;
+	}
+
+	if(self.count>10)
+		self.alpha -= 0.1;
+	else
+		self.alpha = 1;
+
+	self.scale = self.count * 4;
+	setsize(self, self.mins * self.scale, self.maxs * self.scale);
+	self.frame = self.count * 4;
+
+	self.count +=1;
+};
+
+void onslaught_generator_shockwave_spawn(vector org)
+{
+	entity e;
+	e = spawn();
+	setmodel(e, "models/onslaught/shockwave.md3");
+	setorigin(e,org);
+
+	e.alpha = 0;
+	e.frame = 0;
+
+	e.think = onslaught_generator_shockwave_think;
+	e.nextthink = time;
+};
+
+void onslaught_generator_boom_think()
+{
+	self.nextthink = time;
+	if(self.frame==15)
+	{
+		self.think = SUB_Remove;
+		return;
+	}
+
+	if(self.frame>11)
+		self.alpha -= 0.3;
+
+	self.frame +=1;
+};
+
+void onslaught_generator_boom_spawn(vector org, float fscale)
+{
+	entity e;
+	e = spawn();
+	setmodel(e, "models/onslaught/boom.md3");
+	setorigin(e,org);
+
+	e.scale = fscale;
+	setsize(e, e.mins * e.scale, e.maxs * e.scale);
+
+	e.effects = EF_NOSHADOW;
+
+	e.think = onslaught_generator_boom_think;
+	e.nextthink = time;
+};
+
 void onslaught_generator_deaththink()
 {
 	local vector org;
-	if (self.count > 0)
+	local float i, scale;
+
+	if not (self.count)
+		self.count = 40;
+
+	// White shockwave
+	if(self.count==40||self.count==20)
 	{
-		self.nextthink = time + 0.1;
-		self.count = self.count - 1;
-		org = randompos(self.origin + self.mins + '8 8 8', self.origin + self.maxs + '-8 -8 -8');
-		pointparticles(particleeffectnum("onslaught_generator_smallexplosion"), org, '0 0 0', 1);
+		onslaught_generator_ring_spawn(self.origin);
+		sound(self, CHAN_TRIGGER, "onslaught/shockwave.wav", VOL_BASE, ATTN_NORM);
+	}
+
+	// Throw some gibs
+	if(random()<0.2)
+	{
+		i = random();
+		if(i<0.3)
+			ons_trowgib(self.origin, (100 * randomvec() - '1 1 1') * 25,'1 1 1',"models/onslaught/gen_gib1.md3",20,1,0);
+		else if(i>0.7)
+			ons_trowgib(self.origin, (100 * randomvec() - '1 1 1') * 25,'1 1 1',"models/onslaught/gen_gib2.md3",20,1,0);
+		else
+			ons_trowgib(self.origin, (100 * randomvec() - '1 1 1') * 25,'1 1 1',"models/onslaught/gen_gib3.md3",20,1,0);
+	}
+
+	// Spawn fire balls
+	for(i=0;i<6;++i)
+	{
+		org = self.origin + self.mins;
+		org_z = self.origin_z - 20;
+		org = randompos(org, self.origin + self.maxs + '0 0 20');
+
+		onslaught_generator_boom_spawn(org, 1);
+	}
+
+	// Short explosion sound + small explosion
+	if(random()<0.25)
+	{
+		te_explosion(self.origin);
 		sound(self, CHAN_TRIGGER, "weapons/grenade_impact.wav", VOL_BASE, ATTN_NORM);
 	}
-	else
+
+	// Particles
+	org = randompos(self.origin + self.mins + '8 8 8', self.origin + self.maxs + '-8 -8 -8');
+	pointparticles(particleeffectnum("onslaught_generator_smallexplosion"), org, '0 0 0', 1);
+
+	// Final explosion
+	if(self.count==1)
 	{
 		org = self.origin;
+		te_explosion(org);
+		onslaught_generator_shockwave_spawn(org);
 		pointparticles(particleeffectnum("onslaught_generator_finalexplosion"), org, '0 0 0', 1);
 		sound(self, CHAN_TRIGGER, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
 	}
+	else
+		self.nextthink = time;
+
+	self.count = self.count - 1;
 };
 
 void onslaught_generator_damage(entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force)
@@ -451,16 +593,30 @@
 		self.isshielded = FALSE;
 		self.takedamage = DAMAGE_NO; // can't be hurt anymore
 		self.event_damage = SUB_Null; // won't do anything if hurt
-		self.count = 30; // 30 explosions
+		self.count = 0;	// reset counter
 		self.think = onslaught_generator_deaththink; // explosion sequence
 		self.nextthink = time; // start exploding immediately
 		self.think(); // do the first explosion now
 		onslaught_updatelinks();
 	}
-	if(self.health < cvar("g_onslaught_gen_health") * 0.75)
+	if(self.health < cvar("g_onslaught_gen_health") * 0.90)
 		setmodel(self, "models/onslaught/generator_dmg1.md3");
-	if(self.health < cvar("g_onslaught_gen_health") * 0.35)
+	if(self.health < cvar("g_onslaught_gen_health") * 0.80)
 		setmodel(self, "models/onslaught/generator_dmg2.md3");
+	if(self.health < cvar("g_onslaught_gen_health") * 0.70)
+		setmodel(self, "models/onslaught/generator_dmg3.md3");
+	if(self.health < cvar("g_onslaught_gen_health") * 0.60)
+		setmodel(self, "models/onslaught/generator_dmg4.md3");
+	if(self.health < cvar("g_onslaught_gen_health") * 0.50)
+		setmodel(self, "models/onslaught/generator_dmg5.md3");
+	if(self.health < cvar("g_onslaught_gen_health") * 0.40)
+		setmodel(self, "models/onslaught/generator_dmg6.md3");
+	if(self.health < cvar("g_onslaught_gen_health") * 0.30)
+		setmodel(self, "models/onslaught/generator_dmg7.md3");
+	if(self.health < cvar("g_onslaught_gen_health") * 0.20)
+		setmodel(self, "models/onslaught/generator_dmg8.md3");
+	if(self.health < cvar("g_onslaught_gen_health") * 0.10)
+		setmodel(self, "models/onslaught/generator_dmg9.md3");
 	if(self.health <= 0)
 		setmodel(self, "models/onslaught/generator_dead.md3");
 };
@@ -643,11 +799,25 @@
 	precache_model("models/onslaught/generator_shield.md3");
 	precache_model("models/onslaught/generator_dmg1.md3");
 	precache_model("models/onslaught/generator_dmg2.md3");
+	precache_model("models/onslaught/generator_dmg3.md3");
+	precache_model("models/onslaught/generator_dmg4.md3");
+	precache_model("models/onslaught/generator_dmg5.md3");
+	precache_model("models/onslaught/generator_dmg6.md3");
+	precache_model("models/onslaught/generator_dmg7.md3");
+	precache_model("models/onslaught/generator_dmg8.md3");
+	precache_model("models/onslaught/generator_dmg9.md3");
 	precache_model("models/onslaught/generator_dead.md3");
+	precache_model("models/onslaught/boom.md3");
+	precache_model("models/onslaught/shockwave.md3");
+	precache_model("models/onslaught/shockwavetransring.md3");
+	precache_model("models/onslaught/gen_gib1.md3");
+	precache_model("models/onslaught/gen_gib2.md3");
+	precache_model("models/onslaught/gen_gib3.md3");
 	precache_sound("onslaught/generator_decay.wav");
 	precache_sound("weapons/grenade_impact.wav");
 	precache_sound("weapons/rocket_impact.wav");
 	precache_sound("onslaught/generator_underattack.wav");
+	precache_sound("onslaught/shockwave.wav");
 	if (!self.team)
 		objerror("team must be set");
 	self.team_saved = self.team;
@@ -916,7 +1086,7 @@
 	self.enemy.colormap = self.colormap;
 	self.think = self.enemy.think = SUB_Null;
 	self.nextthink = 0; // don't like SUB_Null :P
-	
+
 	onslaught_updatelinks();
 
 	activator = self;

Modified: branches/nexuiz-2.0/data/qcsrc/server/t_items.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/t_items.qc	2009-05-24 09:11:30 UTC (rev 6761)
+++ branches/nexuiz-2.0/data/qcsrc/server/t_items.qc	2009-05-24 09:17:59 UTC (rev 6762)
@@ -1,3 +1,8 @@
+#define ITEM_RESPAWNTIME(i)         ((i).respawntime + crandom() * (i).respawntimejitter)
+	// range: respawntime - respawntimejitter .. respawntime + respawntimejitter
+#define ITEM_RESPAWNTIME_INITIAL(i) (10 + random() * ((i).respawntime + (i).respawntimejitter - 10))
+	// range: 10 .. respawntime + respawntimejitter
+
 floatfield Item_CounterField(float it)
 {
 	switch(it)
@@ -45,6 +50,83 @@
 	pointparticles(particleeffectnum("item_respawn"), self.origin + 0.5 * (self.mins + self.maxs), '0 0 0', 1);
 }
 
+void Item_RespawnCountdown (void)
+{
+	if(self.count >= 5)
+	{
+		if(self.waypointsprite_attached)
+			WaypointSprite_Kill(self.waypointsprite_attached);
+		Item_Respawn();
+	}
+	else
+	{
+		self.nextthink = time + 1;
+		self.count += 1;
+		if(self.count == 1)
+		{
+			string name;
+			vector rgb;
+			name = string_null;
+			if(g_minstagib)
+			{
+				switch(self.items)
+				{
+					case IT_STRENGTH:   name = "item-invis"; rgb = '0 0 1'; break;
+					case IT_NAILS:      name = "item-extralife"; rgb = '1 0 0'; break;
+					case IT_INVINCIBLE: name = "item-speed"; rgb = '1 0 1'; break;
+				}
+			}
+			else
+			{
+				switch(self.items)
+				{
+					case IT_STRENGTH:   name = "item-strength"; rgb = '0 0 1'; break;
+					case IT_INVINCIBLE: name = "item-shield"; rgb = '1 0 1'; break;
+				}
+			}
+			switch(self.items)
+			{
+				case IT_FUEL_REGEN:     name = "item-fuelregen"; rgb = '1 0.5 0'; break;
+				case IT_JETPACK:        name = "item-jetpack"; rgb = '0.5 0.5 0.5'; break;
+			}
+			if(name)
+			{
+				WaypointSprite_Spawn(name, 0, 0, self, '0 0 64', world, 0, self, waypointsprite_attached, FALSE);
+				if(self.waypointsprite_attached)
+					WaypointSprite_UpdateTeamRadar(self.waypointsprite_attached, RADARICON_POWERUP, rgb);
+			}
+		}
+		sound (self, CHAN_TRIGGER, "misc/itemrespawncountdown.wav", VOL_BASE, ATTN_NORM);	// play respawn sound
+		if(self.waypointsprite_attached)
+			WaypointSprite_Ping(self.waypointsprite_attached);
+	}
+}
+
+void Item_ScheduleRespawnIn(entity e, float t)
+{
+	if(e.flags & FL_POWERUP)
+	{
+		e.think = Item_RespawnCountdown;
+		e.nextthink = time + max(0, t - 5);
+		e.count = 0;
+	}
+	else
+	{
+		e.think = Item_Respawn;
+		e.nextthink = time + t;
+	}
+}
+
+void Item_ScheduleRespawn(entity e)
+{
+	Item_ScheduleRespawnIn(e, ITEM_RESPAWNTIME(e));
+}
+
+void Item_ScheduleInitialRespawn(entity e)
+{
+	Item_ScheduleRespawnIn(e, ITEM_RESPAWNTIME_INITIAL(e));
+}
+
 float Item_GiveTo(entity item, entity player)
 {
 	float _switchweapon;
@@ -59,6 +141,20 @@
 
 	if (g_minstagib)
 	{
+		if (item.ammo_fuel)
+		if (player.ammo_fuel < g_pickup_fuel_max)
+		{
+			pickedup = TRUE;
+			player.ammo_fuel = min(player.ammo_fuel + item.ammo_fuel, g_pickup_fuel_max);
+			player.pauserotfuel_finished = max(player.pauserotfuel_finished, time + cvar("g_balance_pause_fuel_rot"));
+		}
+		if((it = (item.items - (item.items & player.items)) & IT_PICKUPMASK))
+		{
+			pickedup = TRUE;
+			player.items |= it;
+			sprint (player, strcat("You got the ^2", item.netname, "\n"));
+		}
+
 		_switchweapon = TRUE;
 		if (item.ammo_cells)
 		{
@@ -107,6 +203,15 @@
 			// play2(player, "announce/robotic/speed.wav");
 			player.invincible_finished = max(player.invincible_finished, time) + cvar("g_balance_powerup_strength_time");
 		}
+
+		if (item.ammo_fuel)
+		if (player.ammo_fuel < g_pickup_fuel_max)
+		{
+			pickedup = TRUE;
+			player.ammo_fuel = min(player.ammo_fuel + item.ammo_fuel, g_pickup_fuel_max);
+			player.pauserotfuel_finished = max(player.pauserotfuel_finished, time + cvar("g_balance_pause_fuel_rot"));
+		}
+
 	}
 	else
 	{
@@ -184,6 +289,7 @@
 		{
 			pickedup = TRUE;
 			player.items |= it;
+			sprint (player, strcat("You got the ^2", item.netname, "\n"));
 		}
 
 		if (item.strength_finished)
@@ -278,8 +384,7 @@
 		}
 		else
 			e = self;
-		e.nextthink = time + self.respawntime;
-		e.think = Item_Respawn;
+		Item_ScheduleRespawn(e);
 	}
 }
 
@@ -306,8 +411,15 @@
 				head.model = string_null;
 				head.state = 1; // state 1 = initially hidden item
 			}
-			head.effects = head.effects - (head.effects & EF_NODRAW);
+			head.effects &~= EF_NODRAW;
 		}
+
+		if(e.flags & FL_POWERUP) // do not spawn powerups initially!
+		{
+			e.solid = SOLID_NOT;
+			e.model = string_null;
+			Item_ScheduleInitialRespawn(e);
+		}
 	}
 }
 
@@ -326,6 +438,13 @@
 	setorigin (self, self.origin);
 	self.think = SUB_Null;
 	self.nextthink = 0;
+
+	if(self.flags & FL_POWERUP) // do not spawn powerups initially!
+	{
+		self.solid = SOLID_NOT;
+		self.model = string_null;
+		Item_ScheduleInitialRespawn(self);
+	}
 }
 
 // Savage: used for item garbage-collection
@@ -379,7 +498,7 @@
 
 
 .float is_item;
-void StartItem (string itemmodel, string pickupsound, float defaultrespawntime, string itemname, float itemid, float weaponid, float itemflags, float(entity player, entity item) pickupevalfunc, float pickupbasevalue)
+void StartItem (string itemmodel, string pickupsound, float defaultrespawntime, float defaultrespawntimejitter, string itemname, float itemid, float weaponid, float itemflags, float(entity player, entity item) pickupevalfunc, float pickupbasevalue)
 {
 	startitem_failed = FALSE;
 
@@ -521,6 +640,7 @@
 		precache_model (itemmodel);
 		precache_sound (pickupsound);
 		precache_sound ("misc/itemrespawn.wav");
+		precache_sound ("misc/itemrespawncountdown.wav");
 
 		if((itemid & (IT_STRENGTH | IT_INVINCIBLE | IT_HEALTH | IT_ARMOR | IT_KEY1 | IT_KEY2)) || (weaponid & WEPBIT_ALL))
 			self.target = "###item###"; // for finding the nearest item using find()
@@ -532,8 +652,11 @@
 	self.mdl = itemmodel;
 	self.item_pickupsound = pickupsound;
 	// let mappers override respawntime
-	if (!self.respawntime)
+	if(!self.respawntime) // both set
+	{
 		self.respawntime = defaultrespawntime;
+		self.respawntimejitter = defaultrespawntimejitter;
+	}
 	self.netname = itemname;
 	self.items = itemid;
 	self.weapons = weaponid;
@@ -566,6 +689,12 @@
 		self.effects = self.effects | EF_NODRAW; // marker for item team search
 		InitializeEntity(self, Item_FindTeam, INITPRIO_FINDTARGET);
 	}
+	else if(self.flags & FL_POWERUP) // do not spawn powerups initially!
+	{
+		self.solid = SOLID_NOT;
+		self.model = string_null;
+		Item_ScheduleInitialRespawn(self);
+	}
 }
 
 /* replace items in minstagib
@@ -580,7 +709,7 @@
 	{
 		self.ammo_cells = 25;
 		StartItem ("models/weapons/g_nex.md3",
-			"weapons/weaponpickup.wav", 15,
+			"weapons/weaponpickup.wav", 15, 0,
 			"MinstaNex", 0, WEPBIT_MINSTANEX, FL_WEAPON, generic_pickupevalfunc, 1000);
 		return;
 	}
@@ -593,7 +722,7 @@
 	{
 		self.ammo_cells = 1;
 		StartItem ("models/items/a_cells.md3",
-			"misc/itempickup.wav", 45,
+			"misc/itempickup.wav", 45, 0,
 			"Nex Ammo", IT_CELLS, 0, 0, generic_pickupevalfunc, 100);
 		return;
 	}
@@ -613,7 +742,7 @@
 		self.effects = EF_ADDITIVE;
 		self.strength_finished = 30;
 		StartItem ("models/items/g_strength.md3",
-			"misc/powerup.wav", g_pickup_respawntime_powerup,
+			"misc/powerup.wav", g_pickup_respawntime_powerup, g_pickup_respawntimejitter_powerup,
 			"Invisibility", IT_STRENGTH, 0, FL_POWERUP, generic_pickupevalfunc, BOT_PICKUP_RATING_MID);
 	}
 	// replace with extra lives
@@ -621,7 +750,7 @@
 	{
 		self.max_health = 1;
 		StartItem ("models/items/g_h100.md3",
-			"misc/megahealth.wav", g_pickup_respawntime_powerup,
+			"misc/megahealth.wav", g_pickup_respawntime_powerup, g_pickup_respawntimejitter_powerup,
 			"Extralife", IT_NAILS, 0, FL_POWERUP, generic_pickupevalfunc, BOT_PICKUP_RATING_HIGH);
 
 	}
@@ -631,7 +760,7 @@
 		self.effects = EF_ADDITIVE;
 		self.invincible_finished = 30;
 		StartItem ("models/items/g_invincible.md3",
-			"misc/powerup_shield.wav", g_pickup_respawntime_powerup,
+			"misc/powerup_shield.wav", g_pickup_respawntime_powerup, g_pickup_respawntimejitter_powerup,
 			"Speed", IT_INVINCIBLE, 0, FL_POWERUP, generic_pickupevalfunc, BOT_PICKUP_RATING_MID);
 	}
 
@@ -656,13 +785,20 @@
 	float i, j;
 
 	// set the respawntime in advance (so replaced weapons can copy it)
+
 	if(!self.respawntime)
 	{
 		e = get_weaponinfo(wpn);
 		if(e.items == IT_SUPERWEAPON)
+		{
 			self.respawntime = g_pickup_respawntime_powerup;
+			self.respawntimejitter = g_pickup_respawntimejitter_powerup;
+		}
 		else
+		{
 			self.respawntime = g_pickup_respawntime_weapon;
+			self.respawntimejitter = g_pickup_respawntimejitter_weapon;
+		}
 	}
 
 	if(self.classname != "droppedweapon" && self.classname != "replacedweapon")
@@ -732,9 +868,15 @@
 
 	if(e.items && e.items != IT_SUPERWEAPON)
 	{
-		ammofield = Item_CounterField(e.items);
-		if(!self.ammofield)
-			self.ammofield = cvar(strcat("g_pickup_", Item_CounterFieldName(e.items)));
+		for(i = 0, j = 1; i < 24; ++i, j *= 2)
+		{
+			if(e.items & j)
+			{
+				ammofield = Item_CounterField(j);
+				if(!self.ammofield)
+					self.ammofield = cvar(strcat("g_pickup_", Item_CounterFieldName(j)));
+			}
+		}
 	}
 	else
 	{
@@ -755,7 +897,7 @@
 		// initialize all ammo types to the pickup ammo unless set by g_start_ammo_*
 	}
 
-	StartItem(e.model, "weapons/weaponpickup.wav", self.respawntime, e.message, 0, e.weapons, FL_WEAPON, weapon_pickupevalfunc, e.bot_pickupbasevalue);
+	StartItem(e.model, "weapons/weaponpickup.wav", self.respawntime, self.respawntimejitter, e.message, 0, e.weapons, FL_WEAPON, weapon_pickupevalfunc, e.bot_pickupbasevalue);
 	if (self.modelindex) // don't precache if self was removed
 		weapon_action(e.weapon, WR_PRECACHE);
 }
@@ -820,7 +962,7 @@
 void spawnfunc_item_rockets (void) {
 	if(!self.ammo_rockets)
 		self.ammo_rockets = g_pickup_rockets;
-	StartItem ("models/items/a_rockets.md3", "misc/itempickup.wav", g_pickup_respawntime_ammo, "rockets", IT_ROCKETS, 0, 0, commodity_pickupevalfunc, 3000);
+	StartItem ("models/items/a_rockets.md3", "misc/itempickup.wav", g_pickup_respawntime_ammo, g_pickup_respawntimejitter_ammo, "rockets", IT_ROCKETS, 0, 0, commodity_pickupevalfunc, 3000);
 }
 
 void spawnfunc_item_shells (void);
@@ -837,13 +979,13 @@
 
 	if(!self.ammo_nails)
 		self.ammo_nails = g_pickup_nails;
-	StartItem ("models/items/a_bullets.mdl", "misc/itempickup.wav", g_pickup_respawntime_ammo, "bullets", IT_NAILS, 0, 0, commodity_pickupevalfunc, 2000);
+	StartItem ("models/items/a_bullets.mdl", "misc/itempickup.wav", g_pickup_respawntime_ammo, g_pickup_respawntimejitter_ammo, "bullets", IT_NAILS, 0, 0, commodity_pickupevalfunc, 2000);
 }
 
 void spawnfunc_item_cells (void) {
 	if(!self.ammo_cells)
 		self.ammo_cells = g_pickup_cells;
-	StartItem ("models/items/a_cells.md3", "misc/itempickup.wav", g_pickup_respawntime_ammo, "cells", IT_CELLS, 0, 0, commodity_pickupevalfunc, 2000);
+	StartItem ("models/items/a_cells.md3", "misc/itempickup.wav", g_pickup_respawntime_ammo, g_pickup_respawntimejitter_ammo, "cells", IT_CELLS, 0, 0, commodity_pickupevalfunc, 2000);
 }
 
 void spawnfunc_item_shells (void) {
@@ -859,7 +1001,7 @@
 
 	if(!self.ammo_shells)
 		self.ammo_shells = g_pickup_shells;
-	StartItem ("models/items/a_shells.md3", "misc/itempickup.wav", g_pickup_respawntime_ammo, "shells", IT_SHELLS, 0, 0, commodity_pickupevalfunc, 500);
+	StartItem ("models/items/a_shells.md3", "misc/itempickup.wav", g_pickup_respawntime_ammo, g_pickup_respawntimejitter_ammo, "shells", IT_SHELLS, 0, 0, commodity_pickupevalfunc, 500);
 }
 
 void spawnfunc_item_armor_small (void) {
@@ -867,7 +1009,7 @@
 		self.armorvalue = g_pickup_armorsmall;
 	if(!self.max_armorvalue)
 		self.max_armorvalue = g_pickup_armorsmall_max;
-	StartItem ("models/items/g_a1.md3", "misc/armor1.wav", g_pickup_respawntime_short, "5 Armor", IT_ARMOR_SHARD, 0, 0, commodity_pickupevalfunc, BOT_PICKUP_RATING_LOW);
+	StartItem ("models/items/g_a1.md3", "misc/armor1.wav", g_pickup_respawntime_short, g_pickup_respawntimejitter_short, "5 Armor", IT_ARMOR_SHARD, 0, 0, commodity_pickupevalfunc, BOT_PICKUP_RATING_LOW);
 }
 
 void spawnfunc_item_armor_medium (void) {
@@ -875,7 +1017,7 @@
 		self.armorvalue = g_pickup_armormedium;
 	if(!self.max_armorvalue)
 		self.max_armorvalue = g_pickup_armormedium_max;
-	StartItem ("models/items/g_armormedium.md3", "misc/armor10.wav", g_pickup_respawntime_medium, "25 Armor", IT_ARMOR, 0, 0, commodity_pickupevalfunc, BOT_PICKUP_RATING_MID);
+	StartItem ("models/items/g_armormedium.md3", "misc/armor10.wav", g_pickup_respawntime_medium, g_pickup_respawntimejitter_medium, "25 Armor", IT_ARMOR, 0, 0, commodity_pickupevalfunc, BOT_PICKUP_RATING_MID);
 }
 
 void spawnfunc_item_armor_big (void) {
@@ -883,7 +1025,7 @@
 		self.armorvalue = g_pickup_armorbig;
 	if(!self.max_armorvalue)
 		self.max_armorvalue = g_pickup_armorbig_max;
-	StartItem ("models/items/g_a50.md3", "misc/armor17_5.wav", g_pickup_respawntime_long, "50 Armor", IT_ARMOR, 0, 0, commodity_pickupevalfunc, 20000);
+	StartItem ("models/items/g_a50.md3", "misc/armor17_5.wav", g_pickup_respawntime_long, g_pickup_respawntimejitter_long, "50 Armor", IT_ARMOR, 0, 0, commodity_pickupevalfunc, 20000);
 }
 
 void spawnfunc_item_armor_large (void) {
@@ -891,7 +1033,7 @@
 		self.armorvalue = g_pickup_armorlarge;
 	if(!self.max_armorvalue)
 		self.max_armorvalue = g_pickup_armorlarge_max;
-	StartItem ("models/items/g_a25.md3", "misc/armor25.wav", g_pickup_respawntime_long, "100 Armor", IT_ARMOR, 0, 0, commodity_pickupevalfunc, BOT_PICKUP_RATING_HIGH);
+	StartItem ("models/items/g_a25.md3", "misc/armor25.wav", g_pickup_respawntime_long, g_pickup_respawntimejitter_long, "100 Armor", IT_ARMOR, 0, 0, commodity_pickupevalfunc, BOT_PICKUP_RATING_HIGH);
 }
 
 void spawnfunc_item_health_small (void) {
@@ -899,7 +1041,7 @@
 		self.max_health = g_pickup_healthsmall_max;
 	if(!self.health)
 		self.health = g_pickup_healthsmall;
-	StartItem ("models/items/g_h1.md3", "misc/minihealth.wav", g_pickup_respawntime_short, "5 Health", IT_5HP, 0, 0, commodity_pickupevalfunc, BOT_PICKUP_RATING_LOW);
+	StartItem ("models/items/g_h1.md3", "misc/minihealth.wav", g_pickup_respawntime_short, g_pickup_respawntimejitter_short, "5 Health", IT_5HP, 0, 0, commodity_pickupevalfunc, BOT_PICKUP_RATING_LOW);
 }
 
 void spawnfunc_item_health_medium (void) {
@@ -907,7 +1049,7 @@
 		self.max_health = g_pickup_healthmedium_max;
 	if(!self.health)
 		self.health = g_pickup_healthmedium;
-	StartItem ("models/items/g_h25.md3", "misc/mediumhealth.wav", g_pickup_respawntime_short, "25 Health", IT_25HP, 0, 0, commodity_pickupevalfunc, BOT_PICKUP_RATING_MID);
+	StartItem ("models/items/g_h25.md3", "misc/mediumhealth.wav", g_pickup_respawntime_short, g_pickup_respawntimejitter_short, "25 Health", IT_25HP, 0, 0, commodity_pickupevalfunc, BOT_PICKUP_RATING_MID);
 }
 
 void spawnfunc_item_health_large (void) {
@@ -915,7 +1057,7 @@
 		self.max_health = g_pickup_healthlarge_max;
 	if(!self.health)
 		self.health = g_pickup_healthlarge;
-	StartItem ("models/items/g_h50.md3", "misc/mediumhealth.wav", g_pickup_respawntime_medium, "50 Health", IT_25HP, 0, 0, commodity_pickupevalfunc, BOT_PICKUP_RATING_MID);
+	StartItem ("models/items/g_h50.md3", "misc/mediumhealth.wav", g_pickup_respawntime_medium, g_pickup_respawntimejitter_medium, "50 Health", IT_25HP, 0, 0, commodity_pickupevalfunc, BOT_PICKUP_RATING_MID);
 }
 
 void spawnfunc_item_health_mega (void) {
@@ -932,7 +1074,7 @@
 			self.max_health = g_pickup_healthmega_max;
 		if(!self.health)
 			self.health = g_pickup_healthmega;
-		StartItem ("models/items/g_h100.md3", "misc/megahealth.wav", g_pickup_respawntime_long, "100 Health", IT_HEALTH, 0, 0, commodity_pickupevalfunc, BOT_PICKUP_RATING_HIGH);
+		StartItem ("models/items/g_h100.md3", "misc/megahealth.wav", g_pickup_respawntime_long, g_pickup_respawntimejitter_long, "100 Health", IT_HEALTH, 0, 0, commodity_pickupevalfunc, BOT_PICKUP_RATING_HIGH);
 	}
 }
 
@@ -956,7 +1098,7 @@
 		precache_sound("weapons/strength_fire.wav");
 		self.strength_finished = 30;
 		self.effects = EF_ADDITIVE;
-		StartItem ("models/items/g_strength.md3", "misc/powerup.wav", g_pickup_respawntime_powerup, "Strength Powerup", IT_STRENGTH, 0, FL_POWERUP, generic_pickupevalfunc, 100000);
+		StartItem ("models/items/g_strength.md3", "misc/powerup.wav", g_pickup_respawntime_powerup, g_pickup_respawntimejitter_powerup, "Strength Powerup", IT_STRENGTH, 0, FL_POWERUP, generic_pickupevalfunc, 100000);
 	}
 }
 
@@ -972,7 +1114,7 @@
 	} else {
 		self.invincible_finished = 30;
 		self.effects = EF_ADDITIVE;
-		StartItem ("models/items/g_invincible.md3", "misc/powerup_shield.wav", g_pickup_respawntime_powerup, "Invulnerability", IT_INVINCIBLE, 0, FL_POWERUP, generic_pickupevalfunc, 100000);
+		StartItem ("models/items/g_invincible.md3", "misc/powerup_shield.wav", g_pickup_respawntime_powerup, g_pickup_respawntimejitter_powerup, "Shield", IT_INVINCIBLE, 0, FL_POWERUP, generic_pickupevalfunc, 100000);
 	}
 }
 
@@ -1248,19 +1390,29 @@
 {
 	if(!self.ammo_fuel)
 		self.ammo_fuel = g_pickup_fuel;
-	StartItem ("models/items/g_fuel.md3", "misc/itempickup.wav", g_pickup_respawntime_ammo, "Fuel", IT_FUEL, 0, 0, commodity_pickupevalfunc, BOT_PICKUP_RATING_LOW);
+	StartItem ("models/items/g_fuel.md3", "misc/itempickup.wav", g_pickup_respawntime_ammo, g_pickup_respawntimejitter_ammo, "Fuel", IT_FUEL, 0, 0, commodity_pickupevalfunc, BOT_PICKUP_RATING_LOW);
 }
 
 void spawnfunc_item_fuel_regen(void)
 {
-	StartItem ("models/items/g_fuelregen.md3", "misc/itempickup.wav", g_pickup_respawntime_powerup, "Fuel regenerator", IT_FUEL_REGEN, 0, FL_POWERUP, commodity_pickupevalfunc, BOT_PICKUP_RATING_LOW);
+	if(start_items & IT_FUEL_REGEN)
+	{
+		spawnfunc_item_fuel();
+		return;
+	}
+	StartItem ("models/items/g_fuelregen.md3", "misc/itempickup.wav", g_pickup_respawntime_powerup, g_pickup_respawntimejitter_powerup, "Fuel regenerator", IT_FUEL_REGEN, 0, FL_POWERUP, commodity_pickupevalfunc, BOT_PICKUP_RATING_LOW);
 }
 
 void spawnfunc_item_jetpack(void)
 {
 	if(g_grappling_hook)
-		return; // sorry, but these two can't coexist (same button)
+		return; // sorry, but these two can't coexist (same button); spawn fuel instead
 	if(!self.ammo_fuel)
 		self.ammo_fuel = g_pickup_fuel_jetpack;
-	StartItem ("models/items/g_jetpack.md3", "misc/itempickup.wav", g_pickup_respawntime_powerup, "Jet pack", IT_JETPACK, 0, FL_POWERUP, commodity_pickupevalfunc, BOT_PICKUP_RATING_LOW);
+	if(start_items & IT_JETPACK)
+	{
+		spawnfunc_item_fuel();
+		return;
+	}
+	StartItem ("models/items/g_jetpack.md3", "misc/itempickup.wav", g_pickup_respawntime_powerup, g_pickup_respawntimejitter_powerup, "Jet pack", IT_JETPACK, 0, FL_POWERUP, commodity_pickupevalfunc, BOT_PICKUP_RATING_LOW);
 }

Modified: branches/nexuiz-2.0/data/qcsrc/server/w_campingrifle.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/w_campingrifle.qc	2009-05-24 09:11:30 UTC (rev 6761)
+++ branches/nexuiz-2.0/data/qcsrc/server/w_campingrifle.qc	2009-05-24 09:17:59 UTC (rev 6762)
@@ -52,9 +52,9 @@
 		self.ammo_nails -= pAmmo;
 
 	if(deathtype & HITTYPE_SECONDARY)
-		W_SetupShot (self, FALSE, 2, "weapons/campingrifle_fire2.wav");
+		W_SetupShot (self, TRUE, 2, "weapons/campingrifle_fire2.wav");
 	else
-		W_SetupShot (self, FALSE, 2, "weapons/campingrifle_fire.wav");
+		W_SetupShot (self, TRUE, 2, "weapons/campingrifle_fire.wav");
 
 	pointparticles(particleeffectnum("shotgun_muzzleflash"), w_shotorg, w_shotdir * 2000, 1);
 

Modified: branches/nexuiz-2.0/data/qcsrc/server/w_hook.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/w_hook.qc	2009-05-24 09:11:30 UTC (rev 6761)
+++ branches/nexuiz-2.0/data/qcsrc/server/w_hook.qc	2009-05-24 09:17:59 UTC (rev 6762)
@@ -7,7 +7,7 @@
 .float dmg_last;
 .float hook_refire;
 .float hook_time_hooked;
-.float hook_time_ammodecrease;
+.float hook_time_fueldecrease;
 
 void W_Hook_ExplodeThink (void)
 {
@@ -103,7 +103,7 @@
 
 float w_hook(float req)
 {
-	float hooked_time_max, hooked_ammodecrease_delay;
+	float hooked_time_max, hooked_fuel;
 		
 	if (req == WR_AIM)
 	{
@@ -115,11 +115,12 @@
 		{
 			if(!self.hook)
 			if not(self.hook_state & HOOK_WAITING_FOR_RELEASE)
+			if not(self.hook_state & HOOK_FIRING)
 			if (time > self.hook_refire)
 			if (weapon_prepareattack(0, -1))
 			{
 				if not(self.items & IT_UNLIMITED_WEAPON_AMMO)
-					self.ammo_cells = self.ammo_cells - cvar("g_balance_hook_primary_ammo");
+					self.ammo_fuel = self.ammo_fuel - cvar("g_balance_hook_primary_fuel");
 				self.hook_state |= HOOK_FIRING;
 				weapon_thinkf(WFRAME_FIRE1, cvar("g_balance_hook_primary_animtime"), w_ready);				
 			}
@@ -138,6 +139,10 @@
 		{
 			// if hooked, no bombs, and increase the timer
 			self.hook_refire = max(self.hook_refire, time + cvar("g_balance_hook_primary_refire"));
+
+			// hook also inhibits health regeneration, but only for 1 second
+			if not(self.items & IT_UNLIMITED_WEAPON_AMMO)
+				self.pauseregen_finished = max(self.pauseregen_finished, time + cvar("g_balance_pause_fuel_regen"));
 		}
 
 		if(self.hook && self.hook.state == 1)
@@ -149,20 +154,22 @@
 					self.hook_state |= HOOK_REMOVING;
 			}
 			
-			hooked_ammodecrease_delay = cvar("g_balance_hook_primary_hooked_ammodecrease_delay");
-			if (hooked_ammodecrease_delay > 0)
+			hooked_fuel = cvar("g_balance_hook_primary_hooked_fuel");
+			if (hooked_fuel > 0)
 			{
-				if ( time > self.hook_time_ammodecrease )
+				if ( time > self.hook_time_fueldecrease )
 				{
 					if not(self.items & IT_UNLIMITED_WEAPON_AMMO)
 					{
-						if ( self.ammo_cells >= frametime / hooked_ammodecrease_delay )
+						if ( self.ammo_fuel >= (time - self.hook_time_fueldecrease) * hooked_fuel )
 						{
-							self.ammo_cells -= frametime / hooked_ammodecrease_delay;
+							self.ammo_fuel -= (time - self.hook_time_fueldecrease) * hooked_fuel;
+							self.hook_time_fueldecrease = time;
 							// decrease next frame again
 						}
 						else
 						{
+							self.ammo_fuel = 0;
 							self.hook_state |= HOOK_REMOVING;
 							W_SwitchWeapon_Force(self, w_getbestweapon(self));
 						}
@@ -173,7 +180,7 @@
 		else
 		{
 			self.hook_time_hooked = time;				
-			self.hook_time_ammodecrease = time + cvar("g_balance_hook_primary_hooked_time_free");
+			self.hook_time_fueldecrease = time + cvar("g_balance_hook_primary_hooked_time_free");
 		}
 
 		if (self.BUTTON_CROUCH)
@@ -218,7 +225,10 @@
 	}
 	else if (req == WR_CHECKAMMO1)
 	{
-		return self.ammo_cells >= cvar("g_balance_hook_primary_ammo");			
+		if(self.hook)
+			return self.ammo_fuel > 0;
+		else
+			return self.ammo_fuel >= cvar("g_balance_hook_primary_fuel");
 	}
 	else if (req == WR_CHECKAMMO2)
 	{

Modified: branches/nexuiz-2.0/data/qcsrc/server/w_porto.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/w_porto.qc	2009-05-24 09:11:30 UTC (rev 6761)
+++ branches/nexuiz-2.0/data/qcsrc/server/w_porto.qc	2009-05-24 09:17:59 UTC (rev 6762)
@@ -15,7 +15,7 @@
 	remove(self);
 }
 
-float W_ThrowNewWeapon(entity own, float wpn, float doreduce, vector org, vector velo);
+string W_ThrowNewWeapon(entity own, float wpn, float doreduce, vector org, vector velo);
 void W_Porto_Fail (float failhard)
 {
 	if(self.owner == world)

Modified: branches/nexuiz-2.0/data/scripts/entities.def
===================================================================
--- branches/nexuiz-2.0/data/scripts/entities.def	2009-05-24 09:11:30 UTC (rev 6761)
+++ branches/nexuiz-2.0/data/scripts/entities.def	2009-05-24 09:17:59 UTC (rev 6762)
@@ -56,6 +56,7 @@
 debristimejitter: time till the debris fades (random part)
 debrisfadetime: how long debris takes to fade
 debrisdamageforcescale: how much debris is affected by damage force (e.g. explosions)
+debrisskin: skin number of debris
 */
 
 /*QUAKED func_assault_wall (.5 0 .5) ?
@@ -1435,6 +1436,7 @@
 debristimejitter: time till the debris fades (random part)
 debrisfadetime: how long debris takes to fade
 debrisdamageforcescale: how much debris is affected by damage force (e.g. explosions)
+debrisskin: skin number of debris
 -------- SPAWNFLAGS --------
 DISABLED: do not allow damaging this until it is first activated
 INDICATE: indicate amount of damage already taken by coloring

Modified: branches/nexuiz-2.0/data/scripts/onslaught.shader
===================================================================
--- branches/nexuiz-2.0/data/scripts/onslaught.shader	2009-05-24 09:11:30 UTC (rev 6761)
+++ branches/nexuiz-2.0/data/scripts/onslaught.shader	2009-05-24 09:17:59 UTC (rev 6762)
@@ -7,4 +7,83 @@
 	tcMod scroll 0.03 0.001
 	tcGen environment
  }
+}
+
+ons_pad_text
+{
+	cull none
+ {
+	map textures/ons_text.tga
+	tcMod scroll 0.1 0
+	blendfunc add
+
+ }
+}
+
+ons_icon_text
+{
+ {
+	map textures/ons_text.tga
+	tcMod scroll 0.1 0
+ }
+}
+
+ons_icon_thrust
+{
+ {
+	map textures/ons_icon_thrust.tga
+	tcMod scroll 3 0
+	tcMod rotate 10
+ }
+}
+ons_gen_spark
+{
+	cull none
+ {
+	animmap 9 textures/generator_lightning.tga textures/generator_lightning2.tga
+	tcMod scroll 0.5 0
+	blendfunc add
+
+ }
+}
+ons_fire
+{
+ {
+	map textures/ons_boom1.tga
+	tcMod scroll 0.05 0.1
+	tcMod rotate 0.01
+	blendfunc add
+
+ }
+}
+ons_smoke
+{
+	deformVertexes wave sin 1 3 2 0.2
+ {
+	map textures/ons_smoke1.tga
+	tcMod scroll 0.01 0.04
+	tcMod rotate 0.01
+	alphaFunc GE128
+
+ }
+}
+ons_shockwave
+{
+	cull none
+ {
+	map textures/ons_shockwave1.tga
+	tcMod scroll 0.2 0
+	blendfunc add
+
+ }
+}
+ons_shockwave2
+{
+ {
+	map textures/ons_shockwave2.tga
+	tcMod rotate 85
+	tcMod scroll 0.03 0.6
+	tcGen environment
+	blendfunc add
+ }
 }
\ No newline at end of file

Copied: branches/nexuiz-2.0/data/sound/misc/itemrespawncountdown.ogg (from rev 6721, trunk/data/sound/misc/itemrespawncountdown.ogg)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/sound/onslaught/shockwave.ogg (from rev 6746, trunk/data/sound/onslaught/shockwave.ogg)
===================================================================
(Binary files differ)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Modified: branches/nexuiz-2.0/data/weapons.cfg
===================================================================
--- branches/nexuiz-2.0/data/weapons.cfg	2009-05-24 09:11:30 UTC (rev 6761)
+++ branches/nexuiz-2.0/data/weapons.cfg	2009-05-24 09:17:59 UTC (rev 6762)
@@ -3,7 +3,7 @@
 //
 // And... don't forget to edit weaponsHavoc.cfg too.
 
-set cvar_check_weapons 00219e78f5d78d7d8a1600c4f4c73aa5
+set cvar_check_weapons c5b3e579a14c45d555550b08f203a607
 
 // NOTE: this only replaces weapons on the map
 // use g_start_weapon_* to also replace the on-startup weapons!
@@ -79,6 +79,12 @@
 set g_pickup_respawntime_powerup 120
 set g_pickup_respawntime_weapon 15
 set g_pickup_respawntime_ammo 15
+set g_pickup_respawntimejitter_short 0
+set g_pickup_respawntimejitter_medium 0
+set g_pickup_respawntimejitter_long 0
+set g_pickup_respawntimejitter_powerup 10
+set g_pickup_respawntimejitter_weapon 0
+set g_pickup_respawntimejitter_ammo 0
 
 set g_balance_laser_primary_damage 35
 set g_balance_laser_primary_edgedamage 10
@@ -272,12 +278,12 @@
 set g_balance_portal_health 200 // these get recharged whenever the portal is used
 set g_balance_portal_lifetime 15 // these get recharged whenever the portal is used
 
-set g_balance_hook_primary_ammo 2 // hook monkeys set 0
+set g_balance_hook_primary_fuel 10 // hook monkeys set 0
 set g_balance_hook_primary_refire 0 // hook monkeys set 0
 set g_balance_hook_primary_animtime 0.3 // good shoot anim
 set g_balance_hook_primary_hooked_time_max 0 // infinite
 set g_balance_hook_primary_hooked_time_free 2 // 2s being hooked are free
-set g_balance_hook_primary_hooked_ammodecrease_delay 0.5 // remove one cell every 0.5 seconds
+set g_balance_hook_primary_hooked_fuel 8 // fuel per second hooked
 set g_balance_hook_secondary_damage 25 // not much
 set g_balance_hook_secondary_edgedamage 5 // not much
 set g_balance_hook_secondary_radius 500 // LOTS

Modified: branches/nexuiz-2.0/data/weaponsHavoc.cfg
===================================================================
--- branches/nexuiz-2.0/data/weaponsHavoc.cfg	2009-05-24 09:11:30 UTC (rev 6761)
+++ branches/nexuiz-2.0/data/weaponsHavoc.cfg	2009-05-24 09:17:59 UTC (rev 6762)
@@ -1,4 +1,4 @@
-set cvar_check_weapons 00219e78f5d78d7d8a1600c4f4c73aa5
+set cvar_check_weapons c5b3e579a14c45d555550b08f203a607
 
 // NOTE: this only replaces weapons on the map
 // use g_start_weapon_* to also replace the on-startup weapons!
@@ -74,6 +74,12 @@
 set g_pickup_respawntime_powerup 120
 set g_pickup_respawntime_weapon 15
 set g_pickup_respawntime_ammo 15
+set g_pickup_respawntimejitter_short 0
+set g_pickup_respawntimejitter_medium 0
+set g_pickup_respawntimejitter_long 0
+set g_pickup_respawntimejitter_powerup 0
+set g_pickup_respawntimejitter_weapon 0
+set g_pickup_respawntimejitter_ammo 0
 
 set g_balance_laser_primary_damage 5
 set g_balance_laser_primary_edgedamage 5
@@ -267,12 +273,12 @@
 set g_balance_portal_health 200 // these get recharged whenever the portal is used
 set g_balance_portal_lifetime 15 // these get recharged whenever the portal is used
 
-set g_balance_hook_primary_ammo 2 // hook monkeys set 0
+set g_balance_hook_primary_fuel 10 // hook monkeys set 0
 set g_balance_hook_primary_refire 0 // hook monkeys set 0
 set g_balance_hook_primary_animtime 0.3 // good shoot anim
 set g_balance_hook_primary_hooked_time_max 0 // infinite
 set g_balance_hook_primary_hooked_time_free 2 // 2s being hooked are free
-set g_balance_hook_primary_hooked_ammodecrease_delay 0.5 // remove one cell every 0.5 seconds
+set g_balance_hook_primary_hooked_fuel 8 // fuel per second hooked
 set g_balance_hook_secondary_damage 25 // not much
 set g_balance_hook_secondary_edgedamage 5 // not much
 set g_balance_hook_secondary_radius 500 // LOTS

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

Modified: branches/nexuiz-2.0/misc/netradiant-NexuizPack/nexuiz.game/data/entities.def
===================================================================
--- branches/nexuiz-2.0/misc/netradiant-NexuizPack/nexuiz.game/data/entities.def	2009-05-24 09:11:30 UTC (rev 6761)
+++ branches/nexuiz-2.0/misc/netradiant-NexuizPack/nexuiz.game/data/entities.def	2009-05-24 09:17:59 UTC (rev 6762)
@@ -56,6 +56,7 @@
 debristimejitter: time till the debris fades (random part)
 debrisfadetime: how long debris takes to fade
 debrisdamageforcescale: how much debris is affected by damage force (e.g. explosions)
+debrisskin: skin number of debris
 */
 
 /*QUAKED func_assault_wall (.5 0 .5) ?
@@ -1435,6 +1436,7 @@
 debristimejitter: time till the debris fades (random part)
 debrisfadetime: how long debris takes to fade
 debrisdamageforcescale: how much debris is affected by damage force (e.g. explosions)
+debrisskin: skin number of debris
 -------- SPAWNFLAGS --------
 DISABLED: do not allow damaging this until it is first activated
 INDICATE: indicate amount of damage already taken by coloring

Copied: branches/nexuiz-2.0/misc/tools/hitplot2tga.c (from rev 6721, trunk/misc/tools/hitplot2tga.c)
===================================================================
--- branches/nexuiz-2.0/misc/tools/hitplot2tga.c	                        (rev 0)
+++ branches/nexuiz-2.0/misc/tools/hitplot2tga.c	2009-05-24 09:17:59 UTC (rev 6762)
@@ -0,0 +1,182 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <string.h>
+#include <math.h>
+#include <stdarg.h>
+#include <errno.h>
+
+void err(int ex, const char *fmt, ...)
+{
+	va_list list;
+	int e = errno;
+	va_start(list, fmt);
+	vfprintf(stderr, fmt, list);
+	fputs(": ", stderr);
+	fputs(strerror(e), stderr);
+	fputs("\n", stderr);
+	exit(ex);
+}
+
+void errx(int ex, const char *fmt, ...)
+{
+    va_list list;
+    va_start(list, fmt);
+    vfprintf(stderr, fmt, list);
+    fputs("\n", stderr);
+    exit(ex);
+}
+
+typedef void (*colorfunc_t) (double x, double y, double dx, double dy, double *r, double *g, double *b);
+
+double rnd()
+{
+	return rand() / (RAND_MAX + 1.0);
+}
+
+double softclip(double x, double a)
+{
+	// don't ask what this does - but it works
+	double cse = (2*a*x - x - a + 1) * x;
+	return cse / (cse + (1 - a));
+}
+
+void writepic(colorfunc_t f, const char *fn, int width, int height)
+{
+	int x, y;
+	uint8_t tga[18];
+
+	FILE *file = fopen(fn, "wb");
+	if(!file)
+		err(1, "fopen >%s", fn);
+
+	memset(tga, 0, sizeof(tga));
+	tga[2] = 2;          // uncompressed type
+	tga[12] = (width >> 0) & 0xFF;
+	tga[13] = (width >> 8) & 0xFF;
+	tga[14] = (height >> 0) & 0xFF;
+	tga[15] = (height >> 8) & 0xFF;
+	tga[16] = 24;        // pixel size
+
+	if(fwrite(&tga, sizeof(tga), 1, file) != 1)
+		err(1, "fwrite >%s", fn);
+	//for(y = height-1; y >= 0; --y)
+	for(y = 0; y < height; ++y)
+		for(x = 0; x < width; ++x)
+		{
+			uint8_t rgb[3];
+			double rr, gg, bb;
+			double xx, yy;
+			xx = (x + 0.5) / width;
+			yy = (y + 0.5) / height;
+			f(xx, yy, 0.5 / width, 0.5 / height, &rr, &gg, &bb);
+			rgb[2] = floor(rnd() + rr * 255);
+			rgb[1] = floor(rnd() + gg * 255);
+			rgb[0] = floor(rnd() + bb * 255);
+			if(fwrite(rgb, sizeof(rgb), 1, file) != 1)
+				err(1, "fwrite >%s", fn);
+		}
+	
+	fclose(file);
+}
+
+typedef struct
+{ 
+	double x, y, dist;
+	int weapon;
+}
+plotpoint_t;
+
+plotpoint_t *plotpoints;
+size_t nPlotpoints, allocatedPlotpoints;
+
+void readpoints(const char *fn)
+{
+	char buf[1024];
+
+	FILE *infile = fopen(fn, "r");
+	if(!infile)
+		err(1, "fopen <%s", fn);
+
+	nPlotpoints = allocatedPlotpoints = 0;
+	plotpoints = NULL;
+
+	while(fgets(buf, sizeof(buf), infile))
+	{
+		if(*buf == '#') 
+		{
+			fputs(buf + 1, stdout);
+			continue;
+		}
+		if(nPlotpoints >= allocatedPlotpoints)
+		{
+			if(allocatedPlotpoints == 0)
+				allocatedPlotpoints = 1024;
+			else
+				allocatedPlotpoints = nPlotpoints * 2;
+			plotpoints = (plotpoint_t *) realloc(plotpoints, allocatedPlotpoints * sizeof(*plotpoints));
+		}
+		if(sscanf(buf, "%lf %lf %lf %d", &plotpoints[nPlotpoints].x, &plotpoints[nPlotpoints].y, &plotpoints[nPlotpoints].dist, &plotpoints[nPlotpoints].weapon) != 4)
+			continue;
+		++nPlotpoints;
+	}
+}
+
+void calcplot1(double x, double y, double *out, double sigma2)
+{
+	size_t i;
+	double dist2;
+	double val, totalval = 0, weight, totalweight = 0;
+
+	for(i = 0; i < nPlotpoints; ++i)
+	{
+		dist2 = (x - plotpoints[i].x) * (x - plotpoints[i].x) + (y - plotpoints[i].y) * (y - plotpoints[i].y);
+		weight = 1; // / plotpoints[i].dist;
+		val = exp(-dist2 / sigma2);
+
+		totalweight += weight;
+		totalval += weight * val;
+	}
+
+	*out = softclip(totalval / (totalweight * sqrt(sigma2 * 2 * M_PI)), 0.8);
+}
+
+void calcplotp(double x, double y, double dx, double dy, double *out)
+{
+	size_t i;
+	double distx, disty;
+
+	for(i = 0; i < nPlotpoints; ++i)
+	{
+		distx = x - plotpoints[i].x;
+		disty = y - plotpoints[i].y;
+
+		if(distx < dx)
+		if(distx > -dx)
+		if(disty < dy)
+		if(disty > -dy)
+		{
+			*out = 1;
+			break;
+		}
+	}
+}
+
+void calcplot(double x, double y, double dx, double dy, double *r, double *g, double *b)
+{
+	calcplot1(x, y, r, 1/64.0);
+	calcplot1(x, y, g, 1/512.0);
+	calcplot1(x, y, b, 1/4096.0);
+	calcplotp(x, y, dx, dy, b);
+}
+
+int main(int argc, char **argv)
+{
+	if(argc != 3)
+		errx(1, "Usage: %s infile.plot outfile.tga", *argv);
+	
+	readpoints(argv[1]);
+	writepic(calcplot, argv[2], 512, 512);
+
+	return 0;
+}

Modified: branches/nexuiz-2.0/server/rcon2irc/rbiserver.pl
===================================================================
--- branches/nexuiz-2.0/server/rcon2irc/rbiserver.pl	2009-05-24 09:11:30 UTC (rev 6761)
+++ branches/nexuiz-2.0/server/rcon2irc/rbiserver.pl	2009-05-24 09:17:59 UTC (rev 6762)
@@ -80,6 +80,18 @@
 	out irc => 0, "PRIVMSG $config{irc_channel} :\001ACTION thinks $nick is $status\001";
 	return 0;
 } ],
+[ dp => q{pure: \*DETAIL_MISMATCH (.*) (\S+)$} => sub {
+	my ($nick, $file) = @_;
+	$nick = color_dp2irc $nick;
+	out irc => 0, "PRIVMSG $config{irc_channel} :\001ACTION thinks $nick has a modified $file\001";
+	return 0;
+} ],
+[ dp => q{pure: \*DETAIL_TIMEOUT (.*)} => sub {
+	my ($nick) = @_;
+	$nick = color_dp2irc $nick;
+	out irc => 0, "PRIVMSG $config{irc_channel} :\001ACTION thinks $nick refuses to tell us which file is modified\001";
+	return 0;
+} ],
 [ dp => q{:recordset:(\d+):.*} => sub {
 	my ($id) = @_;
 	my $ip = $store{"playerip_byid_$id"};
@@ -89,7 +101,7 @@
 	my $map = $store{map};
 	$map =~ s/^[a-z]*_//;
 	$ip =~ s/\./-/g;
-	my $pattern = "/nexuiz/data/home-$name/data/sv_autodemos/????-??-??_??-??_${map}_${slot}_${ip}-*.dem";
+	my $pattern = "/home/nexuiz/home-$name/data/sv_autodemos/????-??-??_??-??_${map}_${slot}_${ip}-*.dem";
 	if(my @result = glob $pattern)
 	{
 		for(@result)
@@ -114,7 +126,7 @@
 [ dp => q{:end} => sub {
 	my $name = $config{irc_nick};
 	$name =~ s/Nex//; # haggerNexCTF -> haggerCTF
-	my $pattern = "/nexuiz/data/home-$name/data/sv_autodemos/*.dem";
+	my $pattern = "/home/nexuiz/data/home-$name/data/sv_autodemos/*.dem";
 	print "Checking $pattern...\n";
 	for(glob $pattern)
 	{



More information about the nexuiz-commits mailing list