X-Git-Url: https://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fcommon%2Fmonsters%2Fmonster%2Fwyvern.qc;h=69d446f53ef52d87250070ebd686b8a2b4807762;hp=8a4ad160560fa87583ab87a6dd861c7c0f274d54;hb=f70b6498d323bf8ee9bbdc9fe413ac1fbf94ccd8;hpb=1729cb8b0a6953056407faa84b6d4ad9e05759b4 diff --git a/qcsrc/common/monsters/monster/wyvern.qc b/qcsrc/common/monsters/monster/wyvern.qc index 8a4ad16056..69d446f53e 100644 --- a/qcsrc/common/monsters/monster/wyvern.qc +++ b/qcsrc/common/monsters/monster/wyvern.qc @@ -19,11 +19,7 @@ METHOD(WyvernAttack, wr_think, void(WyvernAttack thiswep, entity actor, .entity if (fire & 1) if (time > actor.attack_finished_single[0] || weapon_prepareattack(thiswep, actor, weaponentity, false, 1.2)) { if (IS_PLAYER(actor)) W_SetupShot_Dir(actor, weaponentity, v_forward, false, 0, SND_WyvernAttack_FIRE, CH_WEAPON_B, 0, DEATH_MONSTER_WYVERN.m_id); - if (IS_MONSTER(actor)) { - actor.attack_finished_single[0] = time + 1.2; - actor.anim_finished = time + 1.2; - monster_makevectors(actor, actor.enemy); - } + if (IS_MONSTER(actor)) monster_makevectors(actor, actor.enemy); entity missile = spawn(); missile.owner = missile.realowner = actor; @@ -72,9 +68,9 @@ void M_Wyvern_Attack_Fireball_Explode(entity this) entity own = this.realowner; RadiusDamage(this, own, autocvar_g_monster_wyvern_attack_fireball_damage, autocvar_g_monster_wyvern_attack_fireball_edgedamage, autocvar_g_monster_wyvern_attack_fireball_force, - NULL, NULL, autocvar_g_monster_wyvern_attack_fireball_radius, this.projectiledeathtype, DMG_NOWEP, NULL); + own, NULL, autocvar_g_monster_wyvern_attack_fireball_radius, this.projectiledeathtype, DMG_NOWEP, NULL); - FOREACH_ENTITY_RADIUS(this.origin, autocvar_g_monster_wyvern_attack_fireball_radius, it.takedamage == DAMAGE_AIM, + FOREACH_ENTITY_RADIUS(this.origin, autocvar_g_monster_wyvern_attack_fireball_radius, it.takedamage == DAMAGE_AIM && it != own, { Fire_AddDamage(it, own, 5 * MONSTER_SKILLMOD(own), autocvar_g_monster_wyvern_attack_fireball_damagetime, this.projectiledeathtype); }); @@ -89,6 +85,15 @@ void M_Wyvern_Attack_Fireball_Touch(entity this, entity toucher) M_Wyvern_Attack_Fireball_Explode(this); } +void M_Wyvern_Attack_Fireball(entity this) +{ + w_shotdir = normalize((this.enemy.origin + '0 0 10') - this.origin); + Weapon wep = WEP_WYVERN_ATTACK; + // TODO + .entity weaponentity = weaponentities[0]; + wep.wr_think(wep, this, weaponentity, 1); +} + bool M_Wyvern_Attack(int attack_type, entity actor, entity targ, .entity weaponentity) { switch(attack_type) @@ -96,9 +101,14 @@ bool M_Wyvern_Attack(int attack_type, entity actor, entity targ, .entity weapone case MONSTER_ATTACK_MELEE: case MONSTER_ATTACK_RANGED: { - w_shotdir = normalize((actor.enemy.origin + '0 0 10') - actor.origin); - Weapon wep = WEP_WYVERN_ATTACK; - wep.wr_think(wep, actor, weaponentity, 1); + Monster_Delay(actor, 0, 1, M_Wyvern_Attack_Fireball); + //actor.anim_finished = time + 1.2; + setanim(actor, actor.anim_shoot, false, true, true); + if(actor.animstate_endtime > time) + actor.anim_finished = actor.animstate_endtime; + else + actor.anim_finished = time + 1.2; + actor.attack_finished_single[0] = actor.anim_finished + 0.2; return true; } } @@ -116,6 +126,14 @@ METHOD(Wyvern, mr_think, bool(Wyvern this, entity actor)) return true; } +METHOD(Wyvern, mr_deadthink, bool(Wyvern this, entity actor)) +{ + TC(Wyvern, this); + if(IS_ONGROUND(actor)) + setanim(actor, actor.anim_die2, true, false, false); + return true; +} + METHOD(Wyvern, mr_pain, float(Wyvern this, entity actor, float damage_take, entity attacker, float deathtype)) { TC(Wyvern, this); @@ -139,12 +157,15 @@ METHOD(Wyvern, mr_anim, bool(Wyvern this, entity actor)) { TC(Wyvern, this); vector none = '0 0 0'; - actor.anim_die1 = animfixfps(actor, '4 1 0.5', none); // 2 seconds - actor.anim_walk = animfixfps(actor, '1 1 1', none); actor.anim_idle = animfixfps(actor, '0 1 1', none); + actor.anim_walk = animfixfps(actor, '1 1 1', none); + actor.anim_run = animfixfps(actor, '2 1 1', none); actor.anim_pain1 = animfixfps(actor, '3 1 2', none); // 0.5 seconds - actor.anim_shoot = animfixfps(actor, '2 1 5', none); // analyze models and set framerate - actor.anim_run = animfixfps(actor, '1 1 1', none); + actor.anim_pain2 = animfixfps(actor, '4 1 2', none); // 0.5 seconds + actor.anim_melee = animfixfps(actor, '5 1 5', none); // analyze models and set framerate + actor.anim_shoot = animfixfps(actor, '6 1 5', none); // analyze models and set framerate + actor.anim_die1 = animfixfps(actor, '7 1 0.5', none); // 2 seconds + actor.anim_die2 = animfixfps(actor, '8 1 0.5', none); // 2 seconds return true; } #endif