]> git.rm.cloudns.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Change monster_melee to work more like monster_leap
authorMario <mario.mario@y7mail.com>
Sat, 31 Aug 2013 05:05:05 +0000 (15:05 +1000)
committerMario <mario.mario@y7mail.com>
Sat, 31 Aug 2013 05:05:05 +0000 (15:05 +1000)
12 files changed:
qcsrc/common/monsters/cl_monsters.qc
qcsrc/common/monsters/monster/animus.qc
qcsrc/common/monsters/monster/bruiser.qc
qcsrc/common/monsters/monster/brute.qc
qcsrc/common/monsters/monster/cerberus.qc
qcsrc/common/monsters/monster/knight.qc
qcsrc/common/monsters/monster/mage.qc
qcsrc/common/monsters/monster/shambler.qc
qcsrc/common/monsters/monster/spider.qc
qcsrc/common/monsters/monster/stingray.qc
qcsrc/common/monsters/monster/zombie.qc
qcsrc/common/monsters/sv_monsters.qc

index 869842c8ac1c579768b516728d33fcd6972bec37..bc02a37a541b97844d5957a0956eea360a915d04 100644 (file)
@@ -18,14 +18,14 @@ void monster_changeteam()
 void monster_die()
 {
        MON_ACTION(self.monsterid, MR_DEATH);
-               
+       
        self.solid = SOLID_CORPSE;
 }
 
 void monster_draw()
