]> git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Replace monster_delayedattack mess with defer
authorMario <mario.mario@y7mail.com>
Thu, 6 Jun 2013 18:51:37 +0000 (04:51 +1000)
committerMario <mario.mario@y7mail.com>
Thu, 6 Jun 2013 18:51:37 +0000 (04:51 +1000)
qcsrc/server/monsters/lib/defs.qh
qcsrc/server/monsters/lib/monsters.qc
qcsrc/server/monsters/monster/brute.qc
qcsrc/server/monsters/monster/knight.qc
qcsrc/server/monsters/monster/mage.qc
qcsrc/server/monsters/monster/shambler.qc

index fd448f1f8d2156e3bf582eec38806e2ade8fc1ea..f5a75e3c839952ed58967769840ea107849c4ea1 100644 (file)
@@ -40,7 +40,6 @@ const float MONSTERFLAG_SPAWNED = 512; // flag for spawned monsters
 
 .void() monster_spawnfunc;
 .void() monster_die;
-.void() monster_delayedattack;
 
 .float monster_movestate; // used to tell what the monster is currently doing
 const float MONSTER_MOVE_OWNER = 1; // monster will move to owner if in range, or stand still
index 782227a130803aa0cad0c07ccb4e7dae3044e0f7..1a47dc4dcc50a165c4c64e2f63f8028bcebd577d 100644 (file)
@@ -352,24 +352,10 @@ void monster_checkattack(entity e, entity targ)
        if(e == world)
                return;
        if(targ == world)
-       {
-               e.monster_delayedattack = func_null;
-               e.delay = -1;
                return;
-       }
                
        if not(e.monster_attackfunc)
                return;
-               
-       if(e.monster_delayedattack && e.delay != -1)
-       {
-               if(time < e.delay)
-                       return;
-                       
-               e.monster_delayedattack();
-               
-               return;
-       }
        
        if(time < e.attack_finished_single)
                return;
