[nexuiz-commits] r6886 - in branches/nexuiz-2.0: . data data/qcsrc/client data/qcsrc/menu data/qcsrc/server misc/netradiant-NexuizPack/nexuiz.game/data

DONOTREPLY at icculus.org DONOTREPLY at icculus.org
Sat Jun 6 11:21:14 EDT 2009


Author: div0
Date: 2009-06-06 11:21:14 -0400 (Sat, 06 Jun 2009)
New Revision: 6886

Modified:
   branches/nexuiz-2.0/.patchsets
   branches/nexuiz-2.0/data/build-compat-pack.sh
   branches/nexuiz-2.0/data/defaultNexuiz.cfg
   branches/nexuiz-2.0/data/effectinfo.txt
   branches/nexuiz-2.0/data/qcsrc/client/gibs.qc
   branches/nexuiz-2.0/data/qcsrc/menu/gamecommand.qc
   branches/nexuiz-2.0/data/qcsrc/menu/mbuiltin.qh
   branches/nexuiz-2.0/data/qcsrc/server/bots.qc
   branches/nexuiz-2.0/data/qcsrc/server/cl_client.qc
   branches/nexuiz-2.0/data/qcsrc/server/constants.qh
   branches/nexuiz-2.0/data/qcsrc/server/ctf.qc
   branches/nexuiz-2.0/data/qcsrc/server/steerlib.qc
   branches/nexuiz-2.0/data/qcsrc/server/t_items.qc
   branches/nexuiz-2.0/data/qcsrc/server/w_rocketlauncher.qc
   branches/nexuiz-2.0/data/weapons.cfg
   branches/nexuiz-2.0/misc/netradiant-NexuizPack/nexuiz.game/data/entities.def
