diff --git a/assets/common/abilities/axe/lacerate.ron b/assets/common/abilities/axe/lacerate.ron index b4732b4a2f..47b603ec00 100644 --- a/assets/common/abilities/axe/lacerate.ron +++ b/assets/common/abilities/axe/lacerate.ron @@ -1,22 +1,23 @@ -ComboMelee2( - strikes: [ - ( - melee_constructor: ( - kind: Slash( - damage: 4, - poise: 5, - knockback: 0, - energy_regen: 5, - ), - range: 3.0, - angle: 45.0, - ), - buildup_duration: 0.15, - swing_duration: 0.05, - hit_timing: 0.5, - recover_duration: 0.1, - ori_modifier: 0.6, +FinisherMelee( + energy_cost: 0, + buildup_duration: 0.4, + swing_duration: 0.2, + recover_duration: 0.5, + melee_constructor: ( + kind: Slash( + damage: 50, + poise: 20, + knockback: 0, + energy_regen: 0, ), - ], - energy_cost_per_strike: 0, + range: 3.0, + angle: 45.0, + damage_effect: Some(Buff(( + kind: Bleeding, + dur_secs: 15.0, + strength: DamageFraction(0.2), + chance: 1.0, + ))), + ), + minimum_combo: 30, ) \ No newline at end of file diff --git a/voxygen/anim/src/character/combomelee.rs b/voxygen/anim/src/character/combomelee.rs index 11ee1d584b..ef4b04b224 100644 --- a/voxygen/anim/src/character/combomelee.rs +++ b/voxygen/anim/src/character/combomelee.rs @@ -992,14 +992,14 @@ impl Animation for ComboAnimation { next.torso.orientation.rotate_z(move2_raw * -TAU); }, Some("common.abilities.axe.rising_tide") => { - let (move1, move2_raw) = match stage_section { + let (move1, move2) = match stage_section { Some(StageSection::Buildup) => (anim_time, 0.0), Some(StageSection::Action) => (1.0, anim_time), Some(StageSection::Recover) => (1.0, 1.0), _ => (0.0, 0.0), }; let move1 = move1 * multi_strike_pullback; - let move2 = move2_raw * multi_strike_pullback; + let move2 = move2 * multi_strike_pullback; next.hand_l.position = Vec3::new(s_a.ahl.0, s_a.ahl.1, s_a.ahl.2); next.hand_l.orientation = @@ -1030,14 +1030,14 @@ impl Animation for ComboAnimation { next.control.orientation.rotate_z(move2 * -1.0); }, Some("common.abilities.axe.rake") => { - let (move1, move2_raw) = match stage_section { + let (move1, move2) = match stage_section { Some(StageSection::Buildup) => (anim_time, 0.0), Some(StageSection::Action) => (1.0, anim_time), Some(StageSection::Recover) => (1.0, 1.0), _ => (0.0, 0.0), }; let move1 = move1 * multi_strike_pullback; - let move2 = move2_raw * multi_strike_pullback; + let move2 = move2 * multi_strike_pullback; next.hand_l.position = Vec3::new(s_a.ahl.0, s_a.ahl.1, s_a.ahl.2); next.hand_l.orientation = @@ -1062,14 +1062,14 @@ impl Animation for ComboAnimation { next.control.position += Vec3::new(move2 * -6.0, move2 * -20.0, move2 * -4.0); }, Some("common.abilities.axe.fracture") => { - let (move1, move2_raw) = match stage_section { + let (move1, move2) = match stage_section { Some(StageSection::Buildup) => (anim_time, 0.0), Some(StageSection::Action) => (1.0, anim_time), Some(StageSection::Recover) => (1.0, 1.0), _ => (0.0, 0.0), }; let move1 = move1 * multi_strike_pullback; - let move2 = move2_raw * multi_strike_pullback; + let move2 = move2 * multi_strike_pullback; next.hand_l.position = Vec3::new(s_a.ahl.0, s_a.ahl.1, s_a.ahl.2); next.hand_l.orientation = diff --git a/voxygen/anim/src/character/finishermelee.rs b/voxygen/anim/src/character/finishermelee.rs index 561042f846..30d4642ee2 100644 --- a/voxygen/anim/src/character/finishermelee.rs +++ b/voxygen/anim/src/character/finishermelee.rs @@ -218,6 +218,43 @@ impl Animation for FinisherMeleeAnimation { next.control.orientation.rotate_z(move2 * -1.0); next.torso.orientation.rotate_z(move2_raw * -4.0 * PI); }, + Some("common.abilities.axe.lacerate") => { + let (move1, move2, move3) = match stage_section { + Some(StageSection::Buildup) => (anim_time, 0.0, 0.0), + Some(StageSection::Action) => (1.0, anim_time, 0.0), + Some(StageSection::Recover) => (1.0, 1.0, anim_time), + _ => (0.0, 0.0, 0.0), + }; + let pullback = 1.0 - move3; + let move1 = move1 * pullback; + let move2_reset = ((move2 - 0.5).abs() - 0.5).abs() * 2.0; + let move2 = move2 * pullback; + + next.hand_l.position = Vec3::new(s_a.ahl.0, s_a.ahl.1, s_a.ahl.2); + next.hand_l.orientation = + Quaternion::rotation_x(s_a.ahl.3) * Quaternion::rotation_y(s_a.ahl.4); + next.hand_r.position = Vec3::new(s_a.ahr.0, s_a.ahr.1, s_a.ahr.2); + next.hand_r.orientation = + Quaternion::rotation_x(s_a.ahr.3) * Quaternion::rotation_z(s_a.ahr.5); + + next.control.position = Vec3::new(s_a.ac.0, s_a.ac.1, s_a.ac.2); + next.control.orientation = Quaternion::rotation_x(s_a.ac.3) + * Quaternion::rotation_y(s_a.ac.4) + * Quaternion::rotation_z(s_a.ac.5 - move1 * PI * 0.75); + + next.chest.orientation.rotate_z(move1 * 1.2); + next.head.orientation.rotate_z(move1 * -0.7); + next.shorts.orientation.rotate_z(move1 * -0.9); + next.belt.orientation.rotate_z(move1 * -0.3); + + next.chest.orientation.rotate_z(move2 * -2.9); + next.head.orientation.rotate_z(move2 * 1.2); + next.shorts.orientation.rotate_z(move2 * 2.0); + next.belt.orientation.rotate_z(move2 * 0.7); + next.control.orientation.rotate_x(move2_reset * -1.0); + next.control.orientation.rotate_z(move2 * -5.0); + next.control.position += Vec3::new(move2 * 17.0, move2 * 3.0, 0.0); + }, _ => {}, }