diff --git a/assets/voxygen/audio/sfx.ron b/assets/voxygen/audio/sfx.ron index aabff1f3a7..2fe35b471e 100644 --- a/assets/voxygen/audio/sfx.ron +++ b/assets/voxygen/audio/sfx.ron @@ -23,45 +23,44 @@ ], threshold: 0.5, ), - Attack(Bow(BasicBow)): ( + Attack(DashMelee, Sword(BasicSword)): ( + files: [ + "voxygen.audio.sfx.weapon.whoosh_normal_01", + "voxygen.audio.sfx.weapon.whoosh_normal_02", + "voxygen.audio.sfx.weapon.whoosh_normal_03", + "voxygen.audio.sfx.weapon.whoosh_normal_04", + ], + threshold: 1.2, + ), + Attack(TripleStrike, Sword(BasicSword)): ( + files: [ + "voxygen.audio.sfx.weapon.sword_triple_strike_01", + "voxygen.audio.sfx.weapon.sword_triple_strike_02", + "voxygen.audio.sfx.weapon.sword_triple_strike_03", + ], + threshold: 0.8, + ), + Attack(BasicRanged, Bow(BasicBow)): ( files: [ "voxygen.audio.sfx.weapon.bow_attack_01", "voxygen.audio.sfx.weapon.bow_attack_02", - "voxygen.audio.sfx.weapon.bow_attack_03", - "voxygen.audio.sfx.weapon.bow_attack_04", ], threshold: 0.5, ), - Attack(Sword(BasicSword)): ( + Attack(BasicMelee, Hammer(BasicHammer)): ( files: [ - "voxygen.audio.sfx.weapon.sword_attack_01", - "voxygen.audio.sfx.weapon.sword_attack_02", - "voxygen.audio.sfx.weapon.sword_attack_03", - "voxygen.audio.sfx.weapon.sword_attack_04", + "voxygen.audio.sfx.weapon.whoosh_low_01", + "voxygen.audio.sfx.weapon.whoosh_low_02", + "voxygen.audio.sfx.weapon.whoosh_low_03", ], threshold: 0.5, ), - Attack(Hammer(BasicHammer)): ( + Attack(BasicMelee, Staff(BasicStaff)): ( files: [ - "voxygen.audio.sfx.weapon.hammer_attack_01", - "voxygen.audio.sfx.weapon.hammer_attack_02", - "voxygen.audio.sfx.weapon.hammer_attack_03", - ], - threshold: 0.5, - ), - Attack(Staff(BasicStaff)): ( - files: [ - "voxygen.audio.sfx.weapon.staff_attack_01", - "voxygen.audio.sfx.weapon.staff_attack_02", - "voxygen.audio.sfx.weapon.staff_attack_03", - ], - threshold: 0.5, - ), - Attack(Axe(BasicAxe)): ( - files: [ - "voxygen.audio.sfx.weapon.hammer_attack_01", - "voxygen.audio.sfx.weapon.hammer_attack_02", - "voxygen.audio.sfx.weapon.hammer_attack_03", + "voxygen.audio.sfx.weapon.whoosh_normal_01", + "voxygen.audio.sfx.weapon.whoosh_normal_02", + "voxygen.audio.sfx.weapon.whoosh_normal_03", + "voxygen.audio.sfx.weapon.whoosh_normal_04", ], threshold: 0.5, ), diff --git a/assets/voxygen/audio/sfx/weapon/bow_attack_03.wav b/assets/voxygen/audio/sfx/weapon/bow_attack_03.wav deleted file mode 100644 index bc045c4fe8..0000000000 --- a/assets/voxygen/audio/sfx/weapon/bow_attack_03.wav +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3e70b30e1147312a17ffc584978798d89c52928bb65b3b1d7d97085a1bec9dcf -size 30266 diff --git a/assets/voxygen/audio/sfx/weapon/bow_attack_04.wav b/assets/voxygen/audio/sfx/weapon/bow_attack_04.wav deleted file mode 100644 index f18600f763..0000000000 --- a/assets/voxygen/audio/sfx/weapon/bow_attack_04.wav +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ac81c68c3ea599f9ae75f01af2f02983cd316d2e0d7d75a05fe332538280d478 -size 32098 diff --git a/assets/voxygen/audio/sfx/weapon/staff_attack_01.wav b/assets/voxygen/audio/sfx/weapon/staff_attack_01.wav deleted file mode 100644 index 02eee0b292..0000000000 --- a/assets/voxygen/audio/sfx/weapon/staff_attack_01.wav +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3a62350854ef1d830ceca2855aac82883a6e063f25f435eb15df0e74a667bc2f -size 16396 diff --git a/assets/voxygen/audio/sfx/weapon/staff_attack_02.wav b/assets/voxygen/audio/sfx/weapon/staff_attack_02.wav deleted file mode 100644 index 2539a6717e..0000000000 --- a/assets/voxygen/audio/sfx/weapon/staff_attack_02.wav +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:adf54206c5f9276cb6273e3a77951dc0108d93d901f62779074f1e13401049b5 -size 16464 diff --git a/assets/voxygen/audio/sfx/weapon/staff_attack_03.wav b/assets/voxygen/audio/sfx/weapon/staff_attack_03.wav deleted file mode 100644 index a8864d4c35..0000000000 --- a/assets/voxygen/audio/sfx/weapon/staff_attack_03.wav +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:521b75984c280c7b8ca19e3e28d0da6a21b3a9f4eec810c6861a63aefbc66cca -size 19896 diff --git a/assets/voxygen/audio/sfx/weapon/sword_attack_01.wav b/assets/voxygen/audio/sfx/weapon/sword_attack_01.wav deleted file mode 100644 index 5b607d9d00..0000000000 --- a/assets/voxygen/audio/sfx/weapon/sword_attack_01.wav +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b75d14af7f489554491cc25ed1490e65afd28fa18d26ff8152e5fe1be567ae9c -size 57584 diff --git a/assets/voxygen/audio/sfx/weapon/sword_attack_02.wav b/assets/voxygen/audio/sfx/weapon/sword_attack_02.wav deleted file mode 100644 index 3e0f942c1d..0000000000 --- a/assets/voxygen/audio/sfx/weapon/sword_attack_02.wav +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b1c45b0c3fc10b775a7d7b32f3779775d0edaa4fa7b1a4a81dcda16555cf5257 -size 53528 diff --git a/assets/voxygen/audio/sfx/weapon/sword_attack_03.wav b/assets/voxygen/audio/sfx/weapon/sword_attack_03.wav deleted file mode 100644 index 55c9a5d3af..0000000000 --- a/assets/voxygen/audio/sfx/weapon/sword_attack_03.wav +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a08031f74aec235cd5581e1b56825f54f70f9ecdda937d852355d548c9e91d75 -size 63408 diff --git a/assets/voxygen/audio/sfx/weapon/sword_attack_04.wav b/assets/voxygen/audio/sfx/weapon/sword_attack_04.wav deleted file mode 100644 index 0dec92e91f..0000000000 --- a/assets/voxygen/audio/sfx/weapon/sword_attack_04.wav +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ad43b97e0c577be4727cb7bcfe4250e4b8e55ef8d125d02da1418eeeee866dd9 -size 54764 diff --git a/assets/voxygen/audio/sfx/weapon/sword_triple_strike_01.wav b/assets/voxygen/audio/sfx/weapon/sword_triple_strike_01.wav new file mode 100644 index 0000000000..a4cb50683a --- /dev/null +++ b/assets/voxygen/audio/sfx/weapon/sword_triple_strike_01.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ffaf3658efef24c496ad46586e478357c02766a911d797b1bca8de60b0e31d19 +size 57188 diff --git a/assets/voxygen/audio/sfx/weapon/sword_triple_strike_02.wav b/assets/voxygen/audio/sfx/weapon/sword_triple_strike_02.wav new file mode 100644 index 0000000000..9fd15054e8 --- /dev/null +++ b/assets/voxygen/audio/sfx/weapon/sword_triple_strike_02.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7cc36ec20064a7a37508ecf6428c6b3e2e8a75226667f6799002b2cb0a433e5a +size 53336 diff --git a/assets/voxygen/audio/sfx/weapon/sword_triple_strike_03.wav b/assets/voxygen/audio/sfx/weapon/sword_triple_strike_03.wav new file mode 100644 index 0000000000..c0a092eaf6 --- /dev/null +++ b/assets/voxygen/audio/sfx/weapon/sword_triple_strike_03.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e6a85b277160c90534c1300fb31c86669c746fa37f6c616aa388cd5e0fbeafac +size 56104 diff --git a/assets/voxygen/audio/sfx/weapon/hammer_attack_01.wav b/assets/voxygen/audio/sfx/weapon/whoosh_low_01.wav similarity index 100% rename from assets/voxygen/audio/sfx/weapon/hammer_attack_01.wav rename to assets/voxygen/audio/sfx/weapon/whoosh_low_01.wav diff --git a/assets/voxygen/audio/sfx/weapon/hammer_attack_02.wav b/assets/voxygen/audio/sfx/weapon/whoosh_low_02.wav similarity index 100% rename from assets/voxygen/audio/sfx/weapon/hammer_attack_02.wav rename to assets/voxygen/audio/sfx/weapon/whoosh_low_02.wav diff --git a/assets/voxygen/audio/sfx/weapon/hammer_attack_03.wav b/assets/voxygen/audio/sfx/weapon/whoosh_low_03.wav similarity index 100% rename from assets/voxygen/audio/sfx/weapon/hammer_attack_03.wav rename to assets/voxygen/audio/sfx/weapon/whoosh_low_03.wav diff --git a/assets/voxygen/audio/sfx/weapon/whoosh_normal_01.wav b/assets/voxygen/audio/sfx/weapon/whoosh_normal_01.wav new file mode 100644 index 0000000000..863d8ab79a --- /dev/null +++ b/assets/voxygen/audio/sfx/weapon/whoosh_normal_01.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5f53a2bcd4f17b14fe3c0b2fa5cde63fc0b607503bd5961faa3ac52f7210a7ec +size 17688 diff --git a/assets/voxygen/audio/sfx/weapon/whoosh_normal_02.wav b/assets/voxygen/audio/sfx/weapon/whoosh_normal_02.wav new file mode 100644 index 0000000000..ef29dde874 --- /dev/null +++ b/assets/voxygen/audio/sfx/weapon/whoosh_normal_02.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ced9097c2189bc39353578bb723ababad018b473443d793b2581e39ccc9c7526 +size 18174 diff --git a/assets/voxygen/audio/sfx/weapon/whoosh_normal_03.wav b/assets/voxygen/audio/sfx/weapon/whoosh_normal_03.wav new file mode 100644 index 0000000000..551e1e71a8 --- /dev/null +++ b/assets/voxygen/audio/sfx/weapon/whoosh_normal_03.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:98e707c0617d68ec45ab43ce33596d811fe82d659d6ad72ebfe436ffabac8bac +size 23066 diff --git a/assets/voxygen/audio/sfx/weapon/whoosh_normal_04.wav b/assets/voxygen/audio/sfx/weapon/whoosh_normal_04.wav new file mode 100644 index 0000000000..f0f8096830 --- /dev/null +++ b/assets/voxygen/audio/sfx/weapon/whoosh_normal_04.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b4e8bbff7e7c008f94dbef91b39d1aab9de491035aed40bde0785d95237b542e +size 20396 diff --git a/common/src/comp/ability.rs b/common/src/comp/ability.rs index e1f0af4d2b..8f535eaa33 100644 --- a/common/src/comp/ability.rs +++ b/common/src/comp/ability.rs @@ -10,6 +10,30 @@ use specs::{Component, FlaggedStorage}; use specs_idvs::IDVStorage; use std::time::Duration; +#[derive(Copy, Clone, Hash, Eq, PartialEq, Debug, Serialize, Deserialize)] +pub enum CharacterAbilityType { + BasicMelee, + BasicRanged, + Boost, + DashMelee, + BasicBlock, + TripleStrike, +} + +impl From<&CharacterState> for CharacterAbilityType { + fn from(state: &CharacterState) -> Self { + match state { + CharacterState::BasicMelee(_) => Self::BasicMelee, + CharacterState::BasicRanged(_) => Self::BasicRanged, + CharacterState::Boost(_) => Self::Boost, + CharacterState::DashMelee(_) => Self::DashMelee, + CharacterState::BasicBlock => Self::BasicBlock, + CharacterState::TripleStrike(_) => Self::TripleStrike, + _ => Self::BasicMelee, + } + } +} + #[derive(Clone, PartialEq, Debug, Serialize, Deserialize)] pub enum CharacterAbility { BasicMelee { diff --git a/common/src/comp/mod.rs b/common/src/comp/mod.rs index dfea20e7ca..f25b42cca7 100644 --- a/common/src/comp/mod.rs +++ b/common/src/comp/mod.rs @@ -16,7 +16,7 @@ mod stats; mod visual; // Reexports -pub use ability::{CharacterAbility, ItemConfig, Loadout}; +pub use ability::{CharacterAbility, CharacterAbilityType, ItemConfig, Loadout}; pub use admin::Admin; pub use agent::{Agent, Alignment, SpeechBubble, SPEECH_BUBBLE_DURATION}; pub use body::{ diff --git a/common/src/event.rs b/common/src/event.rs index 2ea3bbdeeb..919b7ef1ff 100644 --- a/common/src/event.rs +++ b/common/src/event.rs @@ -1,5 +1,5 @@ use crate::{comp, sync::Uid, util::Dir}; -use comp::{item::ToolKind, InventoryUpdateEvent, Item}; +use comp::{item::ToolKind, CharacterAbilityType, InventoryUpdateEvent}; use parking_lot::Mutex; use serde::Deserialize; use specs::Entity as EcsEntity; @@ -39,7 +39,7 @@ pub enum SfxEvent { Fall, ExperienceGained, LevelUp, - Attack(ToolKind), + Attack(CharacterAbilityType, ToolKind), Wield(ToolKind), Unwield(ToolKind), Inventory(InventoryUpdateEvent), diff --git a/voxygen/src/audio/sfx/event_mapper/combat/mod.rs b/voxygen/src/audio/sfx/event_mapper/combat/mod.rs index 8bce3061d3..3fe2bc1c7c 100644 --- a/voxygen/src/audio/sfx/event_mapper/combat/mod.rs +++ b/voxygen/src/audio/sfx/event_mapper/combat/mod.rs @@ -5,7 +5,7 @@ use crate::audio::sfx::{SfxTriggerItem, SfxTriggers}; use common::{ comp::{ item::{Item, ItemKind}, - CharacterState, ItemConfig, Loadout, Pos, + CharacterAbilityType, CharacterState, ItemConfig, Loadout, Pos, }, event::{EventBus, SfxEvent, SfxEventItem}, state::State, @@ -143,7 +143,10 @@ impl CombatEventMapper { { // Check for attacking states if character_state.is_attack() { - return SfxEvent::Attack(data.kind); + return SfxEvent::Attack( + CharacterAbilityType::from(character_state), + data.kind, + ); } else { if let Some(wield_event) = match ( previous_state.weapon_drawn, diff --git a/voxygen/src/audio/sfx/event_mapper/combat/tests.rs b/voxygen/src/audio/sfx/event_mapper/combat/tests.rs index d21a137ea9..66cda23a9b 100644 --- a/voxygen/src/audio/sfx/event_mapper/combat/tests.rs +++ b/voxygen/src/audio/sfx/event_mapper/combat/tests.rs @@ -2,8 +2,8 @@ use super::*; use common::{ assets, comp::{ - item::tool::{AxeKind, BowKind, ToolKind}, - CharacterState, ItemConfig, Loadout, + item::tool::{AxeKind, BowKind, SwordKind, ToolKind}, + CharacterAbilityType, CharacterState, ItemConfig, Loadout, }, event::SfxEvent, states, @@ -94,5 +94,52 @@ fn maps_basic_melee() { Some(&loadout), ); - assert_eq!(result, SfxEvent::Attack(ToolKind::Axe(AxeKind::BasicAxe))); + assert_eq!( + result, + SfxEvent::Attack( + CharacterAbilityType::BasicMelee, + ToolKind::Axe(AxeKind::BasicAxe) + ) + ); +} + +#[test] +fn maps_triple_strike() { + let mut loadout = Loadout::default(); + + loadout.active_item = Some(ItemConfig { + item: assets::load_expect_cloned("common.items.weapons.starter_sword"), + ability1: None, + ability2: None, + ability3: None, + block_ability: None, + dodge_ability: None, + }); + + let result = CombatEventMapper::map_event( + &CharacterState::TripleStrike(states::triple_strike::Data { + base_damage: 10, + stage: states::triple_strike::Stage::First, + stage_time_active: Duration::default(), + stage_exhausted: false, + initialized: true, + transition_style: states::triple_strike::TransitionStyle::Hold( + states::triple_strike::HoldingState::Released, + ), + }), + &PreviousEntityState { + event: SfxEvent::Idle, + time: Instant::now(), + weapon_drawn: true, + }, + Some(&loadout), + ); + + assert_eq!( + result, + SfxEvent::Attack( + CharacterAbilityType::TripleStrike, + ToolKind::Sword(SwordKind::BasicSword) + ) + ); }