]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/server/monsters/monster/spider.qc
Merge branch 'master' into Mario/monsters
[xonotic/xonotic-data.pk3dir.git] / qcsrc / server / monsters / monster / spider.qc
index e23224141bc1a8e39cd2aa762aed5bf2d0f3077e..b72a857e79bb0f253ab5b04c9c1f6b3d0161e28a 100644 (file)
@@ -1,12 +1,9 @@
-// size
 const vector SPIDER_MIN = '-18 -18 -25';
 const vector SPIDER_MAX = '18 18 30';
 
-// model
 string SPIDER_MODEL = "models/monsters/spider.dpm";
 
 #ifdef SVQC
-// cvars
 float autocvar_g_monster_spider;
 float autocvar_g_monster_spider_stopspeed;
 float autocvar_g_monster_spider_attack_leap_delay;
@@ -18,7 +15,6 @@ float autocvar_g_monster_spider_speed_walk;
 float autocvar_g_monster_spider_speed_run;
 float autocvar_g_monster_spider_attack_type;
 
-// animations
 const float spider_anim_idle           = 0;
 const float spider_anim_walk           = 1;
 const float spider_anim_attack         = 2;
@@ -36,58 +32,64 @@ void spider_think()
        monster_move(autocvar_g_monster_spider_speed_run, autocvar_g_monster_spider_speed_walk, autocvar_g_monster_spider_stopspeed, spider_anim_walk, spider_anim_walk, spider_anim_idle);
 }
 
-void spider_web_explode ()
+void spider_web_explode()
 {
-       float damg = 0, edamg = 0, rad = 1;
-       switch(self.realowner.spider_type)
+       entity e;
+       if(self)
        {
-               case SPIDER_TYPE_ICE:
-                       break; // no change
-               case SPIDER_TYPE_FIRE:
-                       damg = 15;
-                       rad = 25;
-                       edamg = 6;
-                       break;
+               float damg = 0, edamg = 0, rad = 1;
+               switch(self.realowner.spider_type)
+               {
+                       case SPIDER_TYPE_ICE:
+                               rad = 25;
+                               pointparticles(particleeffectnum("electro_impact"), self.origin, '0 0 0', 1);
+                               break;
+                       case SPIDER_TYPE_FIRE:
+                               pointparticles(particleeffectnum("fireball_explode"), self.origin, '0 0 0', 1);
+                               damg = 15;
+                               rad = 25;
+                               edamg = 6;
+                               break;
+               }
+               
+               RadiusDamage(self, self.realowner, damg, edamg, 0, world, rad, DEATH_MONSTER_SPIDER_FIRE, world); // ice deals no damage anyway
+               
+               for(e = findradius(self.origin, rad); e; e = e.chain) if(e.takedamage && e.deadflag == DEAD_NO) if(e.health > 0)
+               {
+                       switch(self.realowner.spider_type)
+                       {
+                               case SPIDER_TYPE_ICE:
+                                       Freeze(e, 0.3, 2, FALSE);
+                                       break;
+                               case SPIDER_TYPE_FIRE:
+                                       Fire_AddDamage(e, self.realowner, 5 * monster_skill, autocvar_g_monster_spider_attack_fire_time, DEATH_MONSTER_SPIDER_FIRE);
+                                       break;
+                       }
+               }
+               
+               remove(self);
        }
-       
-       RadiusDamage (self, self.realowner, damg, edamg, rad, world, 0, self.projectiledeathtype, other);
-       
-       remove (self);
 }
 
-void spider_web_touch ()
+void spider_web_touch()
 {
        PROJECTILE_TOUCH;
        
-       if(other.takedamage == DAMAGE_AIM)
-       if(other.health > 0)
-       switch(self.realowner.spider_type)
-       {
-               case SPIDER_TYPE_ICE:
-                       Freeze(other, 0.3, 2, FALSE);
-                       break;
-               case SPIDER_TYPE_FIRE:
-                       Fire_AddDamage(other, self.realowner, 5 * monster_skill, autocvar_g_monster_spider_attack_fire_time, DEATH_MONSTER_SPIDER_FIRE);
-                       break;
-       }
-               
        spider_web_explode();
 }
 
 void spider_shootweb(float ptype)
 {
-       float p = 0, dt = 0;
+       float p = 0;
        string snd = "";
        switch(ptype)
        {
                case SPIDER_TYPE_ICE:
                        p = PROJECTILE_ELECTRO;
-                       dt = WEP_ELECTRO;
                        snd = "weapons/electro_fire2.wav";
                        break;
                case SPIDER_TYPE_FIRE:
                        p = PROJECTILE_FIREMINE;
-                       dt = WEP_FIREBALL;
                        snd = "weapons/fireball_fire.wav";
                        break;
        }
@@ -107,7 +109,7 @@ void spider_shootweb(float ptype)
        proj.bot_dodgerating = 0;
        proj.nextthink = time + 5;
        PROJECTILE_MAKETRIGGER(proj);
-       proj.projectiledeathtype = dt | HITTYPE_SECONDARY;
+       proj.projectiledeathtype = DEATH_MONSTER_SPIDER_FIRE;
        setorigin(proj, w_shotorg);
 
        //proj.glow_size = 50;
@@ -159,7 +161,7 @@ float spider_attack(float attack_type)
        return FALSE;
 }
 
-void spider_die ()
+void spider_die()
 {
        Monster_CheckDropCvars ("spider");