r5636 - in trunk/data/qcsrc/server: . monsters

DONOTREPLY at icculus.org DONOTREPLY at icculus.org
Fri Jan 23 01:33:47 EST 2009


Author: div0
Date: 2009-01-23 01:33:47 -0500 (Fri, 23 Jan 2009)
New Revision: 5636

Modified:
   trunk/data/qcsrc/server/miscfunctions.qc
   trunk/data/qcsrc/server/monsters/ai.qc
   trunk/data/qcsrc/server/monsters/defs.qc
   trunk/data/qcsrc/server/monsters/m_monsters.qc
   trunk/data/qcsrc/server/t_teleporters.qc
   trunk/data/qcsrc/server/w_campingrifle.qc
Log:
make random teleport dest work


Modified: trunk/data/qcsrc/server/miscfunctions.qc
===================================================================
--- trunk/data/qcsrc/server/miscfunctions.qc	2009-01-22 12:59:43 UTC (rev 5635)
+++ trunk/data/qcsrc/server/miscfunctions.qc	2009-01-23 06:33:47 UTC (rev 5636)
@@ -1415,6 +1415,10 @@
 		}
 	}
 
+	precache_model("models/elaser.mdl");
+	precache_model("models/laser.mdl");
+	precache_model("models/ebomb.mdl");
+
 #if 0
 	// Disabled this code because it simply does not work (e.g. ignores bgmvolume, overlaps with "cd loop" controlled tracks).
 

