]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Add monster lifetime support, use target center rather than view offset & ignore...
authorMario <mario.mario@y7mail.com>
Sun, 15 Sep 2013 07:18:36 +0000 (17:18 +1000)
committerMario <mario.mario@y7mail.com>
Sun, 15 Sep 2013 07:18:36 +0000 (17:18 +1000)
qcsrc/common/monsters/monster/spider.qc
qcsrc/common/monsters/sv_monsters.qc

index f2850c1470f2fa2ea44f12d9de9dd3ce9efcd61d..ea4a6d6b786f5b1f70abb3b1ed82456fb9bf5dcb 100644 (file)
@@ -56,7 +56,7 @@ void spider_web_explode()
                                break;
                }
                
-               RadiusDamage(self, self.realowner, damg, edamg, 0, world, rad, DEATH_MONSTER_SPIDER_FIRE, world); // ice deals no damage anyway
+               RadiusDamage(self, self.realowner, damg, edamg, rad, world, rad, DEATH_MONSTER_SPIDER_FIRE, world); // ice deals no damage anyway
                
                for(e = findradius(self.origin, rad); e; e = e.chain) if(e != self) if(e.takedamage && e.deadflag == DEAD_NO) if(e.health > 0)
                {
@@ -98,8 +98,6 @@ void spider_shootweb(float ptype)
                        break;
        }
        
-       vector fmins = '-4 -4 -4', fmaxs = '4 4 4';
-       
        monster_makevectors(self.enemy);
        
        sound(self, CH_SHOTS, snd, VOL_BASE, ATTEN_NORM);
@@ -121,7 +119,7 @@ void spider_shootweb(float ptype)
        proj.movetype = MOVETYPE_BOUNCE;
        W_SetupProjectileVelocityEx(proj, v_forward, v_up, MON_CVAR(spider, attack_web_speed), MON_CVAR(spider, attack_web_speed_up), 0, 0, FALSE);
        proj.touch = spider_web_touch;
-       setsize(proj, fmins, fmaxs);
+       setsize(proj, '-4 -4 -4', '4 4 4');
        proj.takedamage = DAMAGE_NO;
        proj.damageforcescale = 0;
        proj.health = 500;
index f6856edeef6c505041d193b2134aef2688fa630f..eb8dd33c70e5fa73e90f15067f5275c3ec271b22 100644 (file)
@@ -103,6 +103,9 @@ float monster_isvalidtarget (entity targ, entity ent)
 
        if(SAME_TEAM(targ, ent))
                return FALSE; // enemy is on our team
+               
+       if (targ.frozen == 1 || (targ.frozen == 2 && ent.monsterid != MON_SPIDER))
+               return FALSE; // ignore frozen
 
        if(autocvar_g_monsters_target_infront || ent.spawnflags & MONSTERFLAG_INFRONT)
        if(ent.enemy != targ)
@@ -287,7 +290,7 @@ void monster_makevectors(entity e)
 {
        vector v;
 
-       v = CENTER_OR_VIEWOFS(e);
+       v = e.origin + (e.mins + e.maxs) * 0.5;
        self.v_angle = vectoangles(v - (self.origin + self.view_ofs));
        self.v_angle_x = -self.v_angle_x;
 
@@ -783,6 +786,8 @@ void monsters_reset()
 {
        setorigin(self, self.pos1);
        self.angles = self.pos2;
+       
+       Unfreeze(self); // remove any icy remains
 
        self.health = self.max_health;
        self.velocity = '0 0 0';
@@ -882,6 +887,9 @@ void monster_die()
        self.think = monster_dead_think;
        self.nextthink = self.ticrate;
        self.ltime = time + 5;
+       
+       Unfreeze(self); // remove any icy remains
+       self.health = 0; // reset by Unfreeze
 
        monster_dropitem();
 
@@ -988,6 +996,13 @@ void monster_think()
 {
        self.think = monster_think;
        self.nextthink = self.ticrate;
+       
+       if(self.ltime)
+       if(time >= self.ltime)
+       {
+               Damage(self, self, self, self.health + self.max_health, DEATH_KILL, self.origin, self.origin);
+               return;
+       }
 
        MON_ACTION(self.monsterid, MR_THINK);
 }