-{        
+{
        float dt;
-            
+       
        dt = time - self.move_time;
        self.move_time = time;
        if(dt <= 0)
@@ -39,28 +39,24 @@ void monster_draw()
 
 void monster_construct()
 {
-       vector min_s, max_s;
        entity mon = get_monsterinfo(self.monsterid);
        
-       min_s = mon.mins;
-       max_s = mon.maxs;
-       
        if(mon.spawnflags & MONSTER_SIZE_BROKEN)
                self.scale = 1.3;
        
        self.netname = M_NAME(self.monsterid);
-
+       
        setorigin(self, self.origin);
        setmodel(self, mon.model);
-       setsize(self, min_s, max_s);
+       setsize(self, mon.mins, mon.maxs);
        
        self.move_movetype      = MOVETYPE_BOUNCE;
        self.health                     = 255;
        self.solid                      = SOLID_BBOX;
-       self.movetype           = MOVETYPE_BOUNCE; 
+       self.movetype           = MOVETYPE_BOUNCE;
        self.move_origin        = self.origin;
        self.move_time          = time;
-       self.drawmask           = MASK_NORMAL;  
+       self.drawmask           = MASK_NORMAL;
        self.alpha                      = 1;
        self.draw                       = monster_draw;
 }
@@ -69,11 +65,11 @@ void ent_monster()
 {
        float sf;
        sf = ReadByte();
-
+       
        if(sf & MSF_SETUP)
        {
                self.monsterid = ReadByte();
-                               
+               
                self.origin_x = ReadCoord();
                self.origin_y = ReadCoord();
                self.origin_z = ReadCoord();
@@ -108,18 +104,18 @@ void ent_monster()
                self.velocity_z = ReadShort();
                
                self.move_angles_y = ReadShort();
-                       
-               self.move_time   = time;
+               
+               self.move_time = time;
                self.move_velocity = self.velocity;
-               self.move_origin   = self.origin;
+               self.move_origin = self.origin;
        }
        
        if(sf & MSF_ANIM)
        {
                self.frame1time = ReadCoord();
-               self.frame        = ReadByte();
+               self.frame = ReadByte();
        }
-
+       
        if(sf & MSF_STATUS)
        {
                self.skin = ReadByte();
@@ -127,8 +123,8 @@ void ent_monster()
                float _tmp;
                _tmp = ReadByte();
                if(_tmp != self.team)
-               {                       
-                       self.team = _tmp;                               
+               {
+                       self.team = _tmp;
                        monster_changeteam();
                }
                
index 8c5d074a5979a7e2b6a47074bb92276161b02642..88d50e61b85c843046f36bec3d8f4cbfd7be9b6b 100644 (file)
@@ -54,17 +54,18 @@ float animus_attack(float attack_type)
        {
                case MONSTER_ATTACK_MELEE:
                {
-                       monsters_setframe(animus_anim_attack);
-                       self.attack_finished_single = time + 1;
-                       monster_melee(self.enemy, MON_CVAR(animus, attack_melee_damage), self.attack_range, DEATH_MONSTER_ANIMUS, TRUE);
+                       if(monster_melee(self.enemy, MON_CVAR(animus, attack_melee_damage), animus_anim_attack, self.attack_range, 1, DEATH_MONSTER_ANIMUS, TRUE))
+                               return TRUE;
                        
-                       return TRUE;
+                       return FALSE;
                }
                case MONSTER_ATTACK_RANGED:
                {
                        makevectors(self.angles);
                        if(monster_leap(animus_anim_leap, animus_touch_jump, v_forward * 700 + '0 0 300', 0.8))
                                return TRUE;
+                               
+                       return FALSE;
                }
        }
        
index f6b8146d6c4b83ad1457be3dd13c222df4b3a070..c1b8018af706660303db12364aeb795a2f914c52 100644 (file)
@@ -40,12 +40,11 @@ float bruiser_attack(float attack_type)
                case MONSTER_ATTACK_MELEE:
                {
                        float len = vlen(self.velocity);
-                       monsters_setframe((len < 50) ? bruiser_anim_attack : bruiser_anim_runattack);
-                       self.attack_finished_single = time + 1.25;
                        
-                       monster_melee(self.enemy, MON_CVAR(bruiser, attack_melee_damage), self.attack_range, DEATH_MONSTER_BRUISER, FALSE);
+                       if(monster_melee(self.enemy, MON_CVAR(bruiser, attack_melee_damage), ((len < 50) ? bruiser_anim_attack : bruiser_anim_runattack), self.attack_range, 1.25, DEATH_MONSTER_BRUISER, FALSE))
+                               return TRUE;
                        
-                       return TRUE;
+                       return FALSE;
                }
                case MONSTER_ATTACK_RANGED:
                {
index a78813beea413037e4bfe69f60771be7b379e11b..42e189f75a80ca05c28678970ce867493438f89b 100644 (file)
@@ -45,7 +45,7 @@ void brute_blade()
        self.brute_cycles += 1;
        self.angles_y = self.angles_y + random()* 25;
        
-       monster_melee(self.enemy, MON_CVAR(brute, attack_chainsaw_damage), self.attack_range, DEATH_MONSTER_BRUTE_BLADE, TRUE);
+       monster_melee(self.enemy, MON_CVAR(brute, attack_chainsaw_damage), brute_anim_swing, self.attack_range, 0, DEATH_MONSTER_BRUTE_BLADE, TRUE);
        
        if(self.brute_cycles <= 4)
                defer(0.2, brute_blade);
@@ -159,7 +159,6 @@ float brute_attack(float attack_type)
                case MONSTER_ATTACK_MELEE:
                {
                        self.brute_cycles = 0;
-                       monsters_setframe(brute_anim_swing);
                        self.attack_finished_single = time + 1.3;
                        brute_blade();
                        
index 0f3163fadb8ff3bfda8d6660c848303f86df18c8..15d3d8c4a9e38f994e5d4bdceda9317b22b3952a 100644 (file)
@@ -89,17 +89,18 @@ float cerberus_attack(float attack_type)
        {
                case MONSTER_ATTACK_MELEE:
                {
-                       monsters_setframe(cerberus_anim_attack);
-                       self.attack_finished_single = time + 0.7;
-                       monster_melee(self.enemy, MON_CVAR(cerberus, attack_bite_damage), self.attack_range, DEATH_MONSTER_CERBERUS_BITE, TRUE);
-                       
-                       return TRUE;
+                       if(monster_melee(self.enemy, MON_CVAR(cerberus, attack_bite_damage), cerberus_anim_attack, self.attack_range, 0.7, DEATH_MONSTER_CERBERUS_BITE, TRUE))
+                               return TRUE;
+                               
+                       return FALSE;
                }
                case MONSTER_ATTACK_RANGED:
                {
                        makevectors(self.angles);
                        if(monster_leap(cerberus_anim_attack, cerberus_touch_jump, v_forward * 300 + '0 0 200', 0.8))
                                return TRUE;
+                               
+                       return FALSE;
                }
        }
        
index ca74c3c69e491db1393e224851c9ebd3c3f03678..f0aaf466665257bda141a085b88a9d3b10600e46 100644 (file)
@@ -240,17 +240,18 @@ float knight_attack(float attack_type)
                                anim = knight_anim_smash;
                        else
                                anim = knight_anim_wattack;
-                       
-                       monsters_setframe(anim);
-                       self.attack_finished_single = time + 0.7;
-                       monster_melee(self.enemy, MON_CVAR(knight, attack_melee_damage), self.attack_range, DEATH_MONSTER_KNIGHT_MELEE, TRUE);
-                       
-                       return TRUE;
+                               
+                       if(monster_melee(self.enemy, MON_CVAR(knight, attack_melee_damage), anim, self.attack_range, 0.7, DEATH_MONSTER_KNIGHT_MELEE, TRUE))
+                               return TRUE;
+                               
+                       return FALSE;
                }
                case MONSTER_ATTACK_RANGED:
                {
                        if(knight_attack_ranged())
                                return TRUE;
+                               
+                       return FALSE;
                }
        }
        
index 67dba01efac95c5355e621d81d816b7cdcbc4f6d..8bb3da3d2ac838c8def3753c7aa0fd018a308448 100644 (file)
@@ -90,7 +90,7 @@ float friend_needshelp(entity e)
 
 void mageattack_melee()
 {
-       monster_melee(self.enemy, MON_CVAR(mage, attack_melee_damage), self.attack_range, DEATH_MONSTER_MAGE, TRUE);
+       monster_melee(self.enemy, MON_CVAR(mage, attack_melee_damage), mage_anim_attack, self.attack_range, MON_CVAR(mage, attack_melee_delay) - 0.2, DEATH_MONSTER_MAGE, TRUE);
 }
 
 void mage_grenade_explode()
index 729d72843f7721b1b224a052b598b4e74c1e95cd..0933e7ede4427f487cbbb4e23726fb420237272c 100644 (file)
@@ -35,7 +35,7 @@ const float shambler_anim_death       = 8;
 
 void shambler_smash()
 {
-       monster_melee(self.enemy, MON_CVAR(shambler, attack_smash_damage), self.attack_range, DEATH_MONSTER_SHAMBLER_SMASH, TRUE);
+       monster_melee(self.enemy, MON_CVAR(shambler, attack_smash_damage), shambler_anim_smash, self.attack_range, 0.4, DEATH_MONSTER_SHAMBLER_SMASH, TRUE);
 }
 
 void shambler_delayedsmash()
@@ -48,9 +48,7 @@ void shambler_delayedsmash()
 void shambler_swing()
 {
        float r = (random() < 0.5);
-       monsters_setframe((r) ? shambler_anim_swingr : shambler_anim_swingl);
-       monster_melee(self.enemy, MON_CVAR(shambler, attack_claw_damage), self.attack_range, DEATH_MONSTER_SHAMBLER_CLAW, TRUE);
-       self.attack_finished_single = time + 0.8;
+       monster_melee(self.enemy, MON_CVAR(shambler, attack_claw_damage), ((r) ? shambler_anim_swingr : shambler_anim_swingl), self.attack_range, 0.8, DEATH_MONSTER_SHAMBLER_CLAW, TRUE);
        if(r)
                defer(0.5, shambler_swing);
 }
index 42de2aca49ba89a9341d74bf728c93e8fe8d523d..c06a38d3b0fef70b1ce81046b6e4c7a9244849c8 100644 (file)
@@ -142,11 +142,10 @@ float spider_attack(float attack_type)
        {
                case MONSTER_ATTACK_MELEE:
                {
-                       monster_melee(self.enemy, MON_CVAR(spider, attack_bite_damage), self.attack_range, DEATH_MONSTER_SPIDER, TRUE);
-                       monsters_setframe((random() > 0.5) ? spider_anim_attack : spider_anim_attack2);
-                       self.attack_finished_single = time + MON_CVAR(spider, attack_bite_delay);
-                       
-                       return TRUE;
+                       if(monster_melee(self.enemy, MON_CVAR(spider, attack_bite_damage), ((random() > 0.5) ? spider_anim_attack : spider_anim_attack2), self.attack_range, MON_CVAR(spider, attack_bite_delay), DEATH_MONSTER_SPIDER, TRUE))
+                               return TRUE;
+                               
+                       return FALSE;
                }
                case MONSTER_ATTACK_RANGED:
                {
index 41e866ca52016eefbda922cc12195104f53d1a1b..6335536c67bb49faf0e02f4aeccf6fd67e8c7bd7 100644 (file)
@@ -33,13 +33,16 @@ float stingray_attack(float attack_type)
        {
                case MONSTER_ATTACK_MELEE:
                {
-                       monsters_setframe(stingray_anim_attack);
-                       self.attack_finished_single = time + MON_CVAR(stingray, attack_bite_delay);
-                       monster_melee(self.enemy, MON_CVAR(stingray, attack_bite_damage), self.attack_range, DEATH_MONSTER_STINGRAY, FALSE);
-                       
-                       return TRUE;
+                       if(monster_melee(self.enemy, MON_CVAR(stingray, attack_bite_damage), stingray_anim_attack, self.attack_range, MON_CVAR(stingray, attack_bite_delay), DEATH_MONSTER_STINGRAY, FALSE))
+                               return TRUE;
+                               
+                       return FALSE;
                }
                case MONSTER_ATTACK_RANGED:
+               {
+                       // no ranged attack for stingray (yet?)
+                       return FALSE;
+               }
        }
        
        return FALSE;
index 34586bd245653af73e8f1850e17c295cfa40750c..7b04cfcd2936754e040afdc6f17a39caf7ecc543 100644 (file)
@@ -91,20 +91,19 @@ float zombie_attack(float attack_type)
                                chosen_anim = zombie_anim_attackstanding2;
                        else
                                chosen_anim = zombie_anim_attackstanding3;
-                               
-                       monsters_setframe(chosen_anim);
-
-                       self.attack_finished_single = time + MON_CVAR(zombie, attack_melee_delay);
                        
-                       monster_melee(self.enemy, MON_CVAR(zombie, attack_melee_damage), self.attack_range, DEATH_MONSTER_ZOMBIE_MELEE, TRUE);
-                       
-                       return TRUE;
+                       if(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))
+                               return TRUE;
+                               
+                       return FALSE;
                }
                case MONSTER_ATTACK_RANGED:
                {
                        makevectors(self.angles);
                        if(monster_leap(zombie_anim_attackleap, zombie_attack_leap_touch, v_forward * MON_CVAR(zombie, attack_leap_speed) + '0 0 200', MON_CVAR(zombie, attack_leap_delay)))
                                return TRUE;
+                               
+                       return FALSE;
                }
        }
        
index 4183fe1dd045b14b08f7f6b8d3026f8ec8765c4e..0f79997023fdfb0e11eb351444e4694cdfcd50e8 100644 (file)
@@ -206,7 +206,7 @@ void monster_makevectors(entity e)
        makevectors(self.v_angle);
 }
 
-float monster_melee(entity targ, float damg, float er, float deathtype, float dostop)
+float monster_melee(entity targ, float damg, float anim, float er, float anim_finished, float deathtype, float dostop)
 {
        float rdmg = damg * random();
 
@@ -222,6 +222,11 @@ float monster_melee(entity targ, float damg, float er, float deathtype, float do
                self.state = MONSTER_STATE_ATTACK_MELEE;
                self.SendFlags |= MSF_MOVE;
        }
+       
+       monsters_setframe(anim);
+       
+       if(anim_finished != 0)
+               self.attack_finished_single = time + anim_finished;
 
        monster_makevectors(targ);