r3223 - in trunk/data: models/sprites qcsrc/server

DONOTREPLY at icculus.org DONOTREPLY at icculus.org
Tue Jan 22 15:41:53 EST 2008


Author: div0
Date: 2008-01-22 15:41:53 -0500 (Tue, 22 Jan 2008)
New Revision: 3223

Added:
   trunk/data/models/sprites/ons-cp-blue.sp2
   trunk/data/models/sprites/ons-cp-neut.sp2
   trunk/data/models/sprites/ons-cp-red.sp2
   trunk/data/models/sprites/ons-gen-blue.sp2
   trunk/data/models/sprites/ons-gen-red.sp2
   trunk/data/models/sprites/ons-gen-shielded.sp2
Modified:
   trunk/data/models/sprites/make-sprites.sh
   trunk/data/qcsrc/server/ctf.qc
   trunk/data/qcsrc/server/g_world.qc
   trunk/data/qcsrc/server/mode_onslaught.qc
   trunk/data/qcsrc/server/waypointsprites.qc
Log:
minor fixed for Onslaught + sprites


Modified: trunk/data/models/sprites/make-sprites.sh
===================================================================
--- trunk/data/models/sprites/make-sprites.sh	2008-01-22 15:26:57 UTC (rev 3222)
+++ trunk/data/models/sprites/make-sprites.sh	2008-01-22 20:41:53 UTC (rev 3223)
@@ -125,3 +125,9 @@
 sprite keycarrier-yellow  ffff00 000000 "KEY CARRIER"
 sprite redbase            ff0000 000000 "RED BASE"
 sprite waypoint           008080 000000 "WAYPOINT"
+sprite ons-gen-red        ff0000 000000 "GENERATOR"
+sprite ons-gen-blue       0000ff 000000 "GENERATOR"
+sprite ons-gen-shielded   808080 000000 "GENERATOR"
+sprite ons-cp-neut        ffff00 000000 "CONTROL POINT"
+sprite ons-cp-red         ff0000 000000 "CONTROL POINT"
+sprite ons-cp-blue        0000ff 000000 "CONTROL POINT"

Added: trunk/data/models/sprites/ons-cp-blue.sp2
===================================================================
(Binary files differ)


Property changes on: trunk/data/models/sprites/ons-cp-blue.sp2
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/data/models/sprites/ons-cp-neut.sp2
===================================================================
(Binary files differ)


Property changes on: trunk/data/models/sprites/ons-cp-neut.sp2
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/data/models/sprites/ons-cp-red.sp2
===================================================================
(Binary files differ)


Property changes on: trunk/data/models/sprites/ons-cp-red.sp2
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/data/models/sprites/ons-gen-blue.sp2
===================================================================
(Binary files differ)


Property changes on: trunk/data/models/sprites/ons-gen-blue.sp2
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/data/models/sprites/ons-gen-red.sp2
===================================================================
(Binary files differ)


Property changes on: trunk/data/models/sprites/ons-gen-red.sp2
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/data/models/sprites/ons-gen-shielded.sp2
===================================================================
(Binary files differ)


Property changes on: trunk/data/models/sprites/ons-gen-shielded.sp2
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Modified: trunk/data/qcsrc/server/ctf.qc
===================================================================
--- trunk/data/qcsrc/server/ctf.qc	2008-01-22 15:26:57 UTC (rev 3222)
+++ trunk/data/qcsrc/server/ctf.qc	2008-01-22 20:41:53 UTC (rev 3223)
@@ -498,7 +498,7 @@
 	if(!self.noalign)
 		droptofloor();
 
