+
+void M_Wyvern_Attack_Fireball_Explode();
+void M_Wyvern_Attack_Fireball_Touch();
+
+METHOD(WyvernAttack, wr_think, void(WyvernAttack thiswep, entity actor, bool fire1, bool fire2)) {
+ if (fire1)
+ if (time > actor.attack_finished_single || weapon_prepareattack(thiswep, actor, false, 1.2)) {
+ if (IS_PLAYER(actor)) W_SetupShot_Dir(actor, v_forward, false, 0, W_Sound("electro_fire"), CH_WEAPON_B, 0);
+ if (IS_MONSTER(actor)) {
+ actor.attack_finished_single = time + 1.2;
+ actor.anim_finished = time + 1.2;
+ monster_makevectors(actor.enemy);
+ }
+
+ entity missile = spawn();
+ missile.owner = missile.realowner = actor;
+ missile.solid = SOLID_TRIGGER;
+ missile.movetype = MOVETYPE_FLYMISSILE;
+ missile.projectiledeathtype = DEATH_MONSTER_WYVERN.m_id;
+ setsize(missile, '-6 -6 -6', '6 6 6');
+ setorigin(missile, actor.origin + actor.view_ofs + v_forward * 14);
+ missile.flags = FL_PROJECTILE;
+ missile.velocity = w_shotdir * (autocvar_g_monster_wyvern_attack_fireball_speed);
+ missile.avelocity = '300 300 300';
+ missile.nextthink = time + 5;
+ missile.think = M_Wyvern_Attack_Fireball_Explode;
+ missile.touch = M_Wyvern_Attack_Fireball_Touch;
+ CSQCProjectile(missile, true, PROJECTILE_FIREMINE, true);
+
+ weapon_thinkf(actor, WFRAME_FIRE1, 0, w_ready);
+ }
+}
+
+METHOD(WyvernAttack, wr_checkammo1, bool(WyvernAttack thiswep)) {
+ return true;
+}
+
+float autocvar_g_monster_wyvern_health;
+float autocvar_g_monster_wyvern_damageforcescale = 0.6;