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