From c19b7e02ecf3033ae5cf7ef8e64eca9ae3c6b7b6 Mon Sep 17 00:00:00 2001 From: Mario Date: Mon, 2 Sep 2013 14:44:15 +1000 Subject: [PATCH] Zombie has a random chance at melee range to block most damage --- qcsrc/common/monsters/monster/zombie.qc | 28 +++++++++++++++++++++++++ qcsrc/common/monsters/sv_monsters.qc | 2 ++ 2 files changed, 30 insertions(+) diff --git a/qcsrc/common/monsters/monster/zombie.qc b/qcsrc/common/monsters/monster/zombie.qc index c87044d45..e34e6dae0 100644 --- a/qcsrc/common/monsters/monster/zombie.qc +++ b/qcsrc/common/monsters/monster/zombie.qc @@ -77,6 +77,29 @@ void zombie_attack_leap_touch() self.touch = MonsterTouch; } +void zombie_blockend() +{ + if(self.health <= 0) + return; + + monsters_setframe(zombie_anim_blockend); + self.armorvalue = 0; + self.m_armor_blockpercent = autocvar_g_monsters_armor_blockpercent; +} + +float zombie_block() +{ + monsters_setframe(zombie_anim_blockstart); + self.armorvalue = 100; + self.m_armor_blockpercent = 0.7; + self.state = MONSTER_STATE_ATTACK_MELEE; // freeze monster + self.attack_finished_single = time + 2.1; + + defer(2, zombie_blockend); + + return TRUE; +} + float zombie_attack(float attack_type) { switch(attack_type) @@ -92,6 +115,9 @@ float zombie_attack(float attack_type) else chosen_anim = zombie_anim_attackstanding3; + if(random() < 0.3 && self.health < 75) + return zombie_block(); + return monster_melee(self.enemy, MON_CVAR(zombie, attack_melee_damage), chosen_anim, self.attack_range, MON_CVAR(zombie, attack_melee_delay), DEATH_MONSTER_ZOMBIE_MELEE, TRUE); } case MONSTER_ATTACK_RANGED: @@ -129,6 +155,8 @@ float m_zombie(float req) } case MR_DEATH: { + self.armorvalue = 0; + self.m_armor_blockpercent = autocvar_g_monsters_armor_blockpercent; monsters_setframe((random() > 0.5) ? zombie_anim_deathback1 : zombie_anim_deathfront1); return TRUE; } diff --git a/qcsrc/common/monsters/sv_monsters.qc b/qcsrc/common/monsters/sv_monsters.qc index 693960180..62555c371 100644 --- a/qcsrc/common/monsters/sv_monsters.qc +++ b/qcsrc/common/monsters/sv_monsters.qc @@ -916,6 +916,8 @@ void monster_die() self.moveto = self.origin; self.touch = MonsterTouch; // reset incase monster was pouncing self.reset = func_null; + self.state = 0; + self.attack_finished_single = 0; if not(self.flags & FL_FLY) self.velocity = '0 0 0'; -- 2.39.2