-	WaypointSprite_SpawnFixed("redbase", self.origin + '0 0 37');
+	WaypointSprite_SpawnFixed("redbase", self.origin + '0 0 37', self, enemy);
 };
 
 /*QUAKED item_flag_team2 (0 0.5 0.8) (-48 -48 -24) (48 48 64)
@@ -557,7 +557,7 @@
 	if(!self.noalign)
 		droptofloor();
 
-	WaypointSprite_SpawnFixed("bluebase", self.origin + '0 0 37');
+	WaypointSprite_SpawnFixed("bluebase", self.origin + '0 0 37', self, enemy);
 };
 
 

Modified: trunk/data/qcsrc/server/g_world.qc
===================================================================
--- trunk/data/qcsrc/server/g_world.qc	2008-01-22 15:26:57 UTC (rev 3222)
+++ trunk/data/qcsrc/server/g_world.qc	2008-01-22 20:41:53 UTC (rev 3223)
@@ -1667,6 +1667,7 @@
 	status = WinningCondition_RanOutOfSpawns();
 	if(status == WINNING_YES)
 	{
+		bprint("Hey! Someone ran out of spawns!\n");
 	}
 	else if(g_assault)
 	{

Modified: trunk/data/qcsrc/server/mode_onslaught.qc
===================================================================
--- trunk/data/qcsrc/server/mode_onslaught.qc	2008-01-22 15:26:57 UTC (rev 3222)
+++ trunk/data/qcsrc/server/mode_onslaught.qc	2008-01-22 20:41:53 UTC (rev 3223)
@@ -1,8 +1,13 @@
-
+.entity sprite;
 .string target2;
 .float iscaptured;
 .float islinked;
 .float isshielded;
+.float lasthealth;
+
+float ons_sprite_cp_red, ons_sprite_cp_blue, ons_sprite_cp_neut;
+float ons_sprite_gen_red, ons_sprite_gen_blue, ons_sprite_gen_shielded;
+
 void() onslaught_updatelinks =
 {
 	local entity l, links;
@@ -154,6 +159,81 @@
 		dprint("--- done updating links ---\n");
 };
 
+float onslaught_controlpoint_can_be_linked(entity cp, float t)
+{
+	entity e;
+	// check to see if this player has a legitimate claim to capture this
+	// control point - more specifically that there is a captured path of
+	// points leading back to the team generator
+	e = findchain(classname, "onslaught_link");
+	while (e)
+	{
+		if (e.goalentity == cp)
+		{
+			dprint(etos(e), " (link) connects to ", etos(e.enemy), " (point)");
+			if (e.enemy.islinked)
+			{
+				dprint(" which is linked");
+				if (e.enemy.team == t)
+				{
+					dprint(" and has the correct team!\n");
+					return 1;
+				}
+				else
+					dprint(" but has the wrong team\n");
+			}
+			else
+				dprint("\n");
+		}
+		else if (e.enemy == cp)
+		{
+			dprint(etos(e), " (link) connects to ", etos(e.goalentity), " (point)");
+			if (e.goalentity.islinked)
+			{
+				dprint(" which is linked");
+				if (e.goalentity.team == t)
+				{
+					dprint(" and has a team!\n");
+					return 1;
+				}
+				else
+					dprint(" but has the wrong team\n");
+			}
+			else
+				dprint("\n");
+		}
+		e = e.chain;
+	}
+	return 0;
+}
+
+float onslaught_controlpoint_attackable(entity cp, float t)
+// -1: SAME TEAM!
+// 0:  off limits
+// 1:  attack it
+// 2:  touch it
+{
+	if(cp.isshielded)
+	{
+		return 0;
+	}
+	else if(cp.goalentity)
+	{
+		// if there's already an icon built, nothing happens
+		if(cp.team == t)
+			return -1;
+		if(onslaught_controlpoint_can_be_linked(cp, t))
+			return 1;
+	}
+	else
+	{
+		// free point
+		if(onslaught_controlpoint_can_be_linked(cp, t))
+			return 2;
+	}
+	return 0;
+}
+
 void() onslaught_generator_think =
 {
 	local float d;
@@ -227,7 +307,14 @@
 	self.frame = 10 * bound(0, (1 - self.health / self.max_health), 1);
 	// see if the generator is still functional, or dying
 	if (self.health > 0)
-		bprint(ColoredTeamName(self.team), " generator has ", ftos(floor(self.health)), " health remaining\n");
+	{
+		float h, lh;
+		lh = ceil(self.lasthealth / 100) * 100;
+		h = ceil(self.health / 100) * 100;
+		if(lh != h)
+			bprint(ColoredTeamName(self.team), " generator has less than ", ftos(h), " health remaining\n");
+		self.lasthealth = self.health;
+	}
 	else
 	{
 		if (attacker == self)
@@ -256,6 +343,53 @@
 	self.nextthink = time;
 };
 
+float onslaught_generator_waypointsprite_for_player(entity e)
+{
+	if(e.classname == "player")
+		if(e.team == self.owner.team)
+		{
+			if(self.owner.team == COLOR_TEAM1)
+				return ons_sprite_gen_red;
+			else if(self.owner.team == COLOR_TEAM2)
+				return ons_sprite_gen_blue;
+		}
+	if(self.owner.isshielded)
+		return ons_sprite_gen_shielded;
+	if(self.owner.team == COLOR_TEAM1)
+		return ons_sprite_gen_red;
+	else if(self.owner.team == COLOR_TEAM2)
+		return ons_sprite_gen_blue;
+	return 0;
+}
+
+float onslaught_controlpoint_waypointsprite_for_player(entity e)
+{
+	float a;
+	if(e.classname == "player")
+	{
+		a = onslaught_controlpoint_attackable(self.owner, e.team);
+		if(a == -1 || a == 1) // own point, or fire at it
+		{
+			if(self.owner.team == COLOR_TEAM1)
+				return ons_sprite_cp_red;
+			else if(self.owner.team == COLOR_TEAM2)
+				return ons_sprite_cp_blue;
+		}
+		else if(a == 2) // touch it
+			return ons_sprite_cp_neut;
+	}
+	else
+	{
+		if(self.owner.team == COLOR_TEAM1)
+			return ons_sprite_cp_red;
+		else if(self.owner.team == COLOR_TEAM2)
+			return ons_sprite_cp_blue;
+		else
+			return ons_sprite_cp_neut;
+	}
+	return 0;
+}
+
 /*QUAKED onslaught_generator (0 .5 .8) (-32 -32 -24) (32 32 64)
 Base generator.
 
@@ -272,6 +406,29 @@
 		remove(self);
 		return;
 	}
+
+	if(!ons_sprite_cp_blue)
+	{
+		precache_model("models/sprites/ons-cp-blue.sp2");
+		setmodel(self, "models/sprites/ons-cp-blue.sp2");
+		ons_sprite_cp_blue = self.modelindex;
+		precache_model("models/sprites/ons-cp-red.sp2");
+		setmodel(self, "models/sprites/ons-cp-red.sp2");
+		ons_sprite_cp_red = self.modelindex;
+		precache_model("models/sprites/ons-cp-neut.sp2");
+		setmodel(self, "models/sprites/ons-cp-neut.sp2");
+		ons_sprite_cp_neut = self.modelindex;
+		precache_model("models/sprites/ons-gen-blue.sp2");
+		setmodel(self, "models/sprites/ons-gen-blue.sp2");
+		ons_sprite_gen_blue = self.modelindex;
+		precache_model("models/sprites/ons-gen-red.sp2");
+		setmodel(self, "models/sprites/ons-gen-red.sp2");
+		ons_sprite_gen_red = self.modelindex;
+		precache_model("models/sprites/ons-gen-shielded.sp2");
+		setmodel(self, "models/sprites/ons-gen-shielded.sp2");
+		ons_sprite_gen_shielded = self.modelindex;
+	}
+
 	local entity e;
 	precache_model("models/onslaught/generator.md3");
 	precache_model("models/onslaught/generator_shield.md3");
@@ -284,7 +441,7 @@
 	self.colormap = 1024 + (self.team - 1) * 17;
 	self.solid = SOLID_BSP;
 	self.movetype = MOVETYPE_NONE;
-	self.max_health = self.health = 3000;
+	self.lasthealth = self.max_health = self.health = 3000;
 	setmodel(self, "models/onslaught/generator.md3");
 	//setsize(self, '-32 -32 -24', '32 32 64');
 	setorigin(self, self.origin);
@@ -306,6 +463,9 @@
 	e.team = self.team;
 	self.think = onslaught_generator_delayed;
 	self.nextthink = time + 0.2;
+
+	WaypointSprite_SpawnFixed(string_null, e.origin + '0 0 1' * e.maxs_z, self, sprite);
+	self.sprite.waypointsprite_for_player = onslaught_generator_waypointsprite_for_player;
 };
 
 void(entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force) onslaught_controlpoint_icon_damage =
@@ -405,65 +565,8 @@
 	local entity e;
 	if (other.classname != "player")
 		return;
-	// if there's already an icon built, nothing happens
-	if (self.goalentity)
-	{
-		dprint("a\n");
+	if(onslaught_controlpoint_attackable(self, other.team) != 2)
 		return;
-	}
-	// shielded points are definitely off-limits
-	if (self.isshielded)
-	{
-		dprint("b\n");
-		return;
-	}
-	// check to see if this player has a legitimate claim to capture this
-	// control point - more specifically that there is a captured path of
-	// points leading back to the team generator
-	e = findchain(classname, "onslaught_link");
-	while (e)
-	{
-		if (e.goalentity == self)
-		{
-			dprint(etos(e), " (link) connects to ", etos(e.enemy), " (point)");
-			if (e.enemy.islinked)
-			{
-				dprint(" which is linked");
-				if (e.enemy.team == other.team)
-				{
-					dprint(" and has the correct team!\n");
-					break;
-				}
-				else
-					dprint(" but has the wrong team\n");
-			}
-			else
-				dprint("\n");
-		}
-		else if (e.enemy == self)
-		{
-			dprint(etos(e), " (link) connects to ", etos(e.goalentity), " (point)");
-			if (e.goalentity.islinked)
-			{
-				dprint(" which is linked");
-				if (e.goalentity.team == other.team)
-				{
-					dprint(" and has a team!\n");
-					break;
-				}
-				else
-					dprint(" but has the wrong team\n");
-			}
-			else
-				dprint("\n");
-		}
-		e = e.chain;
-	}
-	if (!e)
-	{
-		dprint("c\n");
-		return;
-	}
 	// we've verified that this player has a legitimate claim to this point,
 	// so start building the captured point icon (which only captures this
 	// point if it successfully builds without being destroyed first)
@@ -537,6 +640,9 @@
 	setorigin(e, self.origin);
 	e.colormap = self.colormap;
 	onslaught_updatelinks();
+
+	WaypointSprite_SpawnFixed(string_null, e.origin + '0 0 1' * e.maxs_z, self, sprite);
+	self.sprite.waypointsprite_for_player = onslaught_controlpoint_waypointsprite_for_player;
 };
 
 void() onslaught_link_delayed =

Modified: trunk/data/qcsrc/server/waypointsprites.qc
===================================================================
--- trunk/data/qcsrc/server/waypointsprites.qc	2008-01-22 15:26:57 UTC (rev 3222)
+++ trunk/data/qcsrc/server/waypointsprites.qc	2008-01-22 20:41:53 UTC (rev 3223)
@@ -256,10 +256,12 @@
 
 entity WaypointSprite_SpawnFixed(
 	string spr,
-	vector ofs
+	vector ofs,
+	entity own,
+	.entity ownfield
 )
 {
-	return WaypointSprite_Spawn(spr, 0, 0, world, ofs, world, 0, world, enemy, TRUE);
+	return WaypointSprite_Spawn(spr, 0, 0, world, ofs, world, 0, own, ownfield, TRUE);
 }
 
 .entity waypointsprite_deployed_fixed;




More information about the nexuiz-commits mailing list