@@ -1016,7 +1002,6 @@ float monster_initialize(string  net_name, float mon_id,
        self.solid                              = SOLID_BBOX;
        self.scale                              = 1;
        self.movetype                   = MOVETYPE_WALK;
-       self.delay                              = -1; // used in attack delay code
        self.spawnshieldtime    = time + autocvar_g_monsters_spawnshieldtime;
        monsters_spawned           += 1;
        self.enemy                              = world;
index 7ebca8202c01e6f67dc042921a8c8d38fe9bcf37..8952d54008efa4895c406a25e6d6caaab494eca3 100644 (file)
@@ -39,37 +39,25 @@ void brute_blade()
 {
        self.brute_cycles += 1;
        self.angles_y = self.angles_y + random()* 25;
-       self.delay = time + 0.2;
-       self.monster_delayedattack = brute_blade;
        
        monster_melee(self.enemy, autocvar_g_monster_brute_chainsaw_damage, 0.3, DEATH_MONSTER_BRUTE_BLADE, TRUE);
        
-       if(self.brute_cycles >= 4)
-       {
-               self.monster_delayedattack = func_null;
-               self.delay = -1;
-       }
+       if(self.brute_cycles <= 4)
+               defer(0.2, brute_blade);
 }
 
 void brute_uzi()
 {
        self.brute_cycles += 1;
        
-       if(self.brute_cycles > autocvar_g_monster_brute_attack_uzi_bullets)
-       {
-               self.monster_delayedattack = func_null;
-               self.delay = -1;
-               return;
-       }
-       
        monster_makevectors(self.enemy);
        
        W_SetupShot (self, autocvar_g_antilag_bullets && 18000 >= autocvar_g_antilag_bullets, 0, "weapons/uzi_fire.wav", CH_WEAPON_A, autocvar_g_monster_brute_attack_uzi_damage);
        fireBallisticBullet(w_shotorg, w_shotdir, 0.02, 18000, 5, autocvar_g_monster_brute_attack_uzi_damage, autocvar_g_monster_brute_attack_uzi_force, DEATH_MONSTER_BRUTE_UZI, 0, 1, 115);
        endFireBallisticBullet();
        
-       self.delay = time + 0.1;
-       self.monster_delayedattack = brute_uzi;
+       if(self.brute_cycles <= autocvar_g_monster_brute_attack_uzi_bullets)
+               defer(0.1, brute_uzi);
 }
 
 void brute_grenade_explode()
@@ -178,8 +166,7 @@ float brute_attack(float attack_type)
                        {
                                monsters_setframe(brute_anim_pain);
                                self.attack_finished_single = time + 0.8;
-                               self.delay = time + 0.1;
-                               self.monster_delayedattack = brute_uzi;
+                               defer(0.1, brute_uzi);
                        }
                        else
                        {
index cbdc1193576777700932b6d9ad1fa04fa7cf2cc5..a35bba2bd9ea313b9029302696d86df88a0a9055 100644 (file)
@@ -53,8 +53,6 @@ void knight_think()
 
 void knight_inferno()
 {
-       self.monster_delayedattack = func_null;
-       self.delay = -1;
        if not(self.enemy)
                return;
                
@@ -99,9 +97,6 @@ void knight_fireball()
        
        monster_makevectors(self.enemy);
        
-       self.monster_delayedattack = func_null;
-       self.delay = -1;
-       
        self.effects |= EF_MUZZLEFLASH;
        sound(self, CHAN_WEAPON, "weapons/fireball2.wav", 1, ATTN_NORM);
 
@@ -165,15 +160,11 @@ void knight_spike()
 
 void knight_spikes()
 {
-       self.monster_delayedattack = knight_spikes;
-       self.delay = time + 0.1;
        self.knight_cycles += 1;
        knight_spike();
-       if(self.knight_cycles >= 7)
-       {
-               self.monster_delayedattack = func_null;
-               self.delay = -1;
-       }
+       
+       if(self.knight_cycles <= 7)
+               defer(0.1, knight_spikes);
 }
 
 float knight_attack_ranged()
@@ -194,25 +185,22 @@ float knight_attack_ranged()
                case 1:
                {
                        monsters_setframe(knight_anim_magic2);
-                       self.delay = time + 0.4;
-                       self.monster_delayedattack = knight_fireball;
                        self.attack_finished_single = time + 2;
+                       defer(0.4, knight_fireball);
                        
                        return TRUE;
                }
                case 2:
                {
-                       self.monster_delayedattack = knight_inferno;
-                       self.delay = time + 0.5;
                        self.attack_finished_single = time + 3;
+                       defer(0.5, knight_inferno);
                        return TRUE;
                }
                case 3:
                {
                        monsters_setframe(knight_anim_magic3);
-                       self.monster_delayedattack = knight_spikes;
-                       self.delay = time + 0.4;
                        self.attack_finished_single = time + 3;
+                       defer(0.4, knight_spikes);
                        
                        return TRUE;
                }
index c7983a3f36297b7358e55ec3aef3be38eeb80283..d30c2083393788e7e1bb1fccc09d43eb8143da1a 100644 (file)
@@ -130,9 +130,6 @@ void mage_think()
 void mageattack_melee()
 {
        monster_melee(self.enemy, autocvar_g_monster_mage_attack_melee_damage, 0.3, DEATH_MONSTER_MAGE, TRUE);
-       
-       self.delay = -1;
-       self.monster_delayedattack = func_null;
 }
 
 void mage_grenade_explode()
@@ -228,9 +225,6 @@ void mage_spike()
 {
        entity missile;
        vector dir = normalize((self.enemy.origin + '0 0 10') - self.origin);
-       
-       self.delay = -1;
-       self.monster_delayedattack = func_null;
 
        makevectors(self.angles);
 
@@ -356,10 +350,9 @@ float mage_attack(float attack_type)
        {
                case MONSTER_ATTACK_MELEE:
                {
-                       self.monster_delayedattack = mageattack_melee;
-                       self.delay = time + 0.2;
                        monsters_setframe(mage_anim_attack);
                        self.attack_finished_single = time + autocvar_g_monster_mage_attack_melee_delay;
+                       defer(0.2, mageattack_melee);
                        
                        return TRUE;
                }
@@ -372,9 +365,8 @@ float mage_attack(float attack_type)
                        }
        
                        monsters_setframe(mage_anim_attack);
-                       self.delay = time + 0.2;
                        self.attack_finished_single = time + autocvar_g_monster_mage_attack_spike_delay;
-                       self.monster_delayedattack = mage_spike;
+                       defer(0.2, mage_spike);
                        
                        return TRUE;
                }
index 0416bbcc4f25fc979a381e9b18f125d0160dd0f1..ec782216cc0a0d9ed610cbd37b2919bbce6d17ba 100644 (file)
@@ -32,40 +32,28 @@ void shambler_think()
 
 void shambler_smash()
 {
-       self.monster_delayedattack = func_null;
-       self.delay = -1;
-       
        monster_melee(self.enemy, autocvar_g_monster_shambler_damage, 0.3, DEATH_MONSTER_SHAMBLER_SMASH, TRUE);
 }
 
 void shambler_delayedsmash()
 {
        monsters_setframe(shambler_anim_smash);
-       self.monster_delayedattack = shambler_smash;
-       self.delay = time + 0.7;
+       defer(0.7, shambler_smash);
        self.attack_finished_single = time + 1.1;
 }
 
 void shambler_swing()
 {
-       float r = ((random() < 0.5) ? TRUE : FALSE);
+       float r = (random() < 0.5);
        monsters_setframe((r) ? shambler_anim_swingr : shambler_anim_swingl);
        monster_melee(self.enemy, autocvar_g_monster_shambler_attack_claw_damage, 0.3, DEATH_MONSTER_SHAMBLER_CLAW, TRUE);
        self.attack_finished_single = time + 0.8;
-       self.monster_delayedattack = func_null;
-       self.delay = -1;
        if(r)
-       {
-               self.monster_delayedattack = shambler_swing;
-               self.delay = time + 0.5;
-       }
+               defer(0.5, shambler_swing);
 }
 
 void CastLightning()
 {
-       self.monster_delayedattack = func_null;
-       self.delay = -1;
-
        local vector org, dir;
        //vector v = '0 0 0';
 
@@ -106,8 +94,7 @@ float shambler_attack(float attack_type)
                {
                        monsters_setframe(shambler_anim_magic);
                        self.attack_finished_single = time + 1.1;
-                       self.monster_delayedattack = CastLightning;
-                       self.delay = time + 0.6;
+                       defer(0.6, CastLightning);
                        
                        return TRUE;
                }