X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fmonsters%2Fmonster%2Fspider.qc;h=b72a857e79bb0f253ab5b04c9c1f6b3d0161e28a;hb=d820bc6acfe936141e2fc15d0d3bbcf98ad278ab;hp=e23224141bc1a8e39cd2aa762aed5bf2d0f3077e;hpb=227b2de30402285fff6b8bfa6f83244f371c90a2;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/monsters/monster/spider.qc b/qcsrc/server/monsters/monster/spider.qc index e23224141..b72a857e7 100644 --- a/qcsrc/server/monsters/monster/spider.qc +++ b/qcsrc/server/monsters/monster/spider.qc @@ -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");