Log:
r6796 | mand1nga | 2009-05-29 20:07:56 -0400 (Fri, 29 May 2009) | 1 line
Fix warning
r6797 | mand1nga | 2009-05-29 20:22:59 -0400 (Fri, 29 May 2009) | 1 line
CTF flag glow trails imported from Spidflisk by -z-
r6798 | mand1nga | 2009-05-29 20:42:16 -0400 (Fri, 29 May 2009) | 1 line
Minor cleanup
r6799 | div0 | 2009-05-30 05:12:05 -0400 (Sat, 30 May 2009) | 2 lines
fix mixed dos/unix linefeeds before I do actual changes in this file
r6800 | mrbougo | 2009-05-30 05:37:55 -0400 (Sat, 30 May 2009) | 1 line
items that aren't picked up should not spawn particles on touch
r6801 | div0 | 2009-05-30 06:17:24 -0400 (Sat, 30 May 2009) | 2 lines
weaker rocket guidance, 120 deg/sec is really too much. Trying 60.
r6802 | div0 | 2009-05-30 06:23:14 -0400 (Sat, 30 May 2009) | 2 lines
rocket guiding: no revenge from the grave
r6803 | div0 | 2009-05-30 06:29:30 -0400 (Sat, 30 May 2009) | 2 lines
rocket guide rate is 90 again, 90 was best
r6804 | div0 | 2009-05-30 07:13:11 -0400 (Sat, 30 May 2009) | 4 lines
RL damage: 120 to 100
GL edge damage: 35 to 25
to compensate for rocket guiding
r6805 | div0 | 2009-05-30 07:38:03 -0400 (Sat, 30 May 2009) | 2 lines
bring back old GL edge damage
r6806 | div0 | 2009-05-30 08:25:57 -0400 (Sat, 30 May 2009) | 2 lines
compat pack builder
r6807 | div0 | 2009-05-30 08:27:46 -0400 (Sat, 30 May 2009) | 2 lines
add missing texs
r6808 | div0 | 2009-05-30 08:30:12 -0400 (Sat, 30 May 2009) | 2 lines
scale down textures again :(
r6809 | m0rfar | 2009-05-30 10:37:14 -0400 (Sat, 30 May 2009) | 1 line
merge entities.def
r6810 | mand1nga | 2009-05-30 11:23:12 -0400 (Sat, 30 May 2009) | 1 line
Updated item_pickup effect by -z-
r6811 | div0 | 2009-05-30 13:44:58 -0400 (Sat, 30 May 2009) | 2 lines
now REALLY prevent revenge from the grave
r6812 | div0 | 2009-05-30 13:49:32 -0400 (Sat, 30 May 2009) | 2 lines
use new engine builtin isdemo()


Modified: branches/nexuiz-2.0/.patchsets
===================================================================
--- branches/nexuiz-2.0/.patchsets	2009-06-06 15:19:03 UTC (rev 6885)
+++ branches/nexuiz-2.0/.patchsets	2009-06-06 15:21:14 UTC (rev 6886)
@@ -1,2 +1,2 @@
 master = svn://svn.icculus.org/nexuiz/trunk
-revisions_applied = 1-6795
+revisions_applied = 1-6812

Modified: branches/nexuiz-2.0/data/build-compat-pack.sh
===================================================================
--- branches/nexuiz-2.0/data/build-compat-pack.sh	2009-06-06 15:19:03 UTC (rev 6885)
+++ branches/nexuiz-2.0/data/build-compat-pack.sh	2009-06-06 15:21:14 UTC (rev 6886)
@@ -24,6 +24,49 @@
 	models/sprites/item-strength_frame1.tga
 	sound/weapons/weaponpickup.ogg
 	particles/particlefont.tga
+	models/gibs/arm.md3
+	models/gibs/arm.md3_0.skin
+	models/gibs/arm.md3_1.skin
+	models/gibs/arm.md3_2.skin
+	models/gibs/bloodyskull.md3
+	models/gibs/bloodyskull.md3_0.skin
+	models/gibs/bloodyskull.md3_1.skin
+	models/gibs/bloodyskull.md3_2.skin
+	models/gibs/chest.md3
+	models/gibs/chest.md3_0.skin
+	models/gibs/chest.md3_1.skin
+	models/gibs/chest.md3_2.skin
+	models/gibs/chunk.mdl
+	models/gibs/eye.md3
+	models/gibs/leg1.md3
+	models/gibs/leg1.md3_0.skin
+	models/gibs/leg1.md3_1.skin
+	models/gibs/leg1.md3_2.skin
+	models/gibs/leg2.md3
+	models/gibs/leg2.md3_0.skin
+	models/gibs/leg2.md3_1.skin
+	models/gibs/leg2.md3_2.skin
+	models/gibs/smallchest.md3
+	models/gibs/smallchest.md3_0.skin
+	models/gibs/smallchest.md3_1.skin
+	models/gibs/smallchest.md3_2.skin
+	textures/meat_alien_gloss.tga
+	textures/meat_alien_glow.tga
+	textures/meat_alien_norm.tga
+	textures/meat_alien.tga
+	textures/meat_gloss.tga
+	textures/meat_norm.tga
+	textures/meat_robot_gloss.tga
+	textures/meat_robot_glow.tga
+	textures/meat_robot_norm.tga
+	textures/meat_robot.tga
+	textures/meat.tga
+	textures/bloodyskull_alien_glow.tga
+	textures/bloodyskull_alien.tga
+	textures/bloodyskull.jpg
+	textures/bloodyskull_robot_gloss.tga
+	textures/bloodyskull_robot_glow.tga
+	textures/bloodyskull_robot.tga
 "
 
 rm -rf pack
@@ -39,9 +82,9 @@
 
 cd pack
 
+find textures/ -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"

Modified: branches/nexuiz-2.0/data/defaultNexuiz.cfg
===================================================================
--- branches/nexuiz-2.0/data/defaultNexuiz.cfg	2009-06-06 15:19:03 UTC (rev 6885)
+++ branches/nexuiz-2.0/data/defaultNexuiz.cfg	2009-06-06 15:21:14 UTC (rev 6886)
@@ -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 2374fb15eacd4470860923b3ccddc0ad
+set cvar_check_default 300f2d03c037b68c7254fe52a47575f8
 
 // Nexuiz version (formatted for machines)
 // used to determine if a client version is compatible
@@ -536,6 +536,7 @@
 set g_ctf_flag_red_skin 0
 set g_ctf_flag_blue_model "models/ctf/flags.md3"
 set g_ctf_flag_blue_skin 1
+set g_ctf_flag_glowtrails 0
 set g_ctf_captimerecord_allow_assisted 0 "if enabled, assisted CTF records (with other players on the server) are recorded too"
 
 exec ctfscoring-div0.cfg

Modified: branches/nexuiz-2.0/data/effectinfo.txt
===================================================================
--- branches/nexuiz-2.0/data/effectinfo.txt	2009-06-06 15:19:03 UTC (rev 6885)
+++ branches/nexuiz-2.0/data/effectinfo.txt	2009-06-06 15:21:14 UTC (rev 6886)
@@ -3355,15 +3355,15 @@
 effect item_pickup
 countabsolute 1
 type static
-color 0x63F2EA 0x63f2EA
-size 16 16
-alpha 128 128 128
+color 0x63F2EA 0xB0C5C4
+size 8 16
+alpha 128 64 64
 // cloud of particles which expand rapidly and then slow to form a ball
 effect item_pickup
-count 256
+count 64
 type spark
 tex 41 41
-color 0x63F2EA 0x63f2EA
+color 0x63F2EA 0xB0C5C4
 size 1 1
 alpha 256 256 1280
 //originjitter 24 24 24

Modified: branches/nexuiz-2.0/data/qcsrc/client/gibs.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/client/gibs.qc	2009-06-06 15:19:03 UTC (rev 6885)
+++ branches/nexuiz-2.0/data/qcsrc/client/gibs.qc	2009-06-06 15:21:14 UTC (rev 6886)
@@ -16,7 +16,7 @@
 {
 	float i, pmod;
 	pmod = cvar("cl_particles_quality");
-	for (i = 0; i < 250 * pmod; i++)
+	for (i = 0; i < 250 * pmod; ++i)
 		pointparticles(ef, org, randomvec() * explosionspeed, howmany / 250);
 }
 

Modified: branches/nexuiz-2.0/data/qcsrc/menu/gamecommand.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/menu/gamecommand.qc	2009-06-06 15:19:03 UTC (rev 6885)
+++ branches/nexuiz-2.0/data/qcsrc/menu/gamecommand.qc	2009-06-06 15:21:14 UTC (rev 6886)
@@ -57,7 +57,8 @@
 	if(argv(0) == "directmenu") if(argc == 2)
 	{
 		// switch to a menu item
-		m_goto(argv(1));
+		if(!isdemo()) // don't allow this command in demos
+			m_goto(argv(1));
 		return;
 	}
 

Modified: branches/nexuiz-2.0/data/qcsrc/menu/mbuiltin.qh
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/menu/mbuiltin.qh	2009-06-06 15:19:03 UTC (rev 6885)
+++ branches/nexuiz-2.0/data/qcsrc/menu/mbuiltin.qh	2009-06-06 15:21:14 UTC (rev 6886)
@@ -169,6 +169,8 @@
 string  altstr_set(string str, float num, string set) = #85;
 string 	altstr_ins(string str, float num, string set) = #86;
 
+float	isdemo() = #349;
+
 /////////////////////////////////////////////////
 // Write* Functions
 /////////////////////////////////////////////////

Modified: branches/nexuiz-2.0/data/qcsrc/server/bots.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/bots.qc	2009-06-06 15:19:03 UTC (rev 6885)
+++ branches/nexuiz-2.0/data/qcsrc/server/bots.qc	2009-06-06 15:21:14 UTC (rev 6886)
@@ -1907,7 +1907,9 @@
 vector shotorg;
 vector shotdir;
 
-.float bot_team, bot_checked;
+.float bot_forced_team;
+.float bot_config_loaded;
+
 void bot_setnameandstuff()
 {
 	local string readfile, s;
@@ -1954,8 +1956,8 @@
 	if(argv(4) != "" && stof(argv(4)) >= 0) bot_pants = argv(4);
 	else bot_pants = ftos(floor(random() * 15));
 
-	self.bot_team = stof(argv(5));
-	self.bot_checked = 1;
+	self.bot_forced_team = stof(argv(5));
+	self.bot_config_loaded = TRUE;
 	prefix = cvar_string("bot_prefix");
 	suffix = cvar_string("bot_suffix");
 
@@ -2470,15 +2472,16 @@
 	self.isbot = TRUE;
 	self.createdtime = self.nextthink;
 
-	if(!self.bot_checked) // This is needed so team overrider doesn't break between matches
+	if(!self.bot_config_loaded) // This is needed so team overrider doesn't break between matches
 		bot_setnameandstuff();
-	if(self.bot_team==1)
+
+	if(self.bot_forced_team==1)
 		self.team = COLOR_TEAM1;
-	else if(self.bot_team==2)
+	else if(self.bot_forced_team==2)
 		self.team = COLOR_TEAM2;
-	else if(self.bot_team==3)
+	else if(self.bot_forced_team==3)
 		self.team = COLOR_TEAM3;
-	else if(self.bot_team==4)
+	else if(self.bot_forced_team==4)
 		self.team = COLOR_TEAM4;
 	else
 		JoinBestTeam(self, FALSE, TRUE);

Modified: branches/nexuiz-2.0/data/qcsrc/server/cl_client.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/cl_client.qc	2009-06-06 15:19:03 UTC (rev 6885)
+++ branches/nexuiz-2.0/data/qcsrc/server/cl_client.qc	2009-06-06 15:21:14 UTC (rev 6886)
@@ -852,6 +852,7 @@
 		// don't reset back to last position, even if new position is stuck in solid
 		self.oldorigin = self.origin;
 		self.prevorigin = self.origin;
+		self.lastrocket = world; // stop rocket guiding, no revenge from the grave!
 
 		if(g_arena)
 		{

Modified: branches/nexuiz-2.0/data/qcsrc/server/constants.qh
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/constants.qh	2009-06-06 15:19:03 UTC (rev 6885)
+++ branches/nexuiz-2.0/data/qcsrc/server/constants.qh	2009-06-06 15:21:14 UTC (rev 6886)
@@ -1,4 +1,4 @@
-string CVAR_CHECK_DEFAULT = "2374fb15eacd4470860923b3ccddc0ad";
+string CVAR_CHECK_DEFAULT = "300f2d03c037b68c7254fe52a47575f8";
 string CVAR_CHECK_WEAPONS = "2f93eb8481f44bb2ff744af86a75eccf";
 
 float	FALSE					= 0;

Modified: branches/nexuiz-2.0/data/qcsrc/server/ctf.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/ctf.qc	2009-06-06 15:19:03 UTC (rev 6885)
+++ branches/nexuiz-2.0/data/qcsrc/server/ctf.qc	2009-06-06 15:21:14 UTC (rev 6886)
@@ -681,7 +681,25 @@
 	ReturnFlag(self);
 }
 
+void item_flag_postspawn()
+{ // Check CTF Item Flag Post Spawn
 
+	// Flag Glow Trail Support
+	if(cvar("g_ctf_flag_glowtrails"))
+	{ // Provide Flag Glow Trail
+		if(self.team == COLOR_TEAM1)
+			// Red
+			self.glow_color = 233;
+		else
+		if(self.team == COLOR_TEAM2)
+			// Blue
+			self.glow_color = 215;
+			
+		self.glow_size = 25;
+		self.glow_trail = 1;
+	}
+};
+
 /*QUAKED spawnfunc_item_flag_team1 (0 0.5 0.8) (-48 -48 -37) (48 48 37)
 CTF flag for team one (Red).
 Multiple are allowed.
@@ -771,6 +789,9 @@
 	if(cvar("g_ctf_dynamiclights"))
 		self.effects |= EF_RED;
 
+	// From Spidflisk
+	item_flag_postspawn();
+
 	waypoint_spawnforitem(self);
 
 	WaypointSprite_SpawnFixed("redbase", self.origin + '0 0 37', self, sprite);
@@ -869,6 +890,9 @@
 	if(cvar("g_ctf_dynamiclights"))
 		self.effects |= EF_BLUE;
 
+	// From Spidflisk
+	item_flag_postspawn();
+
 	waypoint_spawnforitem(self);
 
 	WaypointSprite_SpawnFixed("bluebase", self.origin + '0 0 37', self, sprite);

Modified: branches/nexuiz-2.0/data/qcsrc/server/steerlib.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/steerlib.qc	2009-06-06 15:19:03 UTC (rev 6885)
+++ branches/nexuiz-2.0/data/qcsrc/server/steerlib.qc	2009-06-06 15:21:14 UTC (rev 6886)
@@ -1,5 +1,5 @@
-.vector steerto;
-
+.vector steerto;
+
 /**
     Uniform pull towards a point
 **/
@@ -262,183 +262,183 @@
 
     return (upwish+leftwish+downwish+rightwish) * 0.25;
 
-}
+}
 
