]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/common/monsters/monster/wyvern.qc
Merge branch 'master' into Mario/monsters
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / monsters / monster / wyvern.qc
index 0a811cb70b5ee9da3e259c03048e1516fa771703..521d1894609e6ed620546bf85e9198bf583c0743 100644 (file)
@@ -72,9 +72,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 +89,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 +105,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 +130,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 +161,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