From: Mario Date: Sat, 12 Oct 2013 21:42:33 +0000 (+1100) Subject: Use shield if enemy is too close X-Git-Tag: xonotic-v0.8.0~241^2^2~45 X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=18ff4a1ab3f488472af8d565448f3f6f6ebacec9;p=xonotic%2Fxonotic-data.pk3dir.git Use shield if enemy is too close --- diff --git a/qcsrc/common/monsters/monster/mage.qc b/qcsrc/common/monsters/monster/mage.qc index 46deae5d3..9e78ce1ac 100644 --- a/qcsrc/common/monsters/monster/mage.qc +++ b/qcsrc/common/monsters/monster/mage.qc @@ -263,46 +263,60 @@ void mage_teleport() void mage_shield_think() { self.nextthink = time; + setorigin(self, self.owner.origin); if(time >= self.ltime || self.owner.health <= 0) { self.owner.armorvalue = 0; self.owner.m_armor_blockpercent = autocvar_g_monsters_armor_blockpercent; + self.owner.weaponentity = world; remove(self); return; } } +void mage_shield_touch() +{ + if(other == self.realowner) + return; + + vector mymid = (self.absmin + self.absmax) * 0.5; + vector othermid = (other.absmin + other.absmax) * 0.5; + + Damage(other, self, self.realowner, 1, DEATH_MONSTER_MAGE, mymid, normalize(othermid - mymid) * 100); +} + void mage_shield() { if(self.weaponentity) return; // already have a shield - - entity shield = spawn(); - shield.owner = self; + entity shield = spawn(); + + shield.owner = shield.realowner = self; + shield.enemy = self; shield.team = self.team; - shield.ltime = time + MON_CVAR(mage, shield_time); + shield.touch = mage_shield_touch; shield.classname = "shield"; + shield.ltime = time + MON_CVAR(mage, shield_time); shield.effects = EF_ADDITIVE; shield.movetype = MOVETYPE_NOCLIP; shield.solid = SOLID_TRIGGER; shield.avelocity = '7 0 11'; - shield.scale = self.scale * 0.6; + shield.scale = self.scale * 0.5; shield.think = mage_shield_think; shield.nextthink = time; - setattachment(shield, self, ""); - setmodel(shield, "models/ctf/shield.md3"); - setsize(shield, shield.scale * shield.mins, shield.scale * shield.maxs); - self.lastshielded = time + MON_CVAR(mage, shield_delay); - + self.weaponentity = shield; self.frame = mage_anim_attack; self.attack_finished_single = time + 1; - self.m_armor_blockpercent = MON_CVAR(mage, shield_blockpercent); self.armorvalue = self.health; + + setorigin(shield, self.origin); + setmodel(shield, "models/ctf/shield.md3"); + setsize(shield, shield.scale * shield.mins, shield.scale * shield.maxs); } float mage_attack(float attack_type) @@ -311,8 +325,9 @@ float mage_attack(float attack_type) { case MONSTER_ATTACK_MELEE: { - // mage currently has no melee attacks - return FALSE; + mage_shield(); + + return TRUE; } case MONSTER_ATTACK_RANGED: {