Modified: trunk/data/qcsrc/server/monsters/ai.qc
===================================================================
--- trunk/data/qcsrc/server/monsters/ai.qc	2009-01-22 12:59:43 UTC (rev 5635)
+++ trunk/data/qcsrc/server/monsters/ai.qc	2009-01-23 06:33:47 UTC (rev 5636)
@@ -188,10 +188,10 @@
 
 void() monster_checkbossflag =
 {
+#if 0
 	local float healthboost;
 	local float r;
 
-#if 0
 	// monsterbosses cvar or spawnflag 64 causes a monster to be a miniboss
 	if ((self.spawnflags & 64) || (random() * 100 < cvar("monsterbosspercent")))
 	{

Modified: trunk/data/qcsrc/server/monsters/defs.qc
===================================================================
--- trunk/data/qcsrc/server/monsters/defs.qc	2009-01-22 12:59:43 UTC (rev 5635)
+++ trunk/data/qcsrc/server/monsters/defs.qc	2009-01-23 06:33:47 UTC (rev 5636)
@@ -6,8 +6,8 @@
 .void()         th_run;
 .float()        th_missile; // LordHavoc: changed from void() to float(), returns true if attacking
 .void()         th_melee;
-.void(entity attacker, float damage, float damgtype, string dethtype)           th_pain;
-.void()         th_die;
+//.void(entity attacker, float damage, float damgtype, string dethtype)           th_pain; // TODO Nexuiz uses event_damage
+//.void()         th_die; // TODO never called directly by Nexuiz
 .entity         oldenemy;               // mad at this player before taking damage
 entity  newmis;                 // launch_spike sets this after spawning it
 

Modified: trunk/data/qcsrc/server/monsters/m_monsters.qc
===================================================================
--- trunk/data/qcsrc/server/monsters/m_monsters.qc	2009-01-22 12:59:43 UTC (rev 5635)
+++ trunk/data/qcsrc/server/monsters/m_monsters.qc	2009-01-23 06:33:47 UTC (rev 5636)
@@ -159,11 +159,12 @@
 	// puts a spikey ball where the error is...
 	e = spawn();
 	setorigin(e, self.origin);
-	setmodel (e, "progs/star.mdl");
+	setmodel (e, "models/ebomb.mdl");
 	e.movetype = MOVETYPE_NONE;
 	e.solid = SOLID_NOT;
 	e.think = SUB_Null;
 	e.nextthink = -1;
+	e.scale = 16;
 };
 
 //============================================================================

Modified: trunk/data/qcsrc/server/t_teleporters.qc
===================================================================
--- trunk/data/qcsrc/server/t_teleporters.qc	2009-01-22 12:59:43 UTC (rev 5635)
+++ trunk/data/qcsrc/server/t_teleporters.qc	2009-01-23 06:33:47 UTC (rev 5636)
@@ -105,7 +105,7 @@
 
 void Teleport_Touch (void)
 {
-	entity oldself;
+	entity oldself, e;
 
 	if (other.health < 1)
 		return;
@@ -119,13 +119,35 @@
 	if(other.classname == "player")
 		RemoveGrapplingHook(other);
 
-	TeleportPlayer(self, other, self.enemy.origin + '0 0 1' * (1 - other.mins_z - 24), self.enemy.mangle, v_forward * vlen(other.velocity), '0 0 0', '0 0 0');
+	if(self.enemy)
+	{
+		e = self.enemy;
+	}
+	else
+	{
+		RandomSelection_Init();
+		for(e = world; (e = find(e, targetname, self.target)); )
+		{
+			if(e.cnt)
+				RandomSelection_Add(e, 0, e.cnt, 0);
+			else
+				RandomSelection_Add(e, 0, 1, 0);
+		}
+		e = RandomSelection_chosen_ent;
+	}
 
-	if(self.enemy.target)
+	if(!e)
 	{
+		sprint(other, "Teleport destination vanished. Sorry... please complain to the mapper.\n");
+	}
+
+	TeleportPlayer(self, other, e.origin + '0 0 1' * (1 - other.mins_z - 24), e.mangle, v_forward * vlen(other.velocity), '0 0 0', '0 0 0');
+
+	if(e.target)
+	{
 		oldself = self;
 		activator = other;
-		self = self.enemy;
+		self = e;
 		SUB_UseTargets();
 		self = oldself;
 	}
@@ -133,6 +155,8 @@
 
 void spawnfunc_info_teleport_destination (void)
 {
+	self.classname = "info_teleport_destination";
+
 	self.mangle = self.angles;
 	self.angles = '0 0 0';
 
@@ -143,7 +167,7 @@
 	{
 	}
 	else
-		objerror ("Teleport destination without a targetname");
+		objerror ("^3Teleport destination without a targetname");
 }
 
 void spawnfunc_misc_teleporter_dest (void)
@@ -158,18 +182,39 @@
 
 void teleport_findtarget (void)
 {
-	// now enable touch
-	self.touch = Teleport_Touch;
+	entity e;
+	float n;
 
-	self.enemy = find (world, targetname, self.target);
-	if (!self.enemy)
+	n = 0;
+	for(e = world; (e = find(e, targetname, self.target)); )
 	{
+		++n;
+		if(e.movetype == MOVETYPE_NONE)
+			waypoint_spawnforteleporter(self, e.origin, 0);
+		if(e.classname != "info_teleport_destination")
+			print("^3MAPPER ERROR: teleporter does target an invalid teleport destination entity. Angles will not work.\n");
+	}
+
+	if(n == 0)
+	{
+		// no dest!
 		objerror ("Teleporter with nonexistant target");
 		return;
 	}
+	else if(n == 1)
+	{
+		// exactly one dest - bots love that
+		self.enemy = find(e, targetname, self.target);
+		self.dest = self.enemy.origin;
+	}
+	else
+	{
+		// have to use random selection every single time
+		self.enemy = world;
+	}
 
-	self.dest = self.enemy.origin;
-	waypoint_spawnforteleporter(self, self.dest, 0);
+	// now enable touch
+	self.touch = Teleport_Touch;
 }
 
 void spawnfunc_trigger_teleport (void)

Modified: trunk/data/qcsrc/server/w_campingrifle.qc
===================================================================
--- trunk/data/qcsrc/server/w_campingrifle.qc	2009-01-22 12:59:43 UTC (rev 5635)
+++ trunk/data/qcsrc/server/w_campingrifle.qc	2009-01-23 06:33:47 UTC (rev 5636)
@@ -51,7 +51,7 @@
 	if not(self.items & IT_UNLIMITED_WEAPON_AMMO)
 		self.ammo_nails -= pAmmo;
 
-	W_SetupShot (self, '32 8 -8', FALSE, 2, "weapons/campingrifle_fire.wav");
+	W_SetupShot (self, '32 8 -4', FALSE, 2, "weapons/campingrifle_fire.wav");
 	pointparticles(particleeffectnum("shotgun_muzzleflash"), w_shotorg, w_shotdir * 2000, 1);
 
 	if(self.BUTTON_ZOOM) // if zoomed, shoot from the eye




More information about the nexuiz-commits mailing list