From: Mario Date: Sun, 15 Sep 2013 07:18:36 +0000 (+1000) Subject: Add monster lifetime support, use target center rather than view offset & ignore... X-Git-Tag: xonotic-v0.8.0~241^2^2~79 X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=079fd1f068d026f4cba8bcaa4d5827dfeb7aca61;p=xonotic%2Fxonotic-data.pk3dir.git Add monster lifetime support, use target center rather than view offset & ignore frozen targets --- diff --git a/qcsrc/common/monsters/monster/spider.qc b/qcsrc/common/monsters/monster/spider.qc index f2850c147..ea4a6d6b7 100644 --- a/qcsrc/common/monsters/monster/spider.qc +++ b/qcsrc/common/monsters/monster/spider.qc @@ -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; diff --git a/qcsrc/common/monsters/sv_monsters.qc b/qcsrc/common/monsters/sv_monsters.qc index f6856edee..eb8dd33c7 100644 --- a/qcsrc/common/monsters/sv_monsters.qc +++ b/qcsrc/common/monsters/sv_monsters.qc @@ -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); }