-/**
-    Steer towards the direction least obstructed.
-    Run two tracelines in a forward trident, bias each diretion negative if something is found there.
-**/
-vector steerlib_traceavoid_flat(float pitch, float length, vector vofs)
-{
-    vector vt_left, vt_right,vt_front;
-    float f_left, f_right,f_front;
-    vector leftwish, rightwish,frontwish, v_left;
-
-    v_left = v_right * -1;
-
-
-    vt_front = v_forward * length;
-    traceline(self.origin + vofs, self.origin + vofs + vt_front,MOVE_NOMONSTERS,self);
-    f_front = trace_fraction;
-
-    vt_left = (v_forward + (v_left * pitch)) * length;
-    traceline(self.origin + vofs, self.origin + vofs + vt_left,MOVE_NOMONSTERS,self);
-    f_left = trace_fraction;
-
-    //te_lightning1(world,self.origin, trace_endpos);
-
-    vt_right = (v_forward + (v_right * pitch)) * length;
-    traceline(self.origin + vofs, self.origin + vofs + vt_right ,MOVE_NOMONSTERS,self);
-    f_right = trace_fraction;
-
-    //te_lightning1(world,self.origin, trace_endpos);
-
-    leftwish  = v_left    * f_left;
-    rightwish = v_right   * f_right;
-    frontwish = v_forward * f_front;
-
-    return normalize(leftwish + rightwish + frontwish);
-}
-
-float beamsweep_badpoint(vector point,float waterok)
-{
-    float pc,pc2;
-
-    if(trace_dphitq3surfaceflags & Q3SURFACEFLAG_SKY)
-        return 1;
-
-    pc  = pointcontents(point);
-    pc2 = pointcontents(point - '0 0 1');
-
-    switch(pc)
-    {
-        case CONTENT_SOLID: break;
-        case CONTENT_SLIME: break;
-        case CONTENT_LAVA:  break;
-
-        case CONTENT_SKY:
-            return 1;
-
-        case CONTENT_EMPTY:
-            if (pc2 == CONTENT_SOLID)
-                return 0;
-
-            if (pc2 == CONTENT_WATER)
-                if(waterok)
-                    return 0;
-
-            break;
-
-        case CONTENT_WATER:
-            if(waterok)
-                return 0;
-
-            break;
-    }
-
-    return 1;
-}
-
-float beamsweep(vector from, vector dir,float length, float step,float step_up, float step_down)
-{
-    float i;
-    vector a,b,u,d;
-
-    u = '0 0 1' * step_up;
-    d = '0 0 1' * step_down;
-
-    traceline(from + u, from - d,MOVE_NORMAL,self);
-    if(trace_fraction == 1.0)
-        return 0;
-
-    if(beamsweep_badpoint(trace_endpos,0))
-        return 0;
-
-    a = trace_endpos;
-    for(i = 0; i < length; i += step)
-    {
-
-        b = a + dir * step;
-        tracebox(a + u,'-4 -4 -4','4 4 4', b + u,MOVE_NORMAL,self);
-        if(trace_fraction != 1.0)
-            return i / length;
-
-        traceline(b + u, b - d,MOVE_NORMAL,self);
-        if(trace_fraction == 1.0)
-            return i / length;
-
-        if(beamsweep_badpoint(trace_endpos,0))
-            return i / length;
-
-        //te_lightning1(world,a+u,b+u);
-        //te_lightning1(world,b+u,b-d);
-
-        a = trace_endpos;
-    }
-
-    return 1;
-}
-
-vector steerlib_beamsteer(vector dir, float length, float step, float step_up, float step_down)
-{
-    float bm_forward, bm_right, bm_left,p;
-    vector vr,vl;
-
-    dir_z *= 0.15;
-    vr = vectoangles(dir);
-    vr_x *= -1;
-
-    makevectors(vr);
-    bm_forward = beamsweep(self.origin, v_forward, length, step, step_up, step_down);
-
-    vr = normalize(v_forward + v_right * 0.125);
-    vl = normalize(v_forward - v_right * 0.125);
-
-    bm_right = beamsweep(self.origin, vr, length, step, step_up, step_down);
-    bm_left  = beamsweep(self.origin, vl, length, step, step_up, step_down);
-
-
-    p = bm_left + bm_right;
-    if(p == 2)
-    {
-        //te_lightning1(self,self.origin + '0 0 32',self.origin + '0 0 32' + vr * length);
-        //te_lightning1(self.tur_head,self.origin + '0 0 32',self.origin + '0 0 32' + vl * length);
-
-        return v_forward;
-    }
-
-    p = 2 - p;
-
-    vr = normalize(v_forward + v_right * p);
-    vl = normalize(v_forward - v_right * p);
-    bm_right = beamsweep(self.origin, vr, length, step, step_up, step_down);
-    bm_left  = beamsweep(self.origin, vl, length, step, step_up, step_down);
-
-
-    if(bm_left + bm_right < 0.15)
-    {
-        vr = normalize((v_forward*-1) + v_right * 0.75);
-        vl = normalize((v_forward*-1) - v_right * 0.75);
-
-        bm_right = beamsweep(self.origin, vr, length, step, step_up, step_down);
-        bm_left  = beamsweep(self.origin, vl, length, step, step_up, step_down);
-    }
-
-    //te_lightning1(self,self.origin + '0 0 32',self.origin + '0 0 32' + vr * length);
-    //te_lightning1(self.tur_head,self.origin + '0 0 32',self.origin + '0 0 32' + vl * length);
-
-    bm_forward *= bm_forward;
-    bm_right   *= bm_right;
-    bm_left    *= bm_left;
-
-    vr = vr * bm_right;
-    vl = vl * bm_left;
-
-    return normalize(vr + vl);
-
+/**
+    Steer towards the direction least obstructed.
+    Run two tracelines in a forward trident, bias each diretion negative if something is found there.
+**/
+vector steerlib_traceavoid_flat(float pitch, float length, vector vofs)
+{
+    vector vt_left, vt_right,vt_front;
+    float f_left, f_right,f_front;
+    vector leftwish, rightwish,frontwish, v_left;
+
+    v_left = v_right * -1;
+
+
+    vt_front = v_forward * length;
+    traceline(self.origin + vofs, self.origin + vofs + vt_front,MOVE_NOMONSTERS,self);
+    f_front = trace_fraction;
+
+    vt_left = (v_forward + (v_left * pitch)) * length;
+    traceline(self.origin + vofs, self.origin + vofs + vt_left,MOVE_NOMONSTERS,self);
+    f_left = trace_fraction;
+
+    //te_lightning1(world,self.origin, trace_endpos);
+
+    vt_right = (v_forward + (v_right * pitch)) * length;
+    traceline(self.origin + vofs, self.origin + vofs + vt_right ,MOVE_NOMONSTERS,self);
+    f_right = trace_fraction;
+
+    //te_lightning1(world,self.origin, trace_endpos);
+
+    leftwish  = v_left    * f_left;
+    rightwish = v_right   * f_right;
+    frontwish = v_forward * f_front;
+
+    return normalize(leftwish + rightwish + frontwish);
 }
 
+float beamsweep_badpoint(vector point,float waterok)
+{
+    float pc,pc2;
 
+    if(trace_dphitq3surfaceflags & Q3SURFACEFLAG_SKY)
+        return 1;
+
+    pc  = pointcontents(point);
+    pc2 = pointcontents(point - '0 0 1');
+
+    switch(pc)
+    {
+        case CONTENT_SOLID: break;
+        case CONTENT_SLIME: break;
+        case CONTENT_LAVA:  break;
+
+        case CONTENT_SKY:
+            return 1;
+
+        case CONTENT_EMPTY:
+            if (pc2 == CONTENT_SOLID)
+                return 0;
+
+            if (pc2 == CONTENT_WATER)
+                if(waterok)
+                    return 0;
+
+            break;
+
+        case CONTENT_WATER:
+            if(waterok)
+                return 0;
+
+            break;
+    }
+
+    return 1;
+}
+
+float beamsweep(vector from, vector dir,float length, float step,float step_up, float step_down)
+{
+    float i;
+    vector a,b,u,d;
+
+    u = '0 0 1' * step_up;
+    d = '0 0 1' * step_down;
+
+    traceline(from + u, from - d,MOVE_NORMAL,self);
+    if(trace_fraction == 1.0)
+        return 0;
+
+    if(beamsweep_badpoint(trace_endpos,0))
+        return 0;
+
+    a = trace_endpos;
+    for(i = 0; i < length; i += step)
+    {
+
+        b = a + dir * step;
+        tracebox(a + u,'-4 -4 -4','4 4 4', b + u,MOVE_NORMAL,self);
+        if(trace_fraction != 1.0)
+            return i / length;
+
+        traceline(b + u, b - d,MOVE_NORMAL,self);
+        if(trace_fraction == 1.0)
+            return i / length;
+
+        if(beamsweep_badpoint(trace_endpos,0))
+            return i / length;
+
+        //te_lightning1(world,a+u,b+u);
+        //te_lightning1(world,b+u,b-d);
+
+        a = trace_endpos;
+    }
+
+    return 1;
+}
+
+vector steerlib_beamsteer(vector dir, float length, float step, float step_up, float step_down)
+{
+    float bm_forward, bm_right, bm_left,p;
+    vector vr,vl;
+
+    dir_z *= 0.15;
+    vr = vectoangles(dir);
+    vr_x *= -1;
+
+    makevectors(vr);
+    bm_forward = beamsweep(self.origin, v_forward, length, step, step_up, step_down);
+
+    vr = normalize(v_forward + v_right * 0.125);
+    vl = normalize(v_forward - v_right * 0.125);
+
+    bm_right = beamsweep(self.origin, vr, length, step, step_up, step_down);
+    bm_left  = beamsweep(self.origin, vl, length, step, step_up, step_down);
+
+
+    p = bm_left + bm_right;
+    if(p == 2)
+    {
+        //te_lightning1(self,self.origin + '0 0 32',self.origin + '0 0 32' + vr * length);
+        //te_lightning1(self.tur_head,self.origin + '0 0 32',self.origin + '0 0 32' + vl * length);
+
+        return v_forward;
+    }
+
+    p = 2 - p;
+
+    vr = normalize(v_forward + v_right * p);
+    vl = normalize(v_forward - v_right * p);
+    bm_right = beamsweep(self.origin, vr, length, step, step_up, step_down);
+    bm_left  = beamsweep(self.origin, vl, length, step, step_up, step_down);
+
+
+    if(bm_left + bm_right < 0.15)
+    {
+        vr = normalize((v_forward*-1) + v_right * 0.75);
+        vl = normalize((v_forward*-1) - v_right * 0.75);
+
+        bm_right = beamsweep(self.origin, vr, length, step, step_up, step_down);
+        bm_left  = beamsweep(self.origin, vl, length, step, step_up, step_down);
+    }
+
+    //te_lightning1(self,self.origin + '0 0 32',self.origin + '0 0 32' + vr * length);
+    //te_lightning1(self.tur_head,self.origin + '0 0 32',self.origin + '0 0 32' + vl * length);
+
+    bm_forward *= bm_forward;
+    bm_right   *= bm_right;
+    bm_left    *= bm_left;
+
+    vr = vr * bm_right;
+    vl = vl * bm_left;
+
+    return normalize(vr + vl);
+
+}
+
+
 //////////////////////////////////////////////
 //     Testting                             //
 // Everything below this point is a mess :D //
@@ -621,4 +621,4 @@
 #endif
 
 
-
+

Modified: branches/nexuiz-2.0/data/qcsrc/server/t_items.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/t_items.qc	2009-06-06 15:19:03 UTC (rev 6885)
+++ branches/nexuiz-2.0/data/qcsrc/server/t_items.qc	2009-06-06 15:21:14 UTC (rev 6886)
@@ -364,11 +364,11 @@
 	if (self.owner == other)
 		return;
 
-	pointparticles(particleeffectnum("item_pickup"), self.origin, '0 0 0', 1);
-
 	if(!Item_GiveTo(self, other))
 		return;
 
+	pointparticles(particleeffectnum("item_pickup"), self.origin, '0 0 0', 1);
+
 	if (self.classname == "droppedweapon")
 		remove (self);
 	else if((self.flags & FL_WEAPON) && !(self.flags & FL_NO_WEAPON_STAY) && g_weapon_stay)

Modified: branches/nexuiz-2.0/data/qcsrc/server/w_rocketlauncher.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/w_rocketlauncher.qc	2009-06-06 15:19:03 UTC (rev 6885)
+++ branches/nexuiz-2.0/data/qcsrc/server/w_rocketlauncher.qc	2009-06-06 15:21:14 UTC (rev 6886)
@@ -1,8 +1,19 @@
 .float rl_release;
 .float rl_detonate_later;
 
+void W_Rocket_Unregister()
+{
+	if(self.owner && self.owner.lastrocket == self)
+	{
+		self.owner.lastrocket = world;
+		// self.owner.rl_release = 1;
+	}
+}
+
 void W_Rocket_Explode (void)
 {
+	W_Rocket_Unregister();
+
 	self.event_damage = SUB_Null;
 	RadiusDamage (self, self.owner, cvar("g_balance_rocketlauncher_damage"), cvar("g_balance_rocketlauncher_edgedamage"), cvar("g_balance_rocketlauncher_radius"), world, cvar("g_balance_rocketlauncher_force"), self.projectiledeathtype, other);
 
@@ -75,6 +86,7 @@
 void W_Rocket_RemoteExplode()
 {
 	if(self.owner.deadflag == DEAD_NO)
+	if(self.owner.lastrocket)
 	{
 		if((self.spawnshieldtime >= 0)
 			? (time >= self.spawnshieldtime) // timer
@@ -187,27 +199,26 @@
 		}
 		else
 		{
-			if(!self.rl_release && !self.owner.rl_release && cvar("g_balance_rocketlauncher_guiderate"))
+			if(self == self.owner.lastrocket)
+			if(!self.owner.rl_release)
+			if(cvar("g_balance_rocketlauncher_guiderate"))
+			if(time > self.pushltime)
+			if(self.owner.deadflag == DEAD_NO)
 			{
-				if(time > self.pushltime)
-				{
-					velspeed = vlen(self.velocity);
+				velspeed = vlen(self.velocity);
 
-					makevectors(self.owner.v_angle);
-					desireddir = v_forward;
-					desiredorigin = self.owner.origin + self.owner.view_ofs;
-					olddir = normalize(self.velocity);
+				makevectors(self.owner.v_angle);
+				desireddir = v_forward;
+				desiredorigin = self.owner.origin + self.owner.view_ofs;
+				olddir = normalize(self.velocity);
 
-					// now it gets tricky... we want to move like some curve to approximate the target direction
-					// but we are limiting the rate at which we can turn!
-					goal = desiredorigin + ((self.origin - desiredorigin) * desireddir + cvar("g_balance_rocketlauncher_guidegoal")) * desireddir;
-					newdir = rocket_steerto(olddir, normalize(goal - self.origin), cos(cvar("g_balance_rocketlauncher_guiderate") * frametime * PI / 180));
+				// now it gets tricky... we want to move like some curve to approximate the target direction
+				// but we are limiting the rate at which we can turn!
+				goal = desiredorigin + ((self.origin - desiredorigin) * desireddir + cvar("g_balance_rocketlauncher_guidegoal")) * desireddir;
+				newdir = rocket_steerto(olddir, normalize(goal - self.origin), cos(cvar("g_balance_rocketlauncher_guiderate") * frametime * PI / 180));
 
-					self.velocity = newdir * velspeed;
-				}
+				self.velocity = newdir * velspeed;
 			}
-			else
-				self.rl_release = 1;
 
 			if(self.rl_detonate_later)
 				W_Rocket_RemoteExplode();
@@ -220,8 +231,8 @@
 
 void W_Rocket_Touch (void)
 {
-	if(self.owner && self.owner.lastrocket == self)
-		self.owner.lastrocket = world;
+	W_Rocket_Unregister();
+
 	PROJECTILE_TOUCH;
 	W_Rocket_Explode ();
 }
@@ -434,15 +445,19 @@
 		}
 		else
 		{
-			if (self.BUTTON_ATCK && self.rl_release)
-			if (weapon_prepareattack(0, cvar("g_balance_rocketlauncher_refire")))
+			if (self.BUTTON_ATCK)
 			{
-				W_Rocket_Attack();
-				weapon_thinkf(WFRAME_FIRE1, cvar("g_balance_rocketlauncher_animtime"), w_ready);
-				self.rl_release = 0;
+				if(self.rl_release)
+				if(weapon_prepareattack(0, cvar("g_balance_rocketlauncher_refire")))
+				{
+					W_Rocket_Attack();
+					weapon_thinkf(WFRAME_FIRE1, cvar("g_balance_rocketlauncher_animtime"), w_ready);
+					self.rl_release = 0;
+				}
 			}
-			if (!self.BUTTON_ATCK)
+			else
 				self.rl_release = 1;
+
 			if (self.BUTTON_ATCK2)
 			{
 				rockfound = 0;

Modified: branches/nexuiz-2.0/data/weapons.cfg
===================================================================
--- branches/nexuiz-2.0/data/weapons.cfg	2009-06-06 15:19:03 UTC (rev 6885)
+++ branches/nexuiz-2.0/data/weapons.cfg	2009-06-06 15:21:14 UTC (rev 6886)
@@ -252,7 +252,7 @@
 set g_balance_hagar_secondary_refire 0.15
 set g_balance_hagar_secondary_ammo 1
 
-set g_balance_rocketlauncher_damage 120
+set g_balance_rocketlauncher_damage 100
 set g_balance_rocketlauncher_edgedamage 35
 set g_balance_rocketlauncher_force 600
 set g_balance_rocketlauncher_radius 150
@@ -265,7 +265,7 @@
 set g_balance_rocketlauncher_ammo 3
 set g_balance_rocketlauncher_health 30
 set g_balance_rocketlauncher_detonatedelay 0.2 // positive: timer till detonation is allowed, negative: "security device" that prevents ANY remote detonation if it could hurt its owner, zero: detonatable at any time
-set g_balance_rocketlauncher_guiderate 120 // max degrees per second
+set g_balance_rocketlauncher_guiderate 90 // max degrees per second
 set g_balance_rocketlauncher_guidegoal 512 // goal distance for (non-laser) guiding (higher = less control, lower = erratic)
 set g_balance_rocketlauncher_guidedelay 0.15 // delay before guiding kicks in
 set g_balance_rocketlauncher_laserguided_speed 1000  //650

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-06-06 15:19:03 UTC (rev 6885)
+++ branches/nexuiz-2.0/misc/netradiant-NexuizPack/nexuiz.game/data/entities.def	2009-06-06 15:21:14 UTC (rev 6886)
@@ -748,7 +748,7 @@
 colormap: 1024 + 16 * pantscolor + shirtcolor
 angles: initial looking direction
 targetname: when invoking it by a button etc., it changes the color to the initiator of the action (e.g. the one pressing a button). In Onslaught, this can be used to color control points for team who owns them. In other game types, this can be used as a fun feature. Works only with _shirt and _pants textures.
-bgmscript: emitter class from the BGM script
+bgmscript: emitter class from the BGM script (if prefixed with <, movedir is treated as an angle value)
 bgmscriptattack: attack time of the effect strength (0 to 3.9)
 bgmscriptdecay: decay time of the effect strength (0 to 3.9)
 bgmscriptsustain: sustain level of the effect strength (0.1 to 1, set to -1 to disable sustain)



More information about the nexuiz-commits mailing list