X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fcommon%2Fmonsters%2Fmonster%2Fspider.qc;h=f2850c1470f2fa2ea44f12d9de9dd3ce9efcd61d;hb=2c0e35d3ee9fe6652c9c56f29dbbf546da0043b0;hp=cd0e903760f7ca8a03e978a16531dcccc8849df1;hpb=0c562010bbefe3d00a24e9e5df442a1de1bde9f1;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/common/monsters/monster/spider.qc b/qcsrc/common/monsters/monster/spider.qc index cd0e90376..f2850c147 100644 --- a/qcsrc/common/monsters/monster/spider.qc +++ b/qcsrc/common/monsters/monster/spider.qc @@ -2,26 +2,31 @@ REGISTER_MONSTER( /* MON_##id */ SPIDER, /* function */ m_spider, -/* spawnflags */ 0, +/* spawnflags */ MON_FLAG_MELEE | MON_FLAG_RANGED, /* mins,maxs */ '-18 -18 -25', '18 18 30', /* model */ "spider.dpm", /* netname */ "spider", /* fullname */ _("Spider") ); +#define SPIDER_SETTINGS(monster) \ + MON_ADD_CVAR(monster, health) \ + MON_ADD_CVAR(monster, attack_bite_damage) \ + MON_ADD_CVAR(monster, attack_bite_delay) \ + MON_ADD_CVAR(monster, attack_web_damagetime) \ + MON_ADD_CVAR(monster, attack_web_speed) \ + MON_ADD_CVAR(monster, attack_web_speed_up) \ + MON_ADD_CVAR(monster, attack_web_delay) \ + MON_ADD_CVAR(monster, attack_type) \ + MON_ADD_CVAR(monster, speed_stop) \ + MON_ADD_CVAR(monster, speed_run) \ + MON_ADD_CVAR(monster, speed_walk) + +#ifdef SVQC +SPIDER_SETTINGS(spider) +#endif // SVQC #else #ifdef SVQC -float autocvar_g_monster_spider; -float autocvar_g_monster_spider_stopspeed; -float autocvar_g_monster_spider_attack_leap_delay; -float autocvar_g_monster_spider_attack_stand_damage; -float autocvar_g_monster_spider_attack_stand_delay; -float autocvar_g_monster_spider_attack_fire_time; -float autocvar_g_monster_spider_health; -float autocvar_g_monster_spider_speed_walk; -float autocvar_g_monster_spider_speed_run; -float autocvar_g_monster_spider_attack_type; - const float spider_anim_idle = 0; const float spider_anim_walk = 1; const float spider_anim_attack = 2; @@ -53,7 +58,7 @@ void spider_web_explode() 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) + for(e = findradius(self.origin, rad); e; e = e.chain) if(e != self) if(e.takedamage && e.deadflag == DEAD_NO) if(e.health > 0) { switch(self.realowner.spider_type) { @@ -61,7 +66,7 @@ void spider_web_explode() 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); + Fire_AddDamage(e, self.realowner, 5 * monster_skill, MON_CVAR(spider, attack_web_damagetime), DEATH_MONSTER_SPIDER_FIRE); break; } } @@ -94,10 +99,10 @@ void spider_shootweb(float ptype) } vector fmins = '-4 -4 -4', fmaxs = '4 4 4'; - - W_SetupShot_ProjectileSize(self, fmins, fmaxs, FALSE, 2, snd, CH_WEAPON_A, 0); - - w_shotdir = v_forward; // no TrueAim for grenades please + + monster_makevectors(self.enemy); + + sound(self, CH_SHOTS, snd, VOL_BASE, ATTEN_NORM); entity proj = spawn (); proj.classname = "plasma"; @@ -109,12 +114,12 @@ void spider_shootweb(float ptype) proj.nextthink = time + 5; PROJECTILE_MAKETRIGGER(proj); proj.projectiledeathtype = DEATH_MONSTER_SPIDER_FIRE; - setorigin(proj, w_shotorg); + setorigin(proj, CENTER_OR_VIEWOFS(self)); //proj.glow_size = 50; //proj.glow_color = 45; proj.movetype = MOVETYPE_BOUNCE; - W_SETUPPROJECTILEVELOCITY_UP(proj, g_monster_spider_attack_web); + W_SetupProjectileVelocityEx(proj, v_forward, v_up, MON_CVAR(spider, attack_web_speed), MON_CVAR(spider, attack_web_speed_up), 0, 0, FALSE); proj.touch = spider_web_touch; setsize(proj, fmins, fmaxs); proj.takedamage = DAMAGE_NO; @@ -136,12 +141,8 @@ float spider_attack(float attack_type) switch(attack_type) { case MONSTER_ATTACK_MELEE: - { - monster_melee(self.enemy, autocvar_g_monster_spider_attack_stand_damage, 0.3, DEATH_MONSTER_SPIDER, TRUE); - monsters_setframe((random() > 0.5) ? spider_anim_attack : spider_anim_attack2); - self.attack_finished_single = time + autocvar_g_monster_spider_attack_stand_delay; - - return TRUE; + { + return 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); } case MONSTER_ATTACK_RANGED: { @@ -149,8 +150,7 @@ float spider_attack(float attack_type) return FALSE; monsters_setframe(spider_anim_attack2); - self.attack_finished_single = time + autocvar_g_monster_spider_attack_leap_delay; - monster_makevectors(self.enemy); + self.attack_finished_single = time + MON_CVAR(spider, attack_web_delay); spider_shootweb(self.spider_type); return TRUE; @@ -162,8 +162,6 @@ float spider_attack(float attack_type) void spawnfunc_monster_spider() { - if not(autocvar_g_monster_spider) { remove(self); return; } - self.classname = "monster_spider"; self.monster_spawnfunc = spawnfunc_monster_spider; @@ -180,21 +178,22 @@ float m_spider(float req) { case MR_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); + monster_move(MON_CVAR(spider, speed_run), MON_CVAR(spider, speed_walk), MON_CVAR(spider, speed_stop), spider_anim_walk, spider_anim_walk, spider_anim_idle); return TRUE; } case MR_DEATH: { monsters_setframe(spider_anim_attack); - self.angles += '180 0 0'; + self.angles_x = 180; self.SendFlags |= MSF_ANG; return TRUE; } case MR_SETUP: { - if not(self.health) self.health = autocvar_g_monster_spider_health; - if not(self.spider_type) self.spider_type = autocvar_g_monster_spider_attack_type; - + if not(self.health) self.health = MON_CVAR(spider, health); + if not(self.spider_type) self.spider_type = MON_CVAR(spider, attack_type); + + self.monster_loot = spawnfunc_item_health_medium; self.monster_attackfunc = spider_attack; monsters_setframe(spider_anim_idle); @@ -202,7 +201,14 @@ float m_spider(float req) } case MR_INIT: { - // nothing + precache_model ("models/ice/ice.md3"); + precache_sound ("weapons/electro_fire2.wav"); + precache_sound ("weapons/fireball_fire.wav"); + return TRUE; + } + case MR_CONFIG: + { + MON_CONFIG_SETTINGS(SPIDER_SETTINGS(spider)) return TRUE; } }