From 29d1d127d351f1e6c12fa5b6d4d7e1fdf0e73d1d Mon Sep 17 00:00:00 2001 From: Snowram Date: Sun, 6 Jun 2021 00:14:26 +0200 Subject: [PATCH] Yeti combat anims --- .../abilities/custom/yeti/icespikes.ron | 2 +- .../common/abilities/custom/yeti/strike.ron | 4 +- .../items/npc_weapons/hammer/yeti_hammer.ron | 4 +- voxygen/anim/src/biped_large/alpha.rs | 29 +++ voxygen/anim/src/biped_large/beam.rs | 58 ++++- voxygen/anim/src/biped_large/shockwave.rs | 225 +++++++++++++----- voxygen/anim/src/biped_large/shoot.rs | 43 ++++ voxygen/anim/src/biped_large/wield.rs | 19 ++ voxygen/src/scene/figure/mod.rs | 6 +- 9 files changed, 310 insertions(+), 80 deletions(-) diff --git a/assets/common/abilities/custom/yeti/icespikes.ron b/assets/common/abilities/custom/yeti/icespikes.ron index dc192963b0..3b99b3af93 100644 --- a/assets/common/abilities/custom/yeti/icespikes.ron +++ b/assets/common/abilities/custom/yeti/icespikes.ron @@ -2,7 +2,7 @@ Shockwave( energy_cost: 0, buildup_duration: 0.6, swing_duration: 0.12, - recover_duration: 1.2, + recover_duration: 0.3, damage: 100, poise_damage: 10, knockback: (strength: 25.0, direction: Up), diff --git a/assets/common/abilities/custom/yeti/strike.ron b/assets/common/abilities/custom/yeti/strike.ron index 681f8963d5..1624a3c6e2 100644 --- a/assets/common/abilities/custom/yeti/strike.ron +++ b/assets/common/abilities/custom/yeti/strike.ron @@ -1,7 +1,7 @@ BasicMelee( energy_cost: 0, - buildup_duration: 0.8, - swing_duration: 0.2, + buildup_duration: 0.6, + swing_duration: 0.1, recover_duration: 0.5, base_damage: 100, base_poise_damage: 50, diff --git a/assets/common/items/npc_weapons/hammer/yeti_hammer.ron b/assets/common/items/npc_weapons/hammer/yeti_hammer.ron index e4aa790a5a..602926451b 100644 --- a/assets/common/items/npc_weapons/hammer/yeti_hammer.ron +++ b/assets/common/items/npc_weapons/hammer/yeti_hammer.ron @@ -2,10 +2,10 @@ ItemDef( name: "Yeti Hammer", description: "Placeholder", kind: Tool(( - kind: Hammer, + kind: Natural, hands: Two, stats: Direct(( - equip_time_secs: 0.01, + equip_time_secs: 0.5, power: 1.0, poise_strength: 1.0, speed: 1.0, diff --git a/voxygen/anim/src/biped_large/alpha.rs b/voxygen/anim/src/biped_large/alpha.rs index b752566a0c..1e52049cc7 100644 --- a/voxygen/anim/src/biped_large/alpha.rs +++ b/voxygen/anim/src/biped_large/alpha.rs @@ -297,6 +297,35 @@ impl Animation for AlphaAnimation { next.head.orientation = Quaternion::rotation_x(move1 * -0.6 + move2 * 0.4) }, + "Yeti" => { + next.control_l.position = Vec3::new(-1.0, 2.0, 12.0 + move2 * -10.0); + next.control_r.position = Vec3::new(1.0, 2.0, -2.0); + + next.control.position = Vec3::new( + 4.0 + move1 * -12.0 + move2 * 20.0, + (s_a.grip.0 / 1.0) + move1 * -3.0 + move2 * 5.0, + (-s_a.grip.0 / 0.8) + move1 * -2.0 + move2 * 8.0, + ); + next.head.orientation = Quaternion::rotation_x(move1 * -0.25) + * Quaternion::rotation_z(move1 * -0.2 + move2 * 0.6); + next.upper_torso.orientation = + Quaternion::rotation_z(move1 * 0.2 + move2 * -0.4); + next.lower_torso.orientation = + Quaternion::rotation_z(move1 * -0.2 + move2 * 0.2); + + next.control_l.orientation = + Quaternion::rotation_x(PI / 2.0 + move2 * 0.8) + * Quaternion::rotation_y(-0.0); + next.control_r.orientation = + Quaternion::rotation_x(PI / 2.0 + 0.2 + move2 * 0.8) + * Quaternion::rotation_y(0.0) + * Quaternion::rotation_z(0.0); + + next.control.orientation = + Quaternion::rotation_x(-1.0 + move1 * -0.5 + move2 * -0.3) + * Quaternion::rotation_y(-1.8 + move1 * -0.8 + move2 * 3.0) + * Quaternion::rotation_z(move1 * -0.8 + move2 * -0.8); + }, _ => {}, } } diff --git a/voxygen/anim/src/biped_large/beam.rs b/voxygen/anim/src/biped_large/beam.rs index 9bf1828295..62f8e01481 100644 --- a/voxygen/anim/src/biped_large/beam.rs +++ b/voxygen/anim/src/biped_large/beam.rs @@ -73,17 +73,12 @@ impl Animation for BeamAnimation { next.hand_l.orientation = Quaternion::rotation_x(0.0); next.hand_r.orientation = Quaternion::rotation_x(0.0); - let (move1base, move2shake, _move2base, move3) = match stage_section { - Some(StageSection::Buildup) => ( - (anim_time.powf(0.25)).min(1.0), - (anim_time * 15.0 + PI).sin(), - (anim_time * 10.0 + PI).sin(), - 0.0, - ), + let (move1base, move2shake, move2base, move3) = match stage_section { + Some(StageSection::Buildup) => ((anim_time.powf(0.25)).min(1.0), 0.0, 0.0, 0.0), Some(StageSection::Cast) => ( 1.0, (anim_time * 15.0 + PI).sin(), - anim_time.powf(0.25), + (anim_time.powf(0.1)).min(1.0), 0.0, ), Some(StageSection::Recover) => (1.0, 1.0, 1.0, anim_time), @@ -91,6 +86,7 @@ impl Animation for BeamAnimation { }; let pullback = 1.0 - move3; let move1 = move1base * pullback; + let move2 = move2base * pullback; match active_tool_kind { Some(ToolKind::Sceptre) | Some(ToolKind::Staff) => { next.control_l.position = Vec3::new(-1.0, 3.0, 12.0); @@ -128,8 +124,6 @@ impl Animation for BeamAnimation { ); next.shoulder_r.orientation = Quaternion::rotation_x(move1 * 0.2 + 0.3 + 0.6 * speednorm + (footrotl * -0.2)); - next.torso.orientation = Quaternion::rotation_x(move1 * -0.1); - next.torso.position = Vec3::new(0.0, 0.0, move1 * 1.0); }, Some(ToolKind::Natural) => { if let Some(AbilitySpec::Custom(spec)) = active_tool_spec { @@ -177,6 +171,50 @@ impl Animation for BeamAnimation { next.shoulder_r.orientation = Quaternion::rotation_z(move1 * 0.3); }; }, + "Yeti" => { + next.second.scale = Vec3::one() * 0.0; + + next.head.orientation = Quaternion::rotation_x( + move1 * 0.5 + move2 * -0.5 + move2shake * -0.02, + ); + next.jaw.position = Vec3::new(0.0, s_a.jaw.0, s_a.jaw.1); + next.jaw.orientation = + Quaternion::rotation_x(move2 * -0.5 + move2shake * -0.1); + next.control_l.position = Vec3::new(-0.5, 4.0, 1.0); + next.control_r.position = Vec3::new(-0.5, 4.0, 1.0); + next.control_l.orientation = Quaternion::rotation_x(1.57); + next.control_r.orientation = Quaternion::rotation_x(1.57); + + next.weapon_l.position = Vec3::new(-12.0, -1.0, -15.0); + next.weapon_r.position = Vec3::new(12.0, -1.0, -15.0); + + next.weapon_l.orientation = Quaternion::rotation_x(-1.57 - 0.1); + next.weapon_r.orientation = Quaternion::rotation_x(-1.57 - 0.1); + + next.arm_control_r.orientation = + Quaternion::rotation_x(move1 * 1.1 + move2 * -1.6) + * Quaternion::rotation_y(move1 * 1.4 + move2 * -1.8); + + next.shoulder_l.orientation = + Quaternion::rotation_x(move1 * 1.4 + move2 * -1.8); + + next.shoulder_r.orientation = + Quaternion::rotation_x(move1 * 1.4 + move2 * -1.8); + + next.upper_torso.position = Vec3::new( + 0.0, + s_a.upper_torso.0, + s_a.upper_torso.1 + move1 * -1.9 + move2 * 1.2, + ); + next.upper_torso.orientation = Quaternion::rotation_x( + move1 * 0.8 + move2 * -1.1 + move2shake * -0.02, + ); + next.lower_torso.position = + Vec3::new(0.0, s_a.lower_torso.0, s_a.lower_torso.1); + next.lower_torso.orientation = Quaternion::rotation_x( + move1 * -0.8 + move2 * 1.1 + move2shake * 0.02, + ); + }, _ => {}, } } diff --git a/voxygen/anim/src/biped_large/shockwave.rs b/voxygen/anim/src/biped_large/shockwave.rs index e2ba47be04..81d373014a 100644 --- a/voxygen/anim/src/biped_large/shockwave.rs +++ b/voxygen/anim/src/biped_large/shockwave.rs @@ -2,18 +2,22 @@ use super::{ super::{vek::*, Animation}, BipedLargeSkeleton, SkeletonAttr, }; -use common::{comp::item::ToolKind, states::utils::StageSection}; +use common::{ + comp::item::{AbilitySpec, ToolKind}, + states::utils::StageSection, +}; pub struct ShockwaveAnimation; +type ShockwaveAnimationDependency<'a> = ( + (Option, Option<&'a AbilitySpec>), + (Option, Option<&'a AbilitySpec>), + f32, + f32, + Option, +); impl Animation for ShockwaveAnimation { - type Dependency<'a> = ( - Option, - Option, - f32, - f32, - Option, - ); + type Dependency<'a> = ShockwaveAnimationDependency<'a>; type Skeleton = BipedLargeSkeleton; #[cfg(feature = "use-dyn-lib")] @@ -23,7 +27,13 @@ impl Animation for ShockwaveAnimation { #[allow(clippy::single_match)] // TODO: Pending review in #587 fn update_skeleton_inner<'a>( skeleton: &Self::Skeleton, - (_active_tool_kind, _second_tool_kind, _global_time, velocity, stage_section): Self::Dependency<'a>, + ( + (active_tool_kind, active_tool_spec), + _second_tool_kind, + _global_time, + velocity, + stage_section, + ): Self::Dependency<'a>, anim_time: f32, rate: &mut f32, s_a: &SkeletonAttr, @@ -31,71 +41,162 @@ impl Animation for ShockwaveAnimation { *rate = 1.0; let mut next = (*skeleton).clone(); - let (movement1, movement2, movement3) = match stage_section { - Some(StageSection::Buildup) => (anim_time, 0.0, 0.0), - Some(StageSection::Swing) => (1.0, anim_time, 0.0), - Some(StageSection::Recover) => (1.0, 1.0, anim_time), - _ => (0.0, 0.0, 0.0), + let (move1, move1pow, move2, move3) = match stage_section { + Some(StageSection::Buildup) => (anim_time, anim_time.powf(0.25) as f32, 0.0, 0.0), + Some(StageSection::Swing) => (1.0, 1.0, anim_time, 0.0), + Some(StageSection::Recover) => (1.0, 1.0, 1.0, anim_time), + _ => (0.0, 0.0, 0.0, 0.0), }; - next.head.position = Vec3::new(0.0, s_a.head.0, s_a.head.1); + let pullback = 1.0 - move3; + let move1pow = move1pow * pullback; + let move2 = move2 * pullback; - next.hand_l.position = Vec3::new(s_a.sthl.0, s_a.sthl.1, s_a.sthl.2); - next.hand_l.orientation = - Quaternion::rotation_x(s_a.sthl.3) * Quaternion::rotation_y(s_a.sthl.4); - next.hand_r.position = Vec3::new(s_a.sthr.0, s_a.sthr.1, s_a.sthr.2); - next.hand_r.orientation = - Quaternion::rotation_x(s_a.sthr.3) * Quaternion::rotation_y(s_a.sthr.4); next.main.position = Vec3::new(0.0, 0.0, 0.0); - next.main.orientation = Quaternion::rotation_y(0.0); + next.main.orientation = Quaternion::rotation_x(0.0); - next.control.position = Vec3::new(s_a.stc.0, s_a.stc.1, s_a.stc.2); - next.control.orientation = - Quaternion::rotation_x(s_a.stc.3) * Quaternion::rotation_y(s_a.stc.4); + next.hand_l.position = Vec3::new(0.0, 0.0, s_a.grip.0); + next.hand_r.position = Vec3::new(0.0, 0.0, s_a.grip.0); - let twist = movement1 * 0.8; + next.hand_l.orientation = Quaternion::rotation_x(0.0); + next.hand_r.orientation = Quaternion::rotation_x(0.0); - next.control.position = Vec3::new( - s_a.stc.0 + movement1 * 5.0 + movement3 * -5.0, - s_a.stc.1 + movement1 * 13.0 + movement3 * -3.0, - s_a.stc.2 + movement1 * 10.0 + movement2 * -2.0 + movement3 * -8.0, - ); - next.control.orientation = Quaternion::rotation_x( - s_a.stc.3 + movement1 * 0.8 + movement2 * 0.3 + movement3 * -1.1, - ) * Quaternion::rotation_y( - s_a.stc.4 + movement1 * -0.15 + movement2 * 0.3 + movement3 * -0.45, - ) * Quaternion::rotation_z(movement1 * 0.8 + movement2 * -0.8); + match active_tool_kind { + Some(ToolKind::Sceptre) => { + next.head.position = Vec3::new(0.0, s_a.head.0, s_a.head.1); - next.head.orientation = Quaternion::rotation_x(movement1 * 0.4 + movement3 * -0.4) - * Quaternion::rotation_z(twist * 0.2 + movement2 * -0.8 + movement3 * 0.6); + next.hand_l.position = Vec3::new(s_a.sthl.0, s_a.sthl.1, s_a.sthl.2); + next.hand_l.orientation = + Quaternion::rotation_x(s_a.sthl.3) * Quaternion::rotation_y(s_a.sthl.4); + next.hand_r.position = Vec3::new(s_a.sthr.0, s_a.sthr.1, s_a.sthr.2); + next.hand_r.orientation = + Quaternion::rotation_x(s_a.sthr.3) * Quaternion::rotation_y(s_a.sthr.4); + next.main.position = Vec3::new(0.0, 0.0, 0.0); + next.main.orientation = Quaternion::rotation_y(0.0); - next.upper_torso.position = Vec3::new( - 0.0, - s_a.upper_torso.0, - s_a.upper_torso.1 + movement1 * 2.0 + movement2 * -4.0 + movement3 * 2.0, - ); - next.upper_torso.orientation = Quaternion::rotation_x(movement2 * -0.8 + movement3 * 0.8) - * Quaternion::rotation_z(twist * -0.2 + movement2 * -0.1 + movement3 * 0.3); + next.control.position = Vec3::new(s_a.stc.0, s_a.stc.1, s_a.stc.2); + next.control.orientation = + Quaternion::rotation_x(s_a.stc.3) * Quaternion::rotation_y(s_a.stc.4); - next.lower_torso.orientation = Quaternion::rotation_x(movement2 * 0.3 + movement3 * -0.3) - * Quaternion::rotation_z(twist + movement2 * -0.8); + let twist = move1 * 0.8; - if velocity < 0.5 { - next.foot_l.position = Vec3::new( - -s_a.foot.0, - s_a.foot.1 + movement1 * -7.0 + movement2 * 7.0, - s_a.foot.2, - ); - next.foot_l.orientation = Quaternion::rotation_x(movement1 * -0.8 + movement2 * 0.8) - * Quaternion::rotation_z(movement1 * 0.3 + movement2 * -0.3); + next.control.position = Vec3::new( + s_a.stc.0 + move1 * 5.0 + move3 * -5.0, + s_a.stc.1 + move1 * 13.0 + move3 * -3.0, + s_a.stc.2 + move1 * 10.0 + move2 * -2.0 + move3 * -8.0, + ); + next.control.orientation = + Quaternion::rotation_x(s_a.stc.3 + move1 * 0.8 + move2 * 0.3 + move3 * -1.1) + * Quaternion::rotation_y( + s_a.stc.4 + move1 * -0.15 + move2 * 0.3 + move3 * -0.45, + ) + * Quaternion::rotation_z(move1 * 0.8 + move2 * -0.8); - next.foot_r.position = Vec3::new( - s_a.foot.0, - s_a.foot.1 + movement1 * 5.0 + movement2 * -5.0, - s_a.foot.2, - ); - next.foot_r.orientation = Quaternion::rotation_y(movement1 * -0.3 + movement2 * 0.3) - * Quaternion::rotation_z(movement1 * 0.4 + movement2 * -0.4); + next.head.orientation = Quaternion::rotation_x(move1 * 0.4 + move3 * -0.4) + * Quaternion::rotation_z(twist * 0.2 + move2 * -0.8 + move3 * 0.6); + + next.upper_torso.position = Vec3::new( + 0.0, + s_a.upper_torso.0, + s_a.upper_torso.1 + move1 * 2.0 + move2 * -4.0 + move3 * 2.0, + ); + next.upper_torso.orientation = Quaternion::rotation_x(move2 * -0.8 + move3 * 0.8) + * Quaternion::rotation_z(twist * -0.2 + move2 * -0.1 + move3 * 0.3); + + next.lower_torso.orientation = Quaternion::rotation_x(move2 * 0.3 + move3 * -0.3) + * Quaternion::rotation_z(twist + move2 * -0.8); + + if velocity < 0.5 { + next.foot_l.position = Vec3::new( + -s_a.foot.0, + s_a.foot.1 + move1 * -7.0 + move2 * 7.0, + s_a.foot.2, + ); + next.foot_l.orientation = Quaternion::rotation_x(move1 * -0.8 + move2 * 0.8) + * Quaternion::rotation_z(move1 * 0.3 + move2 * -0.3); + + next.foot_r.position = Vec3::new( + s_a.foot.0, + s_a.foot.1 + move1 * 5.0 + move2 * -5.0, + s_a.foot.2, + ); + next.foot_r.orientation = Quaternion::rotation_y(move1 * -0.3 + move2 * 0.3) + * Quaternion::rotation_z(move1 * 0.4 + move2 * -0.4); + } + }, + Some(ToolKind::Natural) => { + if let Some(AbilitySpec::Custom(spec)) = active_tool_spec { + match spec.as_str() { + "Yeti" => { + next.second.scale = Vec3::one() * 0.0; + + next.head.orientation = + Quaternion::rotation_x(move1pow * 0.8 + move2 * -1.2); + next.jaw.position = Vec3::new(0.0, s_a.jaw.0, s_a.jaw.1); + next.jaw.orientation = Quaternion::rotation_x(move2 * -0.3); + next.control_l.position = Vec3::new(-0.5, 4.0, 1.0); + next.control_r.position = Vec3::new(-0.5, 4.0, 1.0); + next.control_l.orientation = Quaternion::rotation_x(1.57); + next.control_r.orientation = Quaternion::rotation_x(1.57); + next.weapon_l.position = + Vec3::new(-12.0 + (move1pow * 20.0).min(10.0), -1.0, -15.0); + next.weapon_r.position = + Vec3::new(12.0 + (move1pow * -20.0).max(-10.0), -1.0, -15.0); + + next.weapon_l.orientation = Quaternion::rotation_x(-1.57 - 0.1) + * Quaternion::rotation_z(move1pow * -1.0); + next.weapon_r.orientation = Quaternion::rotation_x(-1.57 - 0.1) + * Quaternion::rotation_z(move1pow * 1.0); + + next.shoulder_l.orientation = + Quaternion::rotation_x(-0.3 + move1pow * 2.8 + move2 * -2.8); + + next.shoulder_r.orientation = + Quaternion::rotation_x(-0.3 + move1pow * 2.8 + move2 * -2.8); + + next.control.orientation = + Quaternion::rotation_x(move1pow * 2.5 + move2 * -2.0); + + let twist = move1 * 0.6 + move3 * -0.6; + next.upper_torso.position = + Vec3::new(0.0, s_a.upper_torso.0, s_a.upper_torso.1); + next.upper_torso.orientation = + Quaternion::rotation_x(move1pow * 0.8 + move2 * -1.1) + * Quaternion::rotation_z( + twist * -0.2 + move1 * -0.1 + move2 * 0.3, + ); + + next.lower_torso.orientation = + Quaternion::rotation_x(move1pow * -0.8 + move2 * 1.1) + * Quaternion::rotation_z(twist); + + next.foot_l.position = Vec3::new( + -s_a.foot.0, + s_a.foot.1 + move1pow * -7.0 + move2 * 7.0, + s_a.foot.2, + ); + next.foot_l.orientation = + Quaternion::rotation_x(move1pow * -0.8 + move2 * 0.8) + * Quaternion::rotation_z(move1pow * 0.3 + move2 * -0.3); + + next.foot_r.position = Vec3::new( + s_a.foot.0, + s_a.foot.1 + move1pow * 5.0 + move2 * -5.0, + s_a.foot.2, + ); + next.foot_r.orientation = + Quaternion::rotation_y(move1pow * -0.3 + move2 * 0.3) + * Quaternion::rotation_z(move1pow * 0.4 + move2 * -0.4); + + next.main.orientation = + Quaternion::rotation_y(move1 * 0.4 + move2 * -0.6) + * Quaternion::rotation_x(move2 * -0.4); + }, + _ => {}, + } + } + }, + _ => {}, } next } diff --git a/voxygen/anim/src/biped_large/shoot.rs b/voxygen/anim/src/biped_large/shoot.rs index 42d9717950..206d2ad2bd 100644 --- a/voxygen/anim/src/biped_large/shoot.rs +++ b/voxygen/anim/src/biped_large/shoot.rs @@ -219,6 +219,49 @@ impl Animation for ShootAnimation { * Quaternion::rotation_z(move1 * -0.5); next.head.orientation = Quaternion::rotation_x(move1 * -0.3); }, + "Yeti" => { + let (move1, move2, move3) = match stage_section { + Some(StageSection::Buildup) => (anim_time.powf(0.25), 0.0, 0.0), + Some(StageSection::Swing) => (1.0, anim_time, 0.0), + Some(StageSection::Recover) => (1.0, 1.0, anim_time.powi(4)), + _ => (0.0, 0.0, 0.0), + }; + next.second.scale = Vec3::one() * 0.0; + + next.head.orientation = Quaternion::rotation_x(move1 * 0.4); + next.jaw.position = Vec3::new(0.0, s_a.jaw.0, s_a.jaw.1); + next.jaw.orientation = Quaternion::rotation_x(move2 * -0.3); + next.control_l.position = Vec3::new(-0.5, 4.0, 1.0); + next.control_r.position = Vec3::new(-0.5, 4.0, 1.0); + next.control_l.orientation = Quaternion::rotation_x(1.57); + next.control_r.orientation = Quaternion::rotation_x(1.57); + next.weapon_l.position = Vec3::new(-12.0, -1.0, -15.0); + next.weapon_r.position = Vec3::new(12.0, -1.0, -15.0); + + next.weapon_l.orientation = Quaternion::rotation_x(-1.57 - 0.1); + next.weapon_r.orientation = Quaternion::rotation_x(-1.57 - 0.1); + + let twist = move1 * 0.8 + move3 * -0.8; + next.upper_torso.position = + Vec3::new(0.0, s_a.upper_torso.0, s_a.upper_torso.1); + next.upper_torso.orientation = + Quaternion::rotation_x(move1 * 0.8 + move2 * -1.1) + * Quaternion::rotation_z( + twist * -0.2 + move1 * -0.1 + move2 * 0.3, + ); + + next.lower_torso.orientation = + Quaternion::rotation_x(move1 * -0.8 + move2 * 1.1) + * Quaternion::rotation_z(twist); + + next.arm_control_r.orientation = + Quaternion::rotation_x(move1 * PI / 2.0) + * Quaternion::rotation_y(move1 * -PI / 2.0 + move2 * 2.5); + //* Quaternion::rotation_y(move1 * -PI/2.0) + //* Quaternion::rotation_z(move1 * -PI/2.0); + next.arm_control_r.position = + Vec3::new(0.0, move1 * 10.0 + move2 * -10.0, 0.0); + }, _ => {}, } } diff --git a/voxygen/anim/src/biped_large/wield.rs b/voxygen/anim/src/biped_large/wield.rs index a619e49791..282be8dfb3 100644 --- a/voxygen/anim/src/biped_large/wield.rs +++ b/voxygen/anim/src/biped_large/wield.rs @@ -450,6 +450,25 @@ impl Animation for WieldAnimation { next.shoulder_r.orientation = Quaternion::rotation_x(-0.3); }, + "Yeti" => { + next.second.scale = Vec3::one() * 0.0; + next.control_l.position = Vec3::new(-0.5, 4.0, 1.0); + next.control_r.position = Vec3::new(-0.5, 4.0, 1.0); + next.weapon_l.position = Vec3::new(-12.0, -1.0, -15.0); + next.weapon_r.position = Vec3::new(12.0, -1.0, -15.0); + + next.weapon_l.orientation = Quaternion::rotation_x(-1.57 - 0.1); + next.weapon_r.orientation = Quaternion::rotation_x(-1.57 - 0.1); + + next.control_l.orientation = Quaternion::rotation_x(1.57); + next.control_r.orientation = Quaternion::rotation_x(1.57); + + next.control.orientation = + Quaternion::rotation_x(0.0) * Quaternion::rotation_y(0.0); + next.shoulder_l.orientation = Quaternion::rotation_x(-0.3); + + next.shoulder_r.orientation = Quaternion::rotation_x(-0.3); + }, _ => {}, } } diff --git a/voxygen/src/scene/figure/mod.rs b/voxygen/src/scene/figure/mod.rs index 177ba476c6..167bbf2571 100644 --- a/voxygen/src/scene/figure/mod.rs +++ b/voxygen/src/scene/figure/mod.rs @@ -4161,8 +4161,8 @@ impl FigureMgr { anim::biped_large::ShockwaveAnimation::update_skeleton( &target_base, ( - active_tool_kind, - second_tool_kind, + (active_tool_kind, active_tool_spec), + (second_tool_kind, second_tool_spec), time, rel_vel.magnitude(), Some(s.stage_section), @@ -4775,7 +4775,7 @@ impl FigureMgr { .join() // Don't render dead entities .filter(|(_, _, _, health, _, _)| health.map_or(true, |h| !h.is_dead)) - // Don't render player + // Don't render player .filter(|(entity, _, _, _, _, _)| *entity != player_entity) { if let Some((bound, model, col_lights)) = self.get_model_for_render(