mirror of
https://gitlab.com/veloren/veloren.git
synced 2024-08-30 18:12:32 +00:00
Deprecated combo melee character state
This commit is contained in:
parent
afb1e04e5f
commit
f65d449aa3
@ -1,55 +1,57 @@
|
||||
ComboMelee(
|
||||
stage_data: [
|
||||
ComboMelee2(
|
||||
strikes: [
|
||||
(
|
||||
stage: 1,
|
||||
base_damage: 8.0,
|
||||
damage_increase: 1.0,
|
||||
base_poise_damage: 15,
|
||||
poise_damage_increase: 0,
|
||||
knockback: 8.0,
|
||||
range: 3.5,
|
||||
angle: 50.0,
|
||||
base_buildup_duration: 0.4,
|
||||
base_swing_duration: 0.08,
|
||||
melee_constructor: (
|
||||
kind: Slash(
|
||||
damage: 8,
|
||||
poise: 15,
|
||||
knockback: 8,
|
||||
energy_regen: 0,
|
||||
),
|
||||
range: 3.5,
|
||||
angle: 50.0,
|
||||
damage_effect: Some(Buff((
|
||||
kind: Bleeding,
|
||||
dur_secs: 10.0,
|
||||
strength: DamageFraction(0.1),
|
||||
chance: 0.1,
|
||||
))),
|
||||
),
|
||||
buildup_duration: 0.4,
|
||||
swing_duration: 0.08,
|
||||
hit_timing: 0.5,
|
||||
base_recover_duration: 0.5,
|
||||
forward_movement: 2.5,
|
||||
damage_kind: Slashing,
|
||||
damage_effect: Some(Buff((
|
||||
kind: Bleeding,
|
||||
dur_secs: 10.0,
|
||||
strength: DamageFraction(0.1),
|
||||
chance: 0.1,
|
||||
))),
|
||||
recover_duration: 0.5,
|
||||
movement: (
|
||||
swing: Some(Forward(2.5)),
|
||||
),
|
||||
ori_modifier: 0.7,
|
||||
),
|
||||
(
|
||||
stage: 2,
|
||||
base_damage: 10.0,
|
||||
damage_increase: 1.5,
|
||||
base_poise_damage: 20,
|
||||
poise_damage_increase: 0,
|
||||
knockback: 12.0,
|
||||
range: 3.5,
|
||||
angle: 30.0,
|
||||
base_buildup_duration: 0.7,
|
||||
base_swing_duration: 0.1,
|
||||
melee_constructor: (
|
||||
kind: Slash(
|
||||
damage: 10,
|
||||
poise: 20,
|
||||
knockback: 12,
|
||||
energy_regen: 0,
|
||||
),
|
||||
range: 3.5,
|
||||
angle: 30.0,
|
||||
damage_effect: Some(Buff((
|
||||
kind: Bleeding,
|
||||
dur_secs: 10.0,
|
||||
strength: DamageFraction(0.1),
|
||||
chance: 0.1,
|
||||
))),
|
||||
),
|
||||
buildup_duration: 0.7,
|
||||
swing_duration: 0.1,
|
||||
hit_timing: 0.5,
|
||||
base_recover_duration: 0.7,
|
||||
forward_movement: 2.0,
|
||||
damage_kind: Slashing,
|
||||
damage_effect: Some(Buff((
|
||||
kind: Bleeding,
|
||||
dur_secs: 10.0,
|
||||
strength: DamageFraction(0.1),
|
||||
chance: 0.1,
|
||||
))),
|
||||
recover_duration: 0.7,
|
||||
movement: (
|
||||
swing: Some(Forward(2.0)),
|
||||
),
|
||||
ori_modifier: 0.7,
|
||||
),
|
||||
],
|
||||
initial_energy_gain: 0,
|
||||
max_energy_gain: 0,
|
||||
energy_increase: 0,
|
||||
speed_increase: 0.0,
|
||||
max_speed_increase: 0.0,
|
||||
scales_from_combo: 0,
|
||||
ori_modifier: 0.7,
|
||||
)
|
||||
energy_cost_per_strike: 0,
|
||||
)
|
||||
|
@ -1,33 +1,31 @@
|
||||
ComboMelee(
|
||||
stage_data: [
|
||||
ComboMelee2(
|
||||
strikes: [
|
||||
(
|
||||
stage: 1,
|
||||
base_damage: 74,
|
||||
damage_increase: 0,
|
||||
base_poise_damage: 27.5,
|
||||
poise_damage_increase: 0,
|
||||
knockback: 9.0,
|
||||
range: 3.0,
|
||||
angle: 60.0,
|
||||
base_buildup_duration: 1.4,
|
||||
base_swing_duration: 0.1,
|
||||
melee_constructor: (
|
||||
kind: Bash(
|
||||
damage: 74,
|
||||
poise: 27.5,
|
||||
knockback: 9,
|
||||
energy_regen: 0,
|
||||
),
|
||||
range: 3.0,
|
||||
angle: 60.0,
|
||||
damage_effect: Some(Buff((
|
||||
kind: Ensnared,
|
||||
dur_secs: 6.0,
|
||||
strength: Value(0.5),
|
||||
chance: 0.6,
|
||||
))),
|
||||
),
|
||||
buildup_duration: 1.4,
|
||||
swing_duration: 0.1,
|
||||
hit_timing: 0.5,
|
||||
base_recover_duration: 0.8,
|
||||
forward_movement: 1.0,
|
||||
damage_kind: Crushing,
|
||||
damage_effect: Some(Buff((
|
||||
kind: Ensnared,
|
||||
dur_secs: 6.0,
|
||||
strength: DamageFraction(0.1),
|
||||
chance: 0.6,
|
||||
))),
|
||||
recover_duration: 0.8,
|
||||
movement: (
|
||||
swing: Some(Forward(1.0)),
|
||||
),
|
||||
ori_modifier: 0.8,
|
||||
),
|
||||
],
|
||||
initial_energy_gain: 0,
|
||||
max_energy_gain: 0,
|
||||
energy_increase: 0,
|
||||
speed_increase: 0.0,
|
||||
max_speed_increase: 0.0,
|
||||
scales_from_combo: 0,
|
||||
ori_modifier: 0.8,
|
||||
)
|
||||
energy_cost_per_strike: 0,
|
||||
)
|
||||
|
@ -1,33 +1,31 @@
|
||||
ComboMelee(
|
||||
stage_data: [
|
||||
ComboMelee2(
|
||||
strikes: [
|
||||
(
|
||||
stage: 1,
|
||||
base_damage: 50,
|
||||
damage_increase: 0,
|
||||
base_poise_damage: 16,
|
||||
poise_damage_increase: 0,
|
||||
knockback: 2.0,
|
||||
range: 3.0,
|
||||
angle: 60.0,
|
||||
base_buildup_duration: 0.8,
|
||||
base_swing_duration: 0.1,
|
||||
melee_constructor: (
|
||||
kind: Stab(
|
||||
damage: 50,
|
||||
poise: 16,
|
||||
knockback: 2,
|
||||
energy_regen: 0,
|
||||
),
|
||||
range: 3.0,
|
||||
angle: 60.0,
|
||||
damage_effect: Some(Buff((
|
||||
kind: Poisoned,
|
||||
dur_secs: 7.0,
|
||||
strength: DamageFraction(0.6),
|
||||
chance: 0.4,
|
||||
))),
|
||||
),
|
||||
buildup_duration: 0.8,
|
||||
swing_duration: 0.1,
|
||||
hit_timing: 0.5,
|
||||
base_recover_duration: 0.8,
|
||||
forward_movement: 1.0,
|
||||
damage_kind: Piercing,
|
||||
damage_effect: Some(Buff((
|
||||
kind: Poisoned,
|
||||
dur_secs: 7.0,
|
||||
strength: DamageFraction(0.6),
|
||||
chance: 0.4,
|
||||
))),
|
||||
recover_duration: 0.8,
|
||||
movement: (
|
||||
swing: Some(Forward(1.0)),
|
||||
),
|
||||
ori_modifier: 0.8,
|
||||
),
|
||||
],
|
||||
initial_energy_gain: 0,
|
||||
max_energy_gain: 0,
|
||||
energy_increase: 0,
|
||||
speed_increase: 0.0,
|
||||
max_speed_increase: 0.0,
|
||||
scales_from_combo: 0,
|
||||
ori_modifier: 0.8,
|
||||
energy_cost_per_strike: 0,
|
||||
)
|
||||
|
@ -1,27 +1,25 @@
|
||||
ComboMelee(
|
||||
stage_data: [
|
||||
ComboMelee2(
|
||||
strikes: [
|
||||
(
|
||||
stage: 1,
|
||||
base_damage: 54,
|
||||
damage_increase: 0,
|
||||
base_poise_damage: 20,
|
||||
poise_damage_increase: 0,
|
||||
knockback: 5.0,
|
||||
range: 3.0,
|
||||
angle: 60.0,
|
||||
base_buildup_duration: 0.8,
|
||||
base_swing_duration: 0.1,
|
||||
melee_constructor: (
|
||||
kind: Bash(
|
||||
damage: 54,
|
||||
poise: 20,
|
||||
knockback: 5,
|
||||
energy_regen: 0,
|
||||
),
|
||||
range: 3.0,
|
||||
angle: 60.0,
|
||||
),
|
||||
buildup_duration: 0.8,
|
||||
swing_duration: 0.1,
|
||||
hit_timing: 0.5,
|
||||
base_recover_duration: 0.8,
|
||||
forward_movement: 1.0,
|
||||
damage_kind: Crushing,
|
||||
recover_duration: 0.8,
|
||||
movement: (
|
||||
swing: Some(Forward(1.0)),
|
||||
),
|
||||
ori_modifier: 0.5,
|
||||
),
|
||||
],
|
||||
initial_energy_gain: 0,
|
||||
max_energy_gain: 0,
|
||||
energy_increase: 0,
|
||||
speed_increase: 0.0,
|
||||
max_speed_increase: 0.0,
|
||||
scales_from_combo: 0,
|
||||
ori_modifier: 0.5,
|
||||
)
|
||||
energy_cost_per_strike: 0,
|
||||
)
|
||||
|
@ -1,33 +1,31 @@
|
||||
ComboMelee(
|
||||
stage_data: [
|
||||
ComboMelee2(
|
||||
strikes: [
|
||||
(
|
||||
stage: 1,
|
||||
base_damage: 60,
|
||||
damage_increase: 0,
|
||||
base_poise_damage: 21,
|
||||
poise_damage_increase: 0,
|
||||
knockback: 3.0,
|
||||
range: 3.0,
|
||||
angle: 60.0,
|
||||
base_buildup_duration: 0.8,
|
||||
base_swing_duration: 0.1,
|
||||
melee_constructor: (
|
||||
kind: Stab(
|
||||
damage: 60,
|
||||
poise: 21,
|
||||
knockback: 3,
|
||||
energy_regen: 0,
|
||||
),
|
||||
range: 3.0,
|
||||
angle: 60.0,
|
||||
damage_effect: Some(Buff((
|
||||
kind: Poisoned,
|
||||
dur_secs: 9.0,
|
||||
strength: DamageFraction(0.7),
|
||||
chance: 0.8,
|
||||
))),
|
||||
),
|
||||
buildup_duration: 0.8,
|
||||
swing_duration: 0.1,
|
||||
hit_timing: 0.5,
|
||||
base_recover_duration: 0.8,
|
||||
forward_movement: 1.0,
|
||||
damage_kind: Piercing,
|
||||
damage_effect: Some(Buff((
|
||||
kind: Poisoned,
|
||||
dur_secs: 9.0,
|
||||
strength: DamageFraction(0.7),
|
||||
chance: 0.8,
|
||||
))),
|
||||
recover_duration: 0.8,
|
||||
movement: (
|
||||
swing: Some(Forward(1.0)),
|
||||
),
|
||||
ori_modifier: 0.8,
|
||||
),
|
||||
],
|
||||
initial_energy_gain: 0,
|
||||
max_energy_gain: 0,
|
||||
energy_increase: 0,
|
||||
speed_increase: 0.0,
|
||||
max_speed_increase: 0.0,
|
||||
scales_from_combo: 0,
|
||||
ori_modifier: 0.8,
|
||||
energy_cost_per_strike: 0,
|
||||
)
|
||||
|
@ -1,27 +1,25 @@
|
||||
ComboMelee(
|
||||
stage_data: [
|
||||
ComboMelee2(
|
||||
strikes: [
|
||||
(
|
||||
stage: 1,
|
||||
base_damage: 44,
|
||||
damage_increase: 0,
|
||||
base_poise_damage: 14,
|
||||
poise_damage_increase: 0,
|
||||
knockback: 3.0,
|
||||
range: 3.0,
|
||||
angle: 60.0,
|
||||
base_buildup_duration: 0.8,
|
||||
base_swing_duration: 0.1,
|
||||
melee_constructor: (
|
||||
kind: Bash(
|
||||
damage: 44,
|
||||
poise: 14,
|
||||
knockback: 3,
|
||||
energy_regen: 0,
|
||||
),
|
||||
range: 3.0,
|
||||
angle: 60.0,
|
||||
),
|
||||
buildup_duration: 0.8,
|
||||
swing_duration: 0.1,
|
||||
hit_timing: 0.5,
|
||||
base_recover_duration: 0.8,
|
||||
forward_movement: 1.0,
|
||||
damage_kind: Crushing,
|
||||
recover_duration: 0.8,
|
||||
movement: (
|
||||
swing: Some(Forward(1.0)),
|
||||
),
|
||||
ori_modifier: 0.6,
|
||||
),
|
||||
],
|
||||
initial_energy_gain: 0,
|
||||
max_energy_gain: 0,
|
||||
energy_increase: 0,
|
||||
speed_increase: 0.0,
|
||||
max_speed_increase: 0.0,
|
||||
scales_from_combo: 0,
|
||||
ori_modifier: 0.6,
|
||||
energy_cost_per_strike: 0,
|
||||
)
|
||||
|
@ -1,27 +1,25 @@
|
||||
ComboMelee(
|
||||
stage_data: [
|
||||
ComboMelee2(
|
||||
strikes: [
|
||||
(
|
||||
stage: 1,
|
||||
base_damage: 28.0,
|
||||
damage_increase: 0,
|
||||
base_poise_damage: 28,
|
||||
poise_damage_increase: 0,
|
||||
knockback: 3.0,
|
||||
range: 3.5,
|
||||
angle: 60.0,
|
||||
base_buildup_duration: 1.2,
|
||||
base_swing_duration: 0.1,
|
||||
melee_constructor: (
|
||||
kind: Bash(
|
||||
damage: 28,
|
||||
poise: 28,
|
||||
knockback: 3,
|
||||
energy_regen: 0,
|
||||
),
|
||||
range: 3.5,
|
||||
angle: 60.0,
|
||||
),
|
||||
buildup_duration: 1.2,
|
||||
swing_duration: 0.1,
|
||||
hit_timing: 0.5,
|
||||
base_recover_duration: 0.4,
|
||||
forward_movement: 2.0,
|
||||
damage_kind: Crushing,
|
||||
recover_duration: 0.4,
|
||||
movement: (
|
||||
swing: Some(Forward(2.0)),
|
||||
),
|
||||
ori_modifier: 0.65,
|
||||
),
|
||||
],
|
||||
initial_energy_gain: 0,
|
||||
max_energy_gain: 0,
|
||||
energy_increase: 0,
|
||||
speed_increase: 0.0,
|
||||
max_speed_increase: 0.0,
|
||||
scales_from_combo: 0,
|
||||
ori_modifier: 0.65,
|
||||
energy_cost_per_strike: 0,
|
||||
)
|
||||
|
@ -1,59 +1,65 @@
|
||||
ComboMelee(
|
||||
stage_data: [
|
||||
ComboMelee2(
|
||||
strikes: [
|
||||
(
|
||||
stage: 1,
|
||||
base_damage: 36.0,
|
||||
damage_increase: 0,
|
||||
base_poise_damage: 15,
|
||||
poise_damage_increase: 0,
|
||||
knockback: 3.0,
|
||||
range: 2.8,
|
||||
angle: 30.0,
|
||||
base_buildup_duration: 1.4,
|
||||
base_swing_duration: 0.07,
|
||||
melee_constructor: (
|
||||
kind: Bash(
|
||||
damage: 36,
|
||||
poise: 15,
|
||||
knockback: 3,
|
||||
energy_regen: 0,
|
||||
),
|
||||
range: 2.8,
|
||||
angle: 30.0,
|
||||
),
|
||||
buildup_duration: 1.4,
|
||||
swing_duration: 0.07,
|
||||
hit_timing: 0.5,
|
||||
base_recover_duration: 0.3,
|
||||
forward_movement: 2.0,
|
||||
damage_kind: Crushing,
|
||||
recover_duration: 0.3,
|
||||
movement: (
|
||||
swing: Some(Forward(2.0)),
|
||||
),
|
||||
ori_modifier: 0.65,
|
||||
),
|
||||
(
|
||||
stage: 2,
|
||||
base_damage: 36.0,
|
||||
damage_increase: 0,
|
||||
base_poise_damage: 18,
|
||||
poise_damage_increase: 0,
|
||||
knockback: 3.0,
|
||||
range: 2.8,
|
||||
angle: 30.0,
|
||||
base_buildup_duration: 0.8,
|
||||
base_swing_duration: 0.07,
|
||||
melee_constructor: (
|
||||
kind: Bash(
|
||||
damage: 36,
|
||||
poise: 18,
|
||||
knockback: 3,
|
||||
energy_regen: 0,
|
||||
),
|
||||
range: 2.8,
|
||||
angle: 30.0,
|
||||
),
|
||||
buildup_duration: 0.8,
|
||||
swing_duration: 0.07,
|
||||
hit_timing: 0.5,
|
||||
base_recover_duration: 0.3,
|
||||
forward_movement: 1.5,
|
||||
damage_kind: Crushing,
|
||||
recover_duration: 0.3,
|
||||
movement: (
|
||||
swing: Some(Forward(1.5)),
|
||||
),
|
||||
ori_modifier: 0.65,
|
||||
),
|
||||
(
|
||||
stage: 3,
|
||||
base_damage: 36.0,
|
||||
damage_increase: 0,
|
||||
base_poise_damage: 20,
|
||||
poise_damage_increase: 0,
|
||||
knockback: 3.0,
|
||||
range: 2.8,
|
||||
angle: 30.0,
|
||||
base_buildup_duration: 0.8,
|
||||
base_swing_duration: 0.07,
|
||||
melee_constructor: (
|
||||
kind: Bash(
|
||||
damage: 36,
|
||||
poise: 20,
|
||||
knockback: 3,
|
||||
energy_regen: 0,
|
||||
),
|
||||
range: 2.8,
|
||||
angle: 30.0,
|
||||
),
|
||||
buildup_duration: 0.8,
|
||||
swing_duration: 0.07,
|
||||
hit_timing: 0.5,
|
||||
base_recover_duration: 0.3,
|
||||
forward_movement: 1.5,
|
||||
damage_kind: Crushing,
|
||||
recover_duration: 0.3,
|
||||
movement: (
|
||||
swing: Some(Forward(1.5)),
|
||||
),
|
||||
ori_modifier: 0.65,
|
||||
),
|
||||
],
|
||||
initial_energy_gain: 0,
|
||||
max_energy_gain: 0,
|
||||
energy_increase: 0,
|
||||
speed_increase: 0.0,
|
||||
max_speed_increase: 0.0,
|
||||
scales_from_combo: 0,
|
||||
ori_modifier: 0.65,
|
||||
energy_cost_per_strike: 0,
|
||||
)
|
||||
|
@ -1,27 +1,18 @@
|
||||
ComboMelee(
|
||||
stage_data: [
|
||||
(
|
||||
stage: 1,
|
||||
base_damage: 1.0,
|
||||
damage_increase: 0,
|
||||
base_poise_damage: 0,
|
||||
poise_damage_increase: 0,
|
||||
knockback: 0.0,
|
||||
range: 2.5,
|
||||
angle: 150.0,
|
||||
base_buildup_duration: 0.1,
|
||||
base_swing_duration: 0.07,
|
||||
hit_timing: 0.5,
|
||||
base_recover_duration: 0.2,
|
||||
forward_movement: 0.0,
|
||||
damage_kind: Piercing,
|
||||
BasicMelee(
|
||||
energy_cost: 0,
|
||||
buildup_duration: 0.1,
|
||||
swing_duration: 0.07,
|
||||
hit_timing: 0.5,
|
||||
recover_duration: 0.2,
|
||||
melee_constructor: (
|
||||
kind: Stab(
|
||||
damage: 1,
|
||||
poise: 0,
|
||||
knockback: 0,
|
||||
energy_regen: 0,
|
||||
),
|
||||
],
|
||||
initial_energy_gain: 0,
|
||||
max_energy_gain: 0,
|
||||
energy_increase: 0,
|
||||
speed_increase: 0.0,
|
||||
max_speed_increase: 0.0,
|
||||
scales_from_combo: 0,
|
||||
range: 2.5,
|
||||
angle: 150.0,
|
||||
),
|
||||
ori_modifier: 0.6,
|
||||
)
|
||||
|
@ -1,31 +1,28 @@
|
||||
ComboMelee(
|
||||
stage_data: [(
|
||||
stage: 1,
|
||||
base_damage: 15.0,
|
||||
damage_increase: 0.75,
|
||||
base_poise_damage: 0,
|
||||
poise_damage_increase: 0,
|
||||
knockback: 3.5,
|
||||
range: 4.5,
|
||||
angle: 50.0,
|
||||
base_buildup_duration: 0.7,
|
||||
base_swing_duration: 0.1,
|
||||
hit_timing: 0.5,
|
||||
base_recover_duration: 0.45,
|
||||
forward_movement: 0.0,
|
||||
damage_kind: Crushing,
|
||||
damage_effect: Some(Buff((
|
||||
kind: Frozen,
|
||||
dur_secs: 2.0,
|
||||
strength: Value(0.3),
|
||||
chance: 0.4,
|
||||
))),
|
||||
)],
|
||||
initial_energy_gain: 5.0,
|
||||
max_energy_gain: 12.5,
|
||||
energy_increase: 2.5,
|
||||
speed_increase: 0.1,
|
||||
max_speed_increase: 0.4,
|
||||
scales_from_combo: 2,
|
||||
ori_modifier: 1.0,
|
||||
)
|
||||
ComboMelee2(
|
||||
strikes: [
|
||||
(
|
||||
melee_constructor: (
|
||||
kind: Bash(
|
||||
damage: 15,
|
||||
poise: 0,
|
||||
knockback: 3.5,
|
||||
energy_regen: 5,
|
||||
),
|
||||
range: 4.5,
|
||||
angle: 50.0,
|
||||
damage_effect: Some(Buff((
|
||||
kind: Frozen,
|
||||
dur_secs: 2.0,
|
||||
strength: Value(0.3),
|
||||
chance: 0.4,
|
||||
))),
|
||||
),
|
||||
buildup_duration: 0.7,
|
||||
swing_duration: 0.1,
|
||||
hit_timing: 0.5,
|
||||
recover_duration: 0.45,
|
||||
ori_modifier: 1.0,
|
||||
),
|
||||
],
|
||||
energy_cost_per_strike: 0,
|
||||
)
|
||||
|
@ -1,49 +1,51 @@
|
||||
ComboMelee(
|
||||
stage_data: [
|
||||
ComboMelee2(
|
||||
strikes: [
|
||||
(
|
||||
stage: 1,
|
||||
base_damage: 32.0,
|
||||
damage_increase: 0.0,
|
||||
base_poise_damage: 20,
|
||||
poise_damage_increase: 0.0,
|
||||
knockback: 5.0,
|
||||
range: 6,
|
||||
angle: 90.0,
|
||||
base_buildup_duration: 0.5,
|
||||
base_swing_duration: 0.4,
|
||||
melee_constructor: (
|
||||
kind: Bash(
|
||||
damage: 32,
|
||||
poise: 20,
|
||||
knockback: 5,
|
||||
energy_regen: 0,
|
||||
),
|
||||
range: 6.0,
|
||||
angle: 90.0,
|
||||
),
|
||||
buildup_duration: 0.5,
|
||||
swing_duration: 0.4,
|
||||
hit_timing: 0.4,
|
||||
base_recover_duration: 0.4,
|
||||
forward_movement: 0.3,
|
||||
damage_kind: Crushing,
|
||||
recover_duration: 0.4,
|
||||
movement: (
|
||||
swing: Some(Forward(0.3)),
|
||||
),
|
||||
ori_modifier: 0.65,
|
||||
),
|
||||
(
|
||||
stage: 2,
|
||||
base_damage: 36.0,
|
||||
damage_increase: 0.0,
|
||||
base_poise_damage: 40.0,
|
||||
poise_damage_increase: 0.0,
|
||||
knockback: 10.0,
|
||||
range: 8,
|
||||
angle: 45.0,
|
||||
base_buildup_duration: 0.6,
|
||||
base_swing_duration: 0.6,
|
||||
melee_constructor: (
|
||||
kind: Bash(
|
||||
damage: 36,
|
||||
poise: 40,
|
||||
knockback: 10,
|
||||
energy_regen: 0,
|
||||
),
|
||||
range: 8.0,
|
||||
angle: 45.0,
|
||||
damage_effect: Some(Buff((
|
||||
kind: Crippled,
|
||||
dur_secs: 3.0,
|
||||
strength: DamageFraction(0.1),
|
||||
chance: 1.0,
|
||||
))),
|
||||
),
|
||||
buildup_duration: 0.6,
|
||||
swing_duration: 0.6,
|
||||
hit_timing: 0.3,
|
||||
base_recover_duration: 1.2,
|
||||
forward_movement: 0.2,
|
||||
damage_kind: Crushing,
|
||||
damage_effect: Some(Buff((
|
||||
kind: Crippled,
|
||||
dur_secs: 3.0,
|
||||
strength: DamageFraction(0.1),
|
||||
chance: 1.0,
|
||||
))),
|
||||
recover_duration: 1.2,
|
||||
movement: (
|
||||
swing: Some(Forward(0.2)),
|
||||
),
|
||||
ori_modifier: 0.65,
|
||||
),
|
||||
],
|
||||
initial_energy_gain: 0,
|
||||
max_energy_gain: 0,
|
||||
energy_increase: 0,
|
||||
speed_increase: 0.0,
|
||||
max_speed_increase: 0.0,
|
||||
scales_from_combo: 0,
|
||||
ori_modifier: 0.65,
|
||||
energy_cost_per_strike: 0,
|
||||
)
|
||||
|
@ -1,55 +1,57 @@
|
||||
ComboMelee(
|
||||
stage_data: [
|
||||
ComboMelee2(
|
||||
strikes: [
|
||||
(
|
||||
stage: 1,
|
||||
base_damage: 35.5,
|
||||
damage_increase: 0.0,
|
||||
base_poise_damage: 15.0,
|
||||
poise_damage_increase: 0.0,
|
||||
knockback: 2.0,
|
||||
range: 6.0,
|
||||
angle: 60.0,
|
||||
base_buildup_duration: 0.8,
|
||||
base_swing_duration: 0.1,
|
||||
melee_constructor: (
|
||||
kind: Slash(
|
||||
damage: 35,
|
||||
poise: 15,
|
||||
knockback: 2,
|
||||
energy_regen: 0,
|
||||
),
|
||||
range: 6.0,
|
||||
angle: 60.0,
|
||||
damage_effect: Some(Buff((
|
||||
kind: Bleeding,
|
||||
dur_secs: 3.0,
|
||||
strength: DamageFraction(0.05),
|
||||
chance: 0.3,
|
||||
))),
|
||||
),
|
||||
buildup_duration: 0.8,
|
||||
swing_duration: 0.1,
|
||||
hit_timing: 0.4,
|
||||
base_recover_duration: 0.3,
|
||||
forward_movement: 0.8,
|
||||
damage_kind: Slashing,
|
||||
damage_effect: Some(Buff((
|
||||
kind: Bleeding,
|
||||
dur_secs: 3.0,
|
||||
strength: DamageFraction(0.05),
|
||||
chance: 0.3,
|
||||
))),
|
||||
recover_duration: 0.3,
|
||||
movement: (
|
||||
swing: Some(Forward(0.8)),
|
||||
),
|
||||
ori_modifier: 0.6,
|
||||
),
|
||||
(
|
||||
stage: 2,
|
||||
base_damage: 38.5,
|
||||
damage_increase: 0.0,
|
||||
base_poise_damage: 20.0,
|
||||
poise_damage_increase: 0.0,
|
||||
knockback: 8.0,
|
||||
range: 6.0,
|
||||
angle: 60.0,
|
||||
base_buildup_duration: 0.7,
|
||||
base_swing_duration: 0.1,
|
||||
melee_constructor: (
|
||||
kind: Slash(
|
||||
damage: 38.5,
|
||||
poise: 20,
|
||||
knockback: 8,
|
||||
energy_regen: 0,
|
||||
),
|
||||
range: 6.0,
|
||||
angle: 60.0,
|
||||
damage_effect: Some(Buff((
|
||||
kind: Bleeding,
|
||||
dur_secs: 3.0,
|
||||
strength: DamageFraction(0.1),
|
||||
chance: 0.15,
|
||||
))),
|
||||
),
|
||||
buildup_duration: 0.7,
|
||||
swing_duration: 0.1,
|
||||
hit_timing: 0.4,
|
||||
base_recover_duration: 1.3,
|
||||
forward_movement: 0.2,
|
||||
damage_kind: Slashing,
|
||||
damage_effect: Some(Buff((
|
||||
kind: Bleeding,
|
||||
dur_secs: 3.0,
|
||||
strength: DamageFraction(0.1),
|
||||
chance: 0.15,
|
||||
))),
|
||||
recover_duration: 1.3,
|
||||
movement: (
|
||||
swing: Some(Forward(0.2)),
|
||||
),
|
||||
ori_modifier: 0.6,
|
||||
),
|
||||
],
|
||||
initial_energy_gain: 0,
|
||||
max_energy_gain: 0,
|
||||
energy_increase: 0,
|
||||
speed_increase: 0.0,
|
||||
max_speed_increase: 0.0,
|
||||
scales_from_combo: 0,
|
||||
ori_modifier: 0.6,
|
||||
energy_cost_per_strike: 0,
|
||||
)
|
||||
|
@ -1,27 +1,18 @@
|
||||
ComboMelee(
|
||||
stage_data: [
|
||||
(
|
||||
stage: 1,
|
||||
base_damage: 40.0,
|
||||
damage_increase: 0,
|
||||
base_poise_damage: 12,
|
||||
poise_damage_increase: 0,
|
||||
knockback: 5.0,
|
||||
range: 3.5,
|
||||
angle: 60.0,
|
||||
base_buildup_duration: 1.0,
|
||||
base_swing_duration: 0.2,
|
||||
hit_timing: 0.5,
|
||||
base_recover_duration: 1.0,
|
||||
forward_movement: 0.5,
|
||||
damage_kind: Crushing,
|
||||
BasicMelee(
|
||||
energy_cost: 0,
|
||||
buildup_duration: 1.0,
|
||||
swing_duration: 0.2,
|
||||
hit_timing: 0.5,
|
||||
recover_duration: 1.0,
|
||||
melee_constructor: (
|
||||
kind: Bash(
|
||||
damage: 40,
|
||||
poise: 12,
|
||||
knockback: 5,
|
||||
energy_regen: 0,
|
||||
),
|
||||
],
|
||||
initial_energy_gain: 0,
|
||||
max_energy_gain: 0,
|
||||
energy_increase: 0,
|
||||
speed_increase: 0.0,
|
||||
max_speed_increase: 0.0,
|
||||
scales_from_combo: 0,
|
||||
range: 3.5,
|
||||
angle: 60.0,
|
||||
),
|
||||
ori_modifier: 0.6,
|
||||
)
|
||||
|
@ -1,27 +1,25 @@
|
||||
ComboMelee(
|
||||
stage_data: [
|
||||
ComboMelee2(
|
||||
strikes: [
|
||||
(
|
||||
stage: 1,
|
||||
base_damage: 40.0,
|
||||
damage_increase: 0,
|
||||
base_poise_damage: 28,
|
||||
poise_damage_increase: 0,
|
||||
knockback: 3.0,
|
||||
range: 3.5,
|
||||
angle: 60.0,
|
||||
base_buildup_duration: 1.0,
|
||||
base_swing_duration: 0.075,
|
||||
melee_constructor: (
|
||||
kind: Bash(
|
||||
damage: 40,
|
||||
poise: 28,
|
||||
knockback: 3,
|
||||
energy_regen: 0,
|
||||
),
|
||||
range: 3.5,
|
||||
angle: 60.0,
|
||||
),
|
||||
buildup_duration: 1.0,
|
||||
swing_duration: 0.075,
|
||||
hit_timing: 0.5,
|
||||
base_recover_duration: 0.4,
|
||||
forward_movement: 2.0,
|
||||
damage_kind: Crushing,
|
||||
recover_duration: 0.4,
|
||||
movement: (
|
||||
swing: Some(Forward(2.0)),
|
||||
),
|
||||
ori_modifier: 0.65,
|
||||
),
|
||||
],
|
||||
initial_energy_gain: 0,
|
||||
max_energy_gain: 0,
|
||||
energy_increase: 0,
|
||||
speed_increase: 0.0,
|
||||
max_speed_increase: 0.0,
|
||||
scales_from_combo: 0,
|
||||
ori_modifier: 0.65,
|
||||
energy_cost_per_strike: 0,
|
||||
)
|
||||
|
@ -1,55 +1,57 @@
|
||||
ComboMelee(
|
||||
stage_data: [
|
||||
ComboMelee2(
|
||||
strikes: [
|
||||
(
|
||||
stage: 1,
|
||||
base_damage: 18.0,
|
||||
damage_increase: 1.0,
|
||||
base_poise_damage: 0,
|
||||
poise_damage_increase: 0,
|
||||
knockback: 4.0,
|
||||
range: 3.5,
|
||||
angle: 50.0,
|
||||
base_buildup_duration: 1.2,
|
||||
base_swing_duration: 0.12,
|
||||
melee_constructor: (
|
||||
kind: Slash(
|
||||
damage: 18,
|
||||
poise: 0,
|
||||
knockback: 4,
|
||||
energy_regen: 0,
|
||||
),
|
||||
range: 3.5,
|
||||
angle: 50.0,
|
||||
damage_effect: Some(Buff((
|
||||
kind: Bleeding,
|
||||
dur_secs: 10.0,
|
||||
strength: DamageFraction(0.1),
|
||||
chance: 0.1,
|
||||
))),
|
||||
),
|
||||
buildup_duration: 1.2,
|
||||
swing_duration: 0.12,
|
||||
hit_timing: 0.5,
|
||||
base_recover_duration: 1.2,
|
||||
forward_movement: 3.5,
|
||||
damage_kind: Slashing,
|
||||
damage_effect: Some(Buff((
|
||||
kind: Bleeding,
|
||||
dur_secs: 10.0,
|
||||
strength: DamageFraction(0.1),
|
||||
chance: 0.1,
|
||||
))),
|
||||
recover_duration: 1.2,
|
||||
movement: (
|
||||
swing: Some(Forward(3.5)),
|
||||
),
|
||||
ori_modifier: 0.6,
|
||||
),
|
||||
(
|
||||
stage: 2,
|
||||
base_damage: 26.0,
|
||||
damage_increase: 1.5,
|
||||
base_poise_damage: 0,
|
||||
poise_damage_increase: 0,
|
||||
knockback: 16.0,
|
||||
range: 5.5,
|
||||
angle: 15.0,
|
||||
base_buildup_duration: 1.0,
|
||||
base_swing_duration: 0.15,
|
||||
melee_constructor: (
|
||||
kind: Slash(
|
||||
damage: 26,
|
||||
poise: 0,
|
||||
knockback: 16,
|
||||
energy_regen: 0,
|
||||
),
|
||||
range: 5.5,
|
||||
angle: 15.0,
|
||||
damage_effect: Some(Buff((
|
||||
kind: Bleeding,
|
||||
dur_secs: 10.0,
|
||||
strength: DamageFraction(0.1),
|
||||
chance: 0.1,
|
||||
))),
|
||||
),
|
||||
buildup_duration: 1.0,
|
||||
swing_duration: 0.15,
|
||||
hit_timing: 0.5,
|
||||
base_recover_duration: 2.4,
|
||||
forward_movement: 4.5,
|
||||
damage_kind: Slashing,
|
||||
damage_effect: Some(Buff((
|
||||
kind: Bleeding,
|
||||
dur_secs: 10.0,
|
||||
strength: DamageFraction(0.1),
|
||||
chance: 0.1,
|
||||
))),
|
||||
recover_duration: 2.4,
|
||||
movement: (
|
||||
swing: Some(Forward(4.5)),
|
||||
),
|
||||
ori_modifier: 0.6,
|
||||
),
|
||||
],
|
||||
initial_energy_gain: 0,
|
||||
max_energy_gain: 0,
|
||||
energy_increase: 0,
|
||||
speed_increase: 0.0,
|
||||
max_speed_increase: 0.0,
|
||||
scales_from_combo: 0,
|
||||
ori_modifier: 0.6,
|
||||
energy_cost_per_strike: 0,
|
||||
)
|
||||
|
@ -1,27 +1,25 @@
|
||||
ComboMelee(
|
||||
stage_data: [
|
||||
ComboMelee2(
|
||||
strikes: [
|
||||
(
|
||||
stage: 1,
|
||||
base_damage: 40.0,
|
||||
damage_increase: 0,
|
||||
base_poise_damage: 28,
|
||||
poise_damage_increase: 0,
|
||||
knockback: 3.0,
|
||||
range: 2.0,
|
||||
angle: 60.0,
|
||||
base_buildup_duration: 1.2,
|
||||
base_swing_duration: 0.07,
|
||||
melee_constructor: (
|
||||
kind: Bash(
|
||||
damage: 40,
|
||||
poise: 28,
|
||||
knockback: 3,
|
||||
energy_regen: 0,
|
||||
),
|
||||
range: 2.0,
|
||||
angle: 60.0,
|
||||
),
|
||||
buildup_duration: 1.2,
|
||||
swing_duration: 0.07,
|
||||
hit_timing: 0.5,
|
||||
base_recover_duration: 0.8,
|
||||
forward_movement: 3.0,
|
||||
damage_kind: Crushing,
|
||||
recover_duration: 0.8,
|
||||
movement: (
|
||||
swing: Some(Forward(3.0)),
|
||||
),
|
||||
ori_modifier: 0.6,
|
||||
),
|
||||
],
|
||||
initial_energy_gain: 0,
|
||||
max_energy_gain: 0,
|
||||
energy_increase: 0,
|
||||
speed_increase: 0.0,
|
||||
max_speed_increase: 0.0,
|
||||
scales_from_combo: 0,
|
||||
ori_modifier: 0.6,
|
||||
energy_cost_per_strike: 0,
|
||||
)
|
||||
|
@ -1,59 +1,65 @@
|
||||
ComboMelee(
|
||||
stage_data: [
|
||||
ComboMelee2(
|
||||
strikes: [
|
||||
(
|
||||
stage: 1,
|
||||
base_damage: 28.0,
|
||||
damage_increase: 0,
|
||||
base_poise_damage: 15,
|
||||
poise_damage_increase: 0,
|
||||
knockback: 3.0,
|
||||
range: 2.2,
|
||||
angle: 30.0,
|
||||
base_buildup_duration: 1.3,
|
||||
base_swing_duration: 0.07,
|
||||
melee_constructor: (
|
||||
kind: Bash(
|
||||
damage: 28,
|
||||
poise: 15,
|
||||
knockback: 3,
|
||||
energy_regen: 0,
|
||||
),
|
||||
range: 2.2,
|
||||
angle: 30.0,
|
||||
),
|
||||
buildup_duration: 1.3,
|
||||
swing_duration: 0.07,
|
||||
hit_timing: 0.5,
|
||||
base_recover_duration: 0.6,
|
||||
forward_movement: 2.0,
|
||||
damage_kind: Crushing,
|
||||
recover_duration: 0.6,
|
||||
movement: (
|
||||
swing: Some(Forward(2.0)),
|
||||
),
|
||||
ori_modifier: 0.65,
|
||||
),
|
||||
(
|
||||
stage: 2,
|
||||
base_damage: 28.0,
|
||||
damage_increase: 0,
|
||||
base_poise_damage: 18,
|
||||
poise_damage_increase: 0,
|
||||
knockback: 3.0,
|
||||
range: 2.2,
|
||||
angle: 30.0,
|
||||
base_buildup_duration: 0.8,
|
||||
base_swing_duration: 0.07,
|
||||
melee_constructor: (
|
||||
kind: Bash(
|
||||
damage: 28,
|
||||
poise: 18,
|
||||
knockback: 3,
|
||||
energy_regen: 0,
|
||||
),
|
||||
range: 2.2,
|
||||
angle: 30.0,
|
||||
),
|
||||
buildup_duration: 0.8,
|
||||
swing_duration: 0.07,
|
||||
hit_timing: 0.5,
|
||||
base_recover_duration: 0.6,
|
||||
forward_movement: 1.5,
|
||||
damage_kind: Crushing,
|
||||
recover_duration: 0.6,
|
||||
movement: (
|
||||
swing: Some(Forward(1.5)),
|
||||
),
|
||||
ori_modifier: 0.65,
|
||||
),
|
||||
(
|
||||
stage: 3,
|
||||
base_damage: 28.0,
|
||||
damage_increase: 0,
|
||||
base_poise_damage: 20,
|
||||
poise_damage_increase: 0,
|
||||
knockback: 3.0,
|
||||
range: 2.2,
|
||||
angle: 30.0,
|
||||
base_buildup_duration: 0.8,
|
||||
base_swing_duration: 0.07,
|
||||
melee_constructor: (
|
||||
kind: Bash(
|
||||
damage: 28,
|
||||
poise: 20,
|
||||
knockback: 3,
|
||||
energy_regen: 0,
|
||||
),
|
||||
range: 2.2,
|
||||
angle: 30.0,
|
||||
),
|
||||
buildup_duration: 0.8,
|
||||
swing_duration: 0.07,
|
||||
hit_timing: 0.5,
|
||||
base_recover_duration: 0.6,
|
||||
forward_movement: 1.5,
|
||||
damage_kind: Crushing,
|
||||
recover_duration: 0.6,
|
||||
movement: (
|
||||
swing: Some(Forward(1.5)),
|
||||
),
|
||||
ori_modifier: 0.65,
|
||||
),
|
||||
],
|
||||
initial_energy_gain: 0,
|
||||
max_energy_gain: 0,
|
||||
energy_increase: 0,
|
||||
speed_increase: 0.0,
|
||||
max_speed_increase: 0.0,
|
||||
scales_from_combo: 0,
|
||||
ori_modifier: 0.65,
|
||||
energy_cost_per_strike: 0,
|
||||
)
|
||||
|
@ -1,59 +1,65 @@
|
||||
ComboMelee(
|
||||
stage_data: [
|
||||
ComboMelee2(
|
||||
strikes: [
|
||||
(
|
||||
stage: 1,
|
||||
base_damage: 44.0,
|
||||
damage_increase: 0,
|
||||
base_poise_damage: 20,
|
||||
poise_damage_increase: 0,
|
||||
knockback: 3.0,
|
||||
range: 2.5,
|
||||
angle: 30.0,
|
||||
base_buildup_duration: 1.3,
|
||||
base_swing_duration: 0.1,
|
||||
melee_constructor: (
|
||||
kind: Bash(
|
||||
damage: 44,
|
||||
poise: 20,
|
||||
knockback: 3,
|
||||
energy_regen: 0,
|
||||
),
|
||||
range: 2.5,
|
||||
angle: 30.0,
|
||||
),
|
||||
buildup_duration: 1.3,
|
||||
swing_duration: 0.1,
|
||||
hit_timing: 0.5,
|
||||
base_recover_duration: 0.6,
|
||||
forward_movement: 2.0,
|
||||
damage_kind: Crushing,
|
||||
recover_duration: 0.6,
|
||||
movement: (
|
||||
swing: Some(Forward(2.0)),
|
||||
),
|
||||
ori_modifier: 0.7,
|
||||
),
|
||||
(
|
||||
stage: 2,
|
||||
base_damage: 44.0,
|
||||
damage_increase: 0,
|
||||
base_poise_damage: 20,
|
||||
poise_damage_increase: 0,
|
||||
knockback: 3.0,
|
||||
range: 2.5,
|
||||
angle: 30.0,
|
||||
base_buildup_duration: 0.8,
|
||||
base_swing_duration: 0.1,
|
||||
melee_constructor: (
|
||||
kind: Bash(
|
||||
damage: 44,
|
||||
poise: 20,
|
||||
knockback: 3,
|
||||
energy_regen: 0,
|
||||
),
|
||||
range: 2.5,
|
||||
angle: 30.0,
|
||||
),
|
||||
buildup_duration: 0.8,
|
||||
swing_duration: 0.1,
|
||||
hit_timing: 0.5,
|
||||
base_recover_duration: 0.6,
|
||||
forward_movement: 1.5,
|
||||
damage_kind: Crushing,
|
||||
recover_duration: 0.6,
|
||||
movement: (
|
||||
swing: Some(Forward(1.5)),
|
||||
),
|
||||
ori_modifier: 0.7,
|
||||
),
|
||||
(
|
||||
stage: 3,
|
||||
base_damage: 44.0,
|
||||
damage_increase: 0,
|
||||
base_poise_damage: 20,
|
||||
poise_damage_increase: 0,
|
||||
knockback: 3.0,
|
||||
range: 2.5,
|
||||
angle: 30.0,
|
||||
base_buildup_duration: 0.8,
|
||||
base_swing_duration: 0.1,
|
||||
melee_constructor: (
|
||||
kind: Bash(
|
||||
damage: 44,
|
||||
poise: 20,
|
||||
knockback: 3,
|
||||
energy_regen: 0,
|
||||
),
|
||||
range: 2.5,
|
||||
angle: 30.0,
|
||||
),
|
||||
buildup_duration: 0.8,
|
||||
swing_duration: 0.1,
|
||||
hit_timing: 0.5,
|
||||
base_recover_duration: 0.6,
|
||||
forward_movement: 1.5,
|
||||
damage_kind: Crushing,
|
||||
recover_duration: 0.6,
|
||||
movement: (
|
||||
swing: Some(Forward(1.5)),
|
||||
),
|
||||
ori_modifier: 0.7,
|
||||
),
|
||||
],
|
||||
initial_energy_gain: 0,
|
||||
max_energy_gain: 0,
|
||||
energy_increase: 0,
|
||||
speed_increase: 0.0,
|
||||
max_speed_increase: 0.0,
|
||||
scales_from_combo: 0,
|
||||
ori_modifier: 0.7,
|
||||
energy_cost_per_strike: 0,
|
||||
)
|
||||
|
@ -1,75 +1,85 @@
|
||||
ComboMelee(
|
||||
stage_data: [
|
||||
ComboMelee2(
|
||||
strikes: [
|
||||
(
|
||||
stage: 1,
|
||||
base_damage: 12.0,
|
||||
damage_increase: 0,
|
||||
base_poise_damage: 15,
|
||||
poise_damage_increase: 0,
|
||||
knockback: 1.0,
|
||||
range: 2.5,
|
||||
angle: 30.0,
|
||||
base_buildup_duration: 1.2,
|
||||
base_swing_duration: 0.1,
|
||||
melee_constructor: (
|
||||
kind: Bash(
|
||||
damage: 12,
|
||||
poise: 15,
|
||||
knockback: 1,
|
||||
energy_regen: 0,
|
||||
),
|
||||
range: 2.5,
|
||||
angle: 30.0,
|
||||
),
|
||||
buildup_duration: 1.2,
|
||||
swing_duration: 0.1,
|
||||
hit_timing: 0.5,
|
||||
base_recover_duration: 0.2,
|
||||
forward_movement: 1.5,
|
||||
damage_kind: Crushing,
|
||||
recover_duration: 0.2,
|
||||
movement: (
|
||||
swing: Some(Forward(1.5)),
|
||||
),
|
||||
ori_modifier: 0.8,
|
||||
),
|
||||
(
|
||||
stage: 2,
|
||||
base_damage: 12.0,
|
||||
damage_increase: 0,
|
||||
base_poise_damage: 15,
|
||||
poise_damage_increase: 0,
|
||||
knockback: 1.0,
|
||||
range: 2.5,
|
||||
angle: 30.0,
|
||||
base_buildup_duration: 0.3,
|
||||
base_swing_duration: 0.07,
|
||||
melee_constructor: (
|
||||
kind: Bash(
|
||||
damage: 12,
|
||||
poise: 15,
|
||||
knockback: 1,
|
||||
energy_regen: 0,
|
||||
),
|
||||
range: 2.5,
|
||||
angle: 30.0,
|
||||
),
|
||||
buildup_duration: 0.3,
|
||||
swing_duration: 0.07,
|
||||
hit_timing: 0.5,
|
||||
base_recover_duration: 0.2,
|
||||
forward_movement: 0.8,
|
||||
damage_kind: Crushing,
|
||||
recover_duration: 0.2,
|
||||
movement: (
|
||||
swing: Some(Forward(0.8)),
|
||||
),
|
||||
ori_modifier: 0.8,
|
||||
),
|
||||
(
|
||||
stage: 3,
|
||||
base_damage: 12.0,
|
||||
damage_increase: 0,
|
||||
base_poise_damage: 15,
|
||||
poise_damage_increase: 0,
|
||||
knockback: 1.0,
|
||||
range: 2.5,
|
||||
angle: 30.0,
|
||||
base_buildup_duration: 0.4,
|
||||
base_swing_duration: 0.07,
|
||||
melee_constructor: (
|
||||
kind: Bash(
|
||||
damage: 12,
|
||||
poise: 15,
|
||||
knockback: 1,
|
||||
energy_regen: 0,
|
||||
),
|
||||
range: 2.5,
|
||||
angle: 30.0,
|
||||
),
|
||||
buildup_duration: 0.4,
|
||||
swing_duration: 0.07,
|
||||
hit_timing: 0.5,
|
||||
base_recover_duration: 0.2,
|
||||
forward_movement: 0.8,
|
||||
damage_kind: Crushing,
|
||||
recover_duration: 0.2,
|
||||
movement: (
|
||||
swing: Some(Forward(0.8)),
|
||||
),
|
||||
ori_modifier: 0.8,
|
||||
),
|
||||
(
|
||||
stage: 4,
|
||||
base_damage: 12.0,
|
||||
damage_increase: 0,
|
||||
base_poise_damage: 15,
|
||||
poise_damage_increase: 0,
|
||||
knockback: 8.0,
|
||||
range: 2.5,
|
||||
angle: 30.0,
|
||||
base_buildup_duration: 0.4,
|
||||
base_swing_duration: 0.07,
|
||||
melee_constructor: (
|
||||
kind: Bash(
|
||||
damage: 12,
|
||||
poise: 15,
|
||||
knockback: 8,
|
||||
energy_regen: 0,
|
||||
),
|
||||
range: 2.5,
|
||||
angle: 30.0,
|
||||
),
|
||||
buildup_duration: 0.4,
|
||||
swing_duration: 0.07,
|
||||
hit_timing: 0.5,
|
||||
base_recover_duration: 0.2,
|
||||
forward_movement: 0.8,
|
||||
damage_kind: Crushing,
|
||||
recover_duration: 0.2,
|
||||
movement: (
|
||||
swing: Some(Forward(0.8)),
|
||||
),
|
||||
ori_modifier: 0.8,
|
||||
),
|
||||
],
|
||||
initial_energy_gain: 0,
|
||||
max_energy_gain: 0,
|
||||
energy_increase: 0,
|
||||
speed_increase: 0.0,
|
||||
max_speed_increase: 0.0,
|
||||
scales_from_combo: 0,
|
||||
ori_modifier: 0.8,
|
||||
energy_cost_per_strike: 0,
|
||||
)
|
||||
|
@ -1,59 +1,65 @@
|
||||
ComboMelee(
|
||||
stage_data: [
|
||||
ComboMelee2(
|
||||
strikes: [
|
||||
(
|
||||
stage: 1,
|
||||
base_damage: 16.0,
|
||||
damage_increase: 0,
|
||||
base_poise_damage: 0,
|
||||
poise_damage_increase: 22,
|
||||
knockback: 10.0,
|
||||
range: 2.2,
|
||||
angle: 30.0,
|
||||
base_buildup_duration: 1.3,
|
||||
base_swing_duration: 0.1,
|
||||
melee_constructor: (
|
||||
kind: Bash(
|
||||
damage: 16,
|
||||
poise: 22,
|
||||
knockback: 10,
|
||||
energy_regen: 0,
|
||||
),
|
||||
range: 2.2,
|
||||
angle: 30.0,
|
||||
),
|
||||
buildup_duration: 1.3,
|
||||
swing_duration: 0.1,
|
||||
hit_timing: 0.5,
|
||||
base_recover_duration: 0.4,
|
||||
forward_movement: 2.0,
|
||||
damage_kind: Crushing,
|
||||
recover_duration: 0.4,
|
||||
movement: (
|
||||
swing: Some(Forward(2.0)),
|
||||
),
|
||||
ori_modifier: 0.7,
|
||||
),
|
||||
(
|
||||
stage: 2,
|
||||
base_damage: 16.0,
|
||||
damage_increase: 0,
|
||||
base_poise_damage: 22,
|
||||
poise_damage_increase: 0,
|
||||
knockback: 10.0,
|
||||
range: 2.2,
|
||||
angle: 30.0,
|
||||
base_buildup_duration: 0.4,
|
||||
base_swing_duration: 0.1,
|
||||
melee_constructor: (
|
||||
kind: Bash(
|
||||
damage: 16,
|
||||
poise: 22,
|
||||
knockback: 10,
|
||||
energy_regen: 0,
|
||||
),
|
||||
range: 2.2,
|
||||
angle: 30.0,
|
||||
),
|
||||
buildup_duration: 0.4,
|
||||
swing_duration: 0.1,
|
||||
hit_timing: 0.5,
|
||||
base_recover_duration: 0.4,
|
||||
forward_movement: 1.0,
|
||||
damage_kind: Crushing,
|
||||
recover_duration: 0.4,
|
||||
movement: (
|
||||
swing: Some(Forward(1.0)),
|
||||
),
|
||||
ori_modifier: 0.7,
|
||||
),
|
||||
(
|
||||
stage: 3,
|
||||
base_damage: 16.0,
|
||||
damage_increase: 0,
|
||||
base_poise_damage: 22,
|
||||
poise_damage_increase: 0,
|
||||
knockback: 10.0,
|
||||
range: 2.2,
|
||||
angle: 30.0,
|
||||
base_buildup_duration: 0.2,
|
||||
base_swing_duration: 0.1,
|
||||
melee_constructor: (
|
||||
kind: Bash(
|
||||
damage: 16,
|
||||
poise: 22,
|
||||
knockback: 10,
|
||||
energy_regen: 0,
|
||||
),
|
||||
range: 2.2,
|
||||
angle: 30.0,
|
||||
),
|
||||
buildup_duration: 0.2,
|
||||
swing_duration: 0.1,
|
||||
hit_timing: 0.5,
|
||||
base_recover_duration: 0.4,
|
||||
forward_movement: 1.0,
|
||||
damage_kind: Crushing,
|
||||
recover_duration: 0.4,
|
||||
movement: (
|
||||
swing: Some(Forward(1.0)),
|
||||
),
|
||||
ori_modifier: 0.7,
|
||||
),
|
||||
],
|
||||
initial_energy_gain: 0,
|
||||
max_energy_gain: 0,
|
||||
energy_increase: 0,
|
||||
speed_increase: 0.0,
|
||||
max_speed_increase: 0.0,
|
||||
scales_from_combo: 0,
|
||||
ori_modifier: 0.7,
|
||||
energy_cost_per_strike: 0,
|
||||
)
|
||||
|
@ -1,27 +1,25 @@
|
||||
ComboMelee(
|
||||
stage_data: [
|
||||
ComboMelee2(
|
||||
strikes: [
|
||||
(
|
||||
stage: 1,
|
||||
base_damage: 20.0,
|
||||
damage_increase: 0,
|
||||
base_poise_damage: 28,
|
||||
poise_damage_increase: 0,
|
||||
knockback: 3.0,
|
||||
range: 2.7,
|
||||
angle: 60.0,
|
||||
base_buildup_duration: 0.8,
|
||||
base_swing_duration: 0.1,
|
||||
melee_constructor: (
|
||||
kind: Bash(
|
||||
damage: 20,
|
||||
poise: 28,
|
||||
knockback: 3,
|
||||
energy_regen: 0,
|
||||
),
|
||||
range: 2.7,
|
||||
angle: 60.0,
|
||||
),
|
||||
buildup_duration: 0.8,
|
||||
swing_duration: 0.1,
|
||||
hit_timing: 0.5,
|
||||
base_recover_duration: 0.8,
|
||||
forward_movement: 1.0,
|
||||
damage_kind: Crushing,
|
||||
recover_duration: 0.8,
|
||||
movement: (
|
||||
swing: Some(Forward(1.0)),
|
||||
),
|
||||
ori_modifier: 0.7,
|
||||
),
|
||||
],
|
||||
initial_energy_gain: 0,
|
||||
max_energy_gain: 0,
|
||||
energy_increase: 0,
|
||||
speed_increase: 0.0,
|
||||
max_speed_increase: 0.0,
|
||||
scales_from_combo: 0,
|
||||
ori_modifier: 0.7,
|
||||
energy_cost_per_strike: 0,
|
||||
)
|
||||
|
@ -1,59 +1,62 @@
|
||||
ComboMelee(
|
||||
stage_data: [
|
||||
ComboMelee2(
|
||||
strikes: [
|
||||
(
|
||||
stage: 1,
|
||||
base_damage: 10.0,
|
||||
damage_increase: 0,
|
||||
base_poise_damage: 15,
|
||||
poise_damage_increase: 0,
|
||||
knockback: 5.0,
|
||||
range: 2.5,
|
||||
angle: 30.0,
|
||||
base_buildup_duration: 0.9,
|
||||
base_swing_duration: 0.07,
|
||||
melee_constructor: (
|
||||
kind: Bash(
|
||||
damage: 10,
|
||||
poise: 15,
|
||||
knockback: 5,
|
||||
energy_regen: 0,
|
||||
),
|
||||
range: 2.5,
|
||||
angle: 30.0,
|
||||
),
|
||||
buildup_duration: 0.9,
|
||||
swing_duration: 0.07,
|
||||
hit_timing: 0.5,
|
||||
base_recover_duration: 0.4,
|
||||
forward_movement: 1.0,
|
||||
damage_kind: Crushing,
|
||||
recover_duration: 0.4,
|
||||
movement: (
|
||||
swing: Some(Forward(1.0)),
|
||||
),
|
||||
ori_modifier: 0.7,
|
||||
),
|
||||
(
|
||||
stage: 2,
|
||||
base_damage: 10.0,
|
||||
damage_increase: 0,
|
||||
base_poise_damage: 18,
|
||||
poise_damage_increase: 0,
|
||||
knockback: 5.0,
|
||||
range: 2.5,
|
||||
angle: 30.0,
|
||||
base_buildup_duration: 0.8,
|
||||
base_swing_duration: 0.07,
|
||||
melee_constructor: (
|
||||
kind: Bash(
|
||||
damage: 10,
|
||||
poise: 18,
|
||||
knockback: 5,
|
||||
energy_regen: 0,
|
||||
),
|
||||
range: 2.5,
|
||||
angle: 30.0,
|
||||
),
|
||||
buildup_duration: 0.8,
|
||||
swing_duration: 0.07,
|
||||
hit_timing: 0.5,
|
||||
base_recover_duration: 0.4,
|
||||
forward_movement: 0.0,
|
||||
damage_kind: Crushing,
|
||||
recover_duration: 0.4,
|
||||
ori_modifier: 0.7,
|
||||
),
|
||||
(
|
||||
stage: 3,
|
||||
base_damage: 10.0,
|
||||
damage_increase: 0,
|
||||
base_poise_damage: 20,
|
||||
poise_damage_increase: 0,
|
||||
knockback: 5.0,
|
||||
range: 2.5,
|
||||
angle: 30.0,
|
||||
base_buildup_duration: 0.8,
|
||||
base_swing_duration: 0.07,
|
||||
melee_constructor: (
|
||||
kind: Bash(
|
||||
damage: 10,
|
||||
poise: 20,
|
||||
knockback: 5,
|
||||
energy_regen: 0,
|
||||
),
|
||||
range: 2.5,
|
||||
angle: 30.0,
|
||||
),
|
||||
buildup_duration: 0.8,
|
||||
swing_duration: 0.07,
|
||||
hit_timing: 0.5,
|
||||
base_recover_duration: 0.4,
|
||||
forward_movement: 1.0,
|
||||
damage_kind: Crushing,
|
||||
recover_duration: 0.4,
|
||||
movement: (
|
||||
swing: Some(Forward(1.0)),
|
||||
),
|
||||
ori_modifier: 0.7,
|
||||
),
|
||||
],
|
||||
initial_energy_gain: 0,
|
||||
max_energy_gain: 0,
|
||||
energy_increase: 0,
|
||||
speed_increase: 0.0,
|
||||
max_speed_increase: 0.0,
|
||||
scales_from_combo: 0,
|
||||
ori_modifier: 0.7,
|
||||
energy_cost_per_strike: 0,
|
||||
)
|
||||
|
@ -1,43 +1,45 @@
|
||||
ComboMelee(
|
||||
stage_data: [
|
||||
ComboMelee2(
|
||||
strikes: [
|
||||
(
|
||||
stage: 1,
|
||||
base_damage: 50.0,
|
||||
damage_increase: 0,
|
||||
base_poise_damage: 22,
|
||||
poise_damage_increase: 0,
|
||||
knockback: 4.0,
|
||||
range: 2.5,
|
||||
angle: 30.0,
|
||||
base_buildup_duration: 1.3,
|
||||
base_swing_duration: 0.1,
|
||||
melee_constructor: (
|
||||
kind: Bash(
|
||||
damage: 50,
|
||||
poise: 22,
|
||||
knockback: 4,
|
||||
energy_regen: 0,
|
||||
),
|
||||
range: 2.5,
|
||||
angle: 30.0,
|
||||
),
|
||||
buildup_duration: 1.3,
|
||||
swing_duration: 0.1,
|
||||
hit_timing: 0.5,
|
||||
base_recover_duration: 0.6,
|
||||
forward_movement: 1.0,
|
||||
damage_kind: Crushing,
|
||||
recover_duration: 0.6,
|
||||
movement: (
|
||||
swing: Some(Forward(1.0)),
|
||||
),
|
||||
ori_modifier: 0.7,
|
||||
),
|
||||
(
|
||||
stage: 2,
|
||||
base_damage: 74.0,
|
||||
damage_increase: 0,
|
||||
base_poise_damage: 0,
|
||||
poise_damage_increase: 22,
|
||||
knockback: 4.0,
|
||||
range: 2.5,
|
||||
angle: 30.0,
|
||||
base_buildup_duration: 0.8,
|
||||
base_swing_duration: 0.1,
|
||||
melee_constructor: (
|
||||
kind: Bash(
|
||||
damage: 74,
|
||||
poise: 22,
|
||||
knockback: 4,
|
||||
energy_regen: 0,
|
||||
),
|
||||
range: 2.5,
|
||||
angle: 30.0,
|
||||
),
|
||||
buildup_duration: 0.8,
|
||||
swing_duration: 0.1,
|
||||
hit_timing: 0.5,
|
||||
base_recover_duration: 0.6,
|
||||
forward_movement: 0.5,
|
||||
damage_kind: Crushing,
|
||||
recover_duration: 0.6,
|
||||
movement: (
|
||||
swing: Some(Forward(0.5)),
|
||||
),
|
||||
ori_modifier: 0.7,
|
||||
),
|
||||
],
|
||||
initial_energy_gain: 0,
|
||||
max_energy_gain: 0,
|
||||
energy_increase: 0,
|
||||
speed_increase: 0.0,
|
||||
max_speed_increase: 0.0,
|
||||
scales_from_combo: 0,
|
||||
ori_modifier: 0.7,
|
||||
energy_cost_per_strike: 0,
|
||||
)
|
||||
|
@ -1,43 +1,45 @@
|
||||
ComboMelee(
|
||||
stage_data: [
|
||||
ComboMelee2(
|
||||
strikes: [
|
||||
(
|
||||
stage: 1,
|
||||
base_damage: 16.0,
|
||||
damage_increase: 0,
|
||||
base_poise_damage: 30,
|
||||
poise_damage_increase: 0,
|
||||
knockback: 4.0,
|
||||
range: 2.2,
|
||||
angle: 30.0,
|
||||
base_buildup_duration: 1.3,
|
||||
base_swing_duration: 0.1,
|
||||
melee_constructor: (
|
||||
kind: Bash(
|
||||
damage: 16,
|
||||
poise: 30,
|
||||
knockback: 4,
|
||||
energy_regen: 0,
|
||||
),
|
||||
range: 2.2,
|
||||
angle: 30.0,
|
||||
),
|
||||
buildup_duration: 1.3,
|
||||
swing_duration: 0.1,
|
||||
hit_timing: 0.5,
|
||||
base_recover_duration: 0.6,
|
||||
forward_movement: 1.0,
|
||||
damage_kind: Crushing,
|
||||
recover_duration: 0.6,
|
||||
movement: (
|
||||
swing: Some(Forward(1.0)),
|
||||
),
|
||||
ori_modifier: 0.8,
|
||||
),
|
||||
(
|
||||
stage: 2,
|
||||
base_damage: 16.0,
|
||||
damage_increase: 0,
|
||||
base_poise_damage: 30,
|
||||
poise_damage_increase: 0,
|
||||
knockback: 4.0,
|
||||
range: 2.2,
|
||||
angle: 30.0,
|
||||
base_buildup_duration: 0.8,
|
||||
base_swing_duration: 0.1,
|
||||
melee_constructor: (
|
||||
kind: Bash(
|
||||
damage: 16,
|
||||
poise: 30,
|
||||
knockback: 4,
|
||||
energy_regen: 0,
|
||||
),
|
||||
range: 2.2,
|
||||
angle: 30.0,
|
||||
),
|
||||
buildup_duration: 0.8,
|
||||
swing_duration: 0.1,
|
||||
hit_timing: 0.5,
|
||||
base_recover_duration: 0.6,
|
||||
forward_movement: 1.5,
|
||||
damage_kind: Crushing,
|
||||
recover_duration: 0.6,
|
||||
movement: (
|
||||
swing: Some(Forward(1.5)),
|
||||
),
|
||||
ori_modifier: 0.8,
|
||||
),
|
||||
],
|
||||
initial_energy_gain: 0,
|
||||
max_energy_gain: 0,
|
||||
energy_increase: 0,
|
||||
speed_increase: 0.0,
|
||||
max_speed_increase: 0.0,
|
||||
scales_from_combo: 0,
|
||||
ori_modifier: 0.8,
|
||||
energy_cost_per_strike: 0,
|
||||
)
|
||||
|
@ -1,59 +1,65 @@
|
||||
ComboMelee(
|
||||
stage_data: [
|
||||
ComboMelee2(
|
||||
strikes: [
|
||||
(
|
||||
stage: 1,
|
||||
base_damage: 20.0,
|
||||
damage_increase: 0,
|
||||
base_poise_damage: 15,
|
||||
poise_damage_increase: 0,
|
||||
knockback: 5.0,
|
||||
range: 2.2,
|
||||
angle: 40.0,
|
||||
base_buildup_duration: 1.2,
|
||||
base_swing_duration: 0.15,
|
||||
melee_constructor: (
|
||||
kind: Bash(
|
||||
damage: 20,
|
||||
poise: 15,
|
||||
knockback: 5,
|
||||
energy_regen: 0,
|
||||
),
|
||||
range: 2.2,
|
||||
angle: 40.0,
|
||||
),
|
||||
buildup_duration: 1.2,
|
||||
swing_duration: 0.15,
|
||||
hit_timing: 0.5,
|
||||
base_recover_duration: 0.8,
|
||||
forward_movement: 0.3,
|
||||
damage_kind: Crushing,
|
||||
recover_duration: 0.8,
|
||||
movement: (
|
||||
swing: Some(Forward(0.3)),
|
||||
),
|
||||
ori_modifier: 0.8,
|
||||
),
|
||||
(
|
||||
stage: 2,
|
||||
base_damage: 20.0,
|
||||
damage_increase: 0,
|
||||
base_poise_damage: 17,
|
||||
poise_damage_increase: 0,
|
||||
knockback: 5.0,
|
||||
range: 2.2,
|
||||
angle: 40.0,
|
||||
base_buildup_duration: 0.8,
|
||||
base_swing_duration: 0.15,
|
||||
melee_constructor: (
|
||||
kind: Bash(
|
||||
damage: 20,
|
||||
poise: 17,
|
||||
knockback: 5,
|
||||
energy_regen: 0,
|
||||
),
|
||||
range: 2.2,
|
||||
angle: 40.0,
|
||||
),
|
||||
buildup_duration: 0.8,
|
||||
swing_duration: 0.15,
|
||||
hit_timing: 0.5,
|
||||
base_recover_duration: 0.6,
|
||||
forward_movement: 0.5,
|
||||
damage_kind: Crushing,
|
||||
recover_duration: 0.6,
|
||||
movement: (
|
||||
swing: Some(Forward(0.5)),
|
||||
),
|
||||
ori_modifier: 0.8,
|
||||
),
|
||||
(
|
||||
stage: 3,
|
||||
base_damage: 20.0,
|
||||
damage_increase: 0,
|
||||
base_poise_damage: 20,
|
||||
poise_damage_increase: 0,
|
||||
knockback: 5.0,
|
||||
range: 2.2,
|
||||
angle: 40.0,
|
||||
base_buildup_duration: 0.8,
|
||||
base_swing_duration: 0.15,
|
||||
melee_constructor: (
|
||||
kind: Bash(
|
||||
damage: 20,
|
||||
poise: 20,
|
||||
knockback: 5,
|
||||
energy_regen: 0,
|
||||
),
|
||||
range: 2.2,
|
||||
angle: 40.0,
|
||||
),
|
||||
buildup_duration: 0.8,
|
||||
swing_duration: 0.15,
|
||||
hit_timing: 0.5,
|
||||
base_recover_duration: 0.6,
|
||||
forward_movement: 0.5,
|
||||
damage_kind: Crushing,
|
||||
recover_duration: 0.6,
|
||||
movement: (
|
||||
swing: Some(Forward(0.5)),
|
||||
),
|
||||
ori_modifier: 0.8,
|
||||
),
|
||||
],
|
||||
initial_energy_gain: 0,
|
||||
max_energy_gain: 0,
|
||||
energy_increase: 0,
|
||||
speed_increase: 0.0,
|
||||
max_speed_increase: 0.0,
|
||||
scales_from_combo: 0,
|
||||
ori_modifier: 0.8,
|
||||
energy_cost_per_strike: 0,
|
||||
)
|
||||
|
@ -1,27 +1,18 @@
|
||||
ComboMelee(
|
||||
stage_data: [
|
||||
(
|
||||
stage: 1,
|
||||
base_damage: 6.0,
|
||||
damage_increase: 0,
|
||||
base_poise_damage: 10,
|
||||
poise_damage_increase: 0,
|
||||
knockback: 1.0,
|
||||
range: 1.5,
|
||||
angle: 50.0,
|
||||
base_buildup_duration: 0.6,
|
||||
base_swing_duration: 0.15,
|
||||
hit_timing: 0.5,
|
||||
base_recover_duration: 0.6,
|
||||
forward_movement: 1.0,
|
||||
damage_kind: Crushing,
|
||||
BasicMelee(
|
||||
energy_cost: 0,
|
||||
buildup_duration: 0.6,
|
||||
swing_duration: 0.15,
|
||||
hit_timing: 0.5,
|
||||
recover_duration: 0.6,
|
||||
melee_constructor: (
|
||||
kind: Bash(
|
||||
damage: 6,
|
||||
poise: 10,
|
||||
knockback: 1,
|
||||
energy_regen: 0,
|
||||
),
|
||||
],
|
||||
initial_energy_gain: 0,
|
||||
max_energy_gain: 0,
|
||||
energy_increase: 0,
|
||||
speed_increase: 0.0,
|
||||
max_speed_increase: 0.0,
|
||||
scales_from_combo: 0,
|
||||
range: 1.5,
|
||||
angle: 50.0,
|
||||
),
|
||||
ori_modifier: 0.7,
|
||||
)
|
||||
|
@ -1,43 +1,45 @@
|
||||
ComboMelee(
|
||||
stage_data: [
|
||||
ComboMelee2(
|
||||
strikes: [
|
||||
(
|
||||
stage: 1,
|
||||
base_damage: 28.0,
|
||||
damage_increase: 0,
|
||||
base_poise_damage: 7.5,
|
||||
poise_damage_increase: 0,
|
||||
knockback: 3.0,
|
||||
range: 3,
|
||||
angle: 75.0,
|
||||
base_buildup_duration: 1.2,
|
||||
base_swing_duration: 0.07,
|
||||
melee_constructor: (
|
||||
kind: Stab(
|
||||
damage: 28,
|
||||
poise: 7.5,
|
||||
knockback: 3,
|
||||
energy_regen: 5,
|
||||
),
|
||||
range: 3.0,
|
||||
angle: 75.0,
|
||||
),
|
||||
buildup_duration: 1.2,
|
||||
swing_duration: 0.07,
|
||||
hit_timing: 0.5,
|
||||
base_recover_duration: 0.3,
|
||||
forward_movement: 0.25,
|
||||
damage_kind: Piercing,
|
||||
recover_duration: 0.3,
|
||||
movement: (
|
||||
swing: Some(Forward(0.25)),
|
||||
),
|
||||
ori_modifier: 0.5,
|
||||
),
|
||||
(
|
||||
stage: 2,
|
||||
base_damage: 28.0,
|
||||
damage_increase: 0,
|
||||
base_poise_damage: 7.5,
|
||||
poise_damage_increase: 0,
|
||||
knockback: 3.0,
|
||||
range: 3,
|
||||
angle: 75.0,
|
||||
base_buildup_duration: 0.2,
|
||||
base_swing_duration: 0.07,
|
||||
melee_constructor: (
|
||||
kind: Stab(
|
||||
damage: 28,
|
||||
poise: 7.5,
|
||||
knockback: 3,
|
||||
energy_regen: 5,
|
||||
),
|
||||
range: 3.0,
|
||||
angle: 75.0,
|
||||
),
|
||||
buildup_duration: 0.2,
|
||||
swing_duration: 0.07,
|
||||
hit_timing: 0.5,
|
||||
base_recover_duration: 0.6,
|
||||
forward_movement: 0.25,
|
||||
damage_kind: Piercing,
|
||||
recover_duration: 0.6,
|
||||
movement: (
|
||||
swing: Some(Forward(0.25)),
|
||||
),
|
||||
ori_modifier: 0.5,
|
||||
),
|
||||
],
|
||||
initial_energy_gain: 5,
|
||||
max_energy_gain: 5,
|
||||
energy_increase: 0,
|
||||
speed_increase: 0.0,
|
||||
max_speed_increase: 0.0,
|
||||
scales_from_combo: 0,
|
||||
ori_modifier: 0.65,
|
||||
)
|
||||
energy_cost_per_strike: 0,
|
||||
)
|
||||
|
@ -1,27 +1,18 @@
|
||||
ComboMelee(
|
||||
stage_data: [
|
||||
(
|
||||
stage: 1,
|
||||
base_damage: 1.0,
|
||||
damage_increase: 0,
|
||||
base_poise_damage: 0,
|
||||
poise_damage_increase: 0,
|
||||
knockback: 0.0,
|
||||
range: 2.5,
|
||||
angle: 150.0,
|
||||
base_buildup_duration: 0.1,
|
||||
base_swing_duration: 0.07,
|
||||
hit_timing: 0.5,
|
||||
base_recover_duration: 0.2,
|
||||
forward_movement: 0.0,
|
||||
damage_kind: Piercing,
|
||||
BasicMelee(
|
||||
energy_cost: 0,
|
||||
buildup_duration: 0.1,
|
||||
swing_duration: 0.07,
|
||||
hit_timing: 0.5,
|
||||
recover_duration: 0.2,
|
||||
melee_constructor: (
|
||||
kind: Stab(
|
||||
damage: 1,
|
||||
poise: 0,
|
||||
knockback: 0,
|
||||
energy_regen: 0,
|
||||
),
|
||||
],
|
||||
initial_energy_gain: 0,
|
||||
max_energy_gain: 0,
|
||||
energy_increase: 0,
|
||||
speed_increase: 0.0,
|
||||
max_speed_increase: 0.0,
|
||||
scales_from_combo: 0,
|
||||
range: 2.5,
|
||||
angle: 150.0,
|
||||
),
|
||||
ori_modifier: 0.6,
|
||||
)
|
||||
|
@ -1,27 +1,18 @@
|
||||
ComboMelee(
|
||||
stage_data: [
|
||||
(
|
||||
stage: 1,
|
||||
base_damage: 60.0,
|
||||
damage_increase: 0,
|
||||
base_poise_damage: 40,
|
||||
poise_damage_increase: 0,
|
||||
knockback: 3.0,
|
||||
range: 3.5,
|
||||
angle: 60.0,
|
||||
base_buildup_duration: 1.8,
|
||||
base_swing_duration: 0.1,
|
||||
hit_timing: 0.5,
|
||||
base_recover_duration: 1.8,
|
||||
forward_movement: 3.0,
|
||||
damage_kind: Crushing,
|
||||
BasicMelee(
|
||||
energy_cost: 0,
|
||||
buildup_duration: 1.8,
|
||||
swing_duration: 0.1,
|
||||
hit_timing: 0.5,
|
||||
recover_duration: 1.8,
|
||||
melee_constructor: (
|
||||
kind: Bash(
|
||||
damage: 60,
|
||||
poise: 40,
|
||||
knockback: 3,
|
||||
energy_regen: 0,
|
||||
),
|
||||
],
|
||||
initial_energy_gain: 0,
|
||||
max_energy_gain: 0,
|
||||
energy_increase: 0,
|
||||
speed_increase: 0.0,
|
||||
max_speed_increase: 0.0,
|
||||
scales_from_combo: 0,
|
||||
range: 3.5,
|
||||
angle: 60.0,
|
||||
),
|
||||
ori_modifier: 0.7,
|
||||
)
|
||||
|
@ -1,27 +1,25 @@
|
||||
ComboMelee(
|
||||
stage_data: [
|
||||
ComboMelee2(
|
||||
strikes: [
|
||||
(
|
||||
stage: 1,
|
||||
base_damage: 54.0,
|
||||
damage_increase: 0,
|
||||
base_poise_damage: 40,
|
||||
poise_damage_increase: 0,
|
||||
knockback: 4.0,
|
||||
range: 7.5,
|
||||
angle: 60.0,
|
||||
base_buildup_duration: 0.8,
|
||||
base_swing_duration: 0.15,
|
||||
melee_constructor: (
|
||||
kind: Bash(
|
||||
damage: 54,
|
||||
poise: 40,
|
||||
knockback: 4,
|
||||
energy_regen: 0,
|
||||
),
|
||||
range: 7.5,
|
||||
angle: 60.0,
|
||||
),
|
||||
buildup_duration: 0.8,
|
||||
swing_duration: 0.15,
|
||||
hit_timing: 0.5,
|
||||
base_recover_duration: 0.8,
|
||||
forward_movement: 3.0,
|
||||
damage_kind: Crushing,
|
||||
recover_duration: 0.8,
|
||||
movement: (
|
||||
swing: Some(Forward(3.0)),
|
||||
),
|
||||
ori_modifier: 0.7,
|
||||
),
|
||||
],
|
||||
initial_energy_gain: 0,
|
||||
max_energy_gain: 0,
|
||||
energy_increase: 0,
|
||||
speed_increase: 0.0,
|
||||
max_speed_increase: 0.0,
|
||||
scales_from_combo: 0,
|
||||
ori_modifier: 0.7,
|
||||
energy_cost_per_strike: 0,
|
||||
)
|
||||
|
@ -1,59 +1,65 @@
|
||||
ComboMelee(
|
||||
stage_data: [
|
||||
ComboMelee2(
|
||||
strikes: [
|
||||
(
|
||||
stage: 1,
|
||||
base_damage: 40.0,
|
||||
damage_increase: 0,
|
||||
base_poise_damage: 32.5,
|
||||
poise_damage_increase: 0,
|
||||
knockback: 3.0,
|
||||
range: 7.5,
|
||||
angle: 30.0,
|
||||
base_buildup_duration: 1.3,
|
||||
base_swing_duration: 0.15,
|
||||
melee_constructor: (
|
||||
kind: Bash(
|
||||
damage: 40,
|
||||
poise: 32.5,
|
||||
knockback: 3,
|
||||
energy_regen: 0,
|
||||
),
|
||||
range: 7.5,
|
||||
angle: 30.0,
|
||||
),
|
||||
buildup_duration: 1.3,
|
||||
swing_duration: 0.15,
|
||||
hit_timing: 0.5,
|
||||
base_recover_duration: 0.5,
|
||||
forward_movement: 1.0,
|
||||
damage_kind: Crushing,
|
||||
recover_duration: 0.5,
|
||||
movement: (
|
||||
swing: Some(Forward(1.0)),
|
||||
),
|
||||
ori_modifier: 0.7,
|
||||
),
|
||||
(
|
||||
stage: 2,
|
||||
base_damage: 50.0,
|
||||
damage_increase: 0,
|
||||
base_poise_damage: 32.5,
|
||||
poise_damage_increase: 0,
|
||||
knockback: 3.0,
|
||||
range: 5.5,
|
||||
angle: 30.0,
|
||||
base_buildup_duration: 0.2,
|
||||
base_swing_duration: 0.15,
|
||||
melee_constructor: (
|
||||
kind: Bash(
|
||||
damage: 50,
|
||||
poise: 32.5,
|
||||
knockback: 3,
|
||||
energy_regen: 0,
|
||||
),
|
||||
range: 5.5,
|
||||
angle: 30.0,
|
||||
),
|
||||
buildup_duration: 0.2,
|
||||
swing_duration: 0.15,
|
||||
hit_timing: 0.5,
|
||||
base_recover_duration: 0.3,
|
||||
forward_movement: 1.0,
|
||||
damage_kind: Crushing,
|
||||
recover_duration: 0.3,
|
||||
movement: (
|
||||
swing: Some(Forward(1.0)),
|
||||
),
|
||||
ori_modifier: 0.7,
|
||||
),
|
||||
(
|
||||
stage: 3,
|
||||
base_damage: 60.0,
|
||||
damage_increase: 0,
|
||||
base_poise_damage: 32.5,
|
||||
poise_damage_increase: 0,
|
||||
knockback: 25.0,
|
||||
range: 5.5,
|
||||
angle: 30.0,
|
||||
base_buildup_duration: 0.4,
|
||||
base_swing_duration: 0.125,
|
||||
melee_constructor: (
|
||||
kind: Bash(
|
||||
damage: 60,
|
||||
poise: 32.5,
|
||||
knockback: 25,
|
||||
energy_regen: 0,
|
||||
),
|
||||
range: 5.5,
|
||||
angle: 30.0,
|
||||
),
|
||||
buildup_duration: 0.4,
|
||||
swing_duration: 0.125,
|
||||
hit_timing: 0.5,
|
||||
base_recover_duration: 1.6,
|
||||
forward_movement: 1.0,
|
||||
damage_kind: Crushing,
|
||||
recover_duration: 1.6,
|
||||
movement: (
|
||||
swing: Some(Forward(1.0)),
|
||||
),
|
||||
ori_modifier: 0.7,
|
||||
),
|
||||
],
|
||||
initial_energy_gain: 0,
|
||||
max_energy_gain: 0,
|
||||
energy_increase: 0,
|
||||
speed_increase: 0.0,
|
||||
max_speed_increase: 0.0,
|
||||
scales_from_combo: 0,
|
||||
ori_modifier: 0.7,
|
||||
energy_cost_per_strike: 0,
|
||||
)
|
||||
|
@ -1,27 +1,25 @@
|
||||
ComboMelee(
|
||||
stage_data: [
|
||||
ComboMelee2(
|
||||
strikes: [
|
||||
(
|
||||
stage: 1,
|
||||
base_damage: 22.0,
|
||||
damage_increase: 0,
|
||||
base_poise_damage: 28,
|
||||
poise_damage_increase: 0,
|
||||
knockback: 2.0,
|
||||
range: 3.0,
|
||||
angle: 15.0,
|
||||
base_buildup_duration: 0.8,
|
||||
base_swing_duration: 0.15,
|
||||
melee_constructor: (
|
||||
kind: Bash(
|
||||
damage: 22,
|
||||
poise: 28,
|
||||
knockback: 2,
|
||||
energy_regen: 0,
|
||||
),
|
||||
range: 3.0,
|
||||
angle: 15.0,
|
||||
),
|
||||
buildup_duration: 0.8,
|
||||
swing_duration: 0.15,
|
||||
hit_timing: 0.5,
|
||||
base_recover_duration: 0.8,
|
||||
forward_movement: 3.0,
|
||||
damage_kind: Crushing,
|
||||
recover_duration: 0.8,
|
||||
movement: (
|
||||
swing: Some(Forward(3.0)),
|
||||
),
|
||||
ori_modifier: 0.7,
|
||||
),
|
||||
],
|
||||
initial_energy_gain: 0,
|
||||
max_energy_gain: 0,
|
||||
energy_increase: 0,
|
||||
speed_increase: 0.0,
|
||||
max_speed_increase: 0.0,
|
||||
scales_from_combo: 0,
|
||||
ori_modifier: 0.7,
|
||||
energy_cost_per_strike: 0,
|
||||
)
|
||||
|
@ -1,59 +1,65 @@
|
||||
ComboMelee(
|
||||
stage_data: [
|
||||
ComboMelee2(
|
||||
strikes: [
|
||||
(
|
||||
stage: 1,
|
||||
base_damage: 16.5,
|
||||
damage_increase: 0,
|
||||
base_poise_damage: 20,
|
||||
poise_damage_increase: 0,
|
||||
knockback: 3.0,
|
||||
range: 3.0,
|
||||
angle: 15.0,
|
||||
base_buildup_duration: 0.95,
|
||||
base_swing_duration: 0.15,
|
||||
melee_constructor: (
|
||||
kind: Bash(
|
||||
damage: 16.5,
|
||||
poise: 20,
|
||||
knockback: 3,
|
||||
energy_regen: 0,
|
||||
),
|
||||
range: 3.0,
|
||||
angle: 15.0,
|
||||
),
|
||||
buildup_duration: 0.95,
|
||||
swing_duration: 0.15,
|
||||
hit_timing: 0.5,
|
||||
base_recover_duration: 0.50,
|
||||
forward_movement: 1.0,
|
||||
damage_kind: Crushing,
|
||||
recover_duration: 0.5,
|
||||
movement: (
|
||||
swing: Some(Forward(1.0)),
|
||||
),
|
||||
ori_modifier: 0.6,
|
||||
),
|
||||
(
|
||||
stage: 2,
|
||||
base_damage: 30.0,
|
||||
damage_increase: 0,
|
||||
base_poise_damage: 20,
|
||||
poise_damage_increase: 0,
|
||||
knockback: 3.0,
|
||||
range: 3.0,
|
||||
angle: 15.0,
|
||||
base_buildup_duration: 0.65,
|
||||
base_swing_duration: 0.15,
|
||||
melee_constructor: (
|
||||
kind: Bash(
|
||||
damage: 30,
|
||||
poise: 20,
|
||||
knockback: 3,
|
||||
energy_regen: 0,
|
||||
),
|
||||
range: 3.0,
|
||||
angle: 15.0,
|
||||
),
|
||||
buildup_duration: 0.65,
|
||||
swing_duration: 0.15,
|
||||
hit_timing: 0.5,
|
||||
base_recover_duration: 0.50,
|
||||
forward_movement: 1.0,
|
||||
damage_kind: Crushing,
|
||||
recover_duration: 0.5,
|
||||
movement: (
|
||||
swing: Some(Forward(1.0)),
|
||||
),
|
||||
ori_modifier: 0.6,
|
||||
),
|
||||
(
|
||||
stage: 3,
|
||||
base_damage: 36.0,
|
||||
damage_increase: 0,
|
||||
base_poise_damage: 20,
|
||||
poise_damage_increase: 0,
|
||||
knockback: 3.0,
|
||||
range: 3.0,
|
||||
angle: 15.0,
|
||||
base_buildup_duration: 0.525,
|
||||
base_swing_duration: 0.125,
|
||||
melee_constructor: (
|
||||
kind: Bash(
|
||||
damage: 36,
|
||||
poise: 20,
|
||||
knockback: 3,
|
||||
energy_regen: 0,
|
||||
),
|
||||
range: 3.0,
|
||||
angle: 15.0,
|
||||
),
|
||||
buildup_duration: 0.525,
|
||||
swing_duration: 0.125,
|
||||
hit_timing: 0.5,
|
||||
base_recover_duration: 1.25,
|
||||
forward_movement: 1.0,
|
||||
damage_kind: Crushing,
|
||||
recover_duration: 1.25,
|
||||
movement: (
|
||||
swing: Some(Forward(1.0)),
|
||||
),
|
||||
ori_modifier: 0.6,
|
||||
),
|
||||
],
|
||||
initial_energy_gain: 0,
|
||||
max_energy_gain: 0,
|
||||
energy_increase: 0,
|
||||
speed_increase: 0.0,
|
||||
max_speed_increase: 0.0,
|
||||
scales_from_combo: 0,
|
||||
ori_modifier: 0.6,
|
||||
energy_cost_per_strike: 0,
|
||||
)
|
||||
|
@ -1,59 +1,65 @@
|
||||
ComboMelee(
|
||||
stage_data: [
|
||||
ComboMelee2(
|
||||
strikes: [
|
||||
(
|
||||
stage: 1,
|
||||
base_damage: 30.0,
|
||||
damage_increase: 0,
|
||||
base_poise_damage: 17.5,
|
||||
poise_damage_increase: 0,
|
||||
knockback: 3.0,
|
||||
range: 4.5,
|
||||
angle: 30.0,
|
||||
base_buildup_duration: 1.3,
|
||||
base_swing_duration: 0.15,
|
||||
melee_constructor: (
|
||||
kind: Bash(
|
||||
damage: 30,
|
||||
poise: 17.5,
|
||||
knockback: 3,
|
||||
energy_regen: 0,
|
||||
),
|
||||
range: 4.5,
|
||||
angle: 30.0,
|
||||
),
|
||||
buildup_duration: 1.3,
|
||||
swing_duration: 0.15,
|
||||
hit_timing: 0.5,
|
||||
base_recover_duration: 0.5,
|
||||
forward_movement: 1.0,
|
||||
damage_kind: Crushing,
|
||||
recover_duration: 0.5,
|
||||
movement: (
|
||||
swing: Some(Forward(1.0)),
|
||||
),
|
||||
ori_modifier: 0.7,
|
||||
),
|
||||
(
|
||||
stage: 2,
|
||||
base_damage: 30.0,
|
||||
damage_increase: 0,
|
||||
base_poise_damage: 20.5,
|
||||
poise_damage_increase: 0,
|
||||
knockback: 3.0,
|
||||
range: 4.5,
|
||||
angle: 30.0,
|
||||
base_buildup_duration: 0.2,
|
||||
base_swing_duration: 0.15,
|
||||
melee_constructor: (
|
||||
kind: Bash(
|
||||
damage: 30,
|
||||
poise: 20.5,
|
||||
knockback: 3,
|
||||
energy_regen: 0,
|
||||
),
|
||||
range: 4.5,
|
||||
angle: 30.0,
|
||||
),
|
||||
buildup_duration: 0.2,
|
||||
swing_duration: 0.15,
|
||||
hit_timing: 0.5,
|
||||
base_recover_duration: 0.3,
|
||||
forward_movement: 1.0,
|
||||
damage_kind: Crushing,
|
||||
recover_duration: 0.3,
|
||||
movement: (
|
||||
swing: Some(Forward(1.0)),
|
||||
),
|
||||
ori_modifier: 0.7,
|
||||
),
|
||||
(
|
||||
stage: 3,
|
||||
base_damage: 30.0,
|
||||
damage_increase: 0,
|
||||
base_poise_damage: 22.5,
|
||||
poise_damage_increase: 0,
|
||||
knockback: 25.0,
|
||||
range: 5.5,
|
||||
angle: 30.0,
|
||||
base_buildup_duration: 0.4,
|
||||
base_swing_duration: 0.125,
|
||||
melee_constructor: (
|
||||
kind: Bash(
|
||||
damage: 30,
|
||||
poise: 22.5,
|
||||
knockback: 25,
|
||||
energy_regen: 0,
|
||||
),
|
||||
range: 5.5,
|
||||
angle: 30.0,
|
||||
),
|
||||
buildup_duration: 0.4,
|
||||
swing_duration: 0.125,
|
||||
hit_timing: 0.5,
|
||||
base_recover_duration: 1.6,
|
||||
forward_movement: 1.0,
|
||||
damage_kind: Crushing,
|
||||
recover_duration: 1.6,
|
||||
movement: (
|
||||
swing: Some(Forward(1.0)),
|
||||
),
|
||||
ori_modifier: 0.7,
|
||||
),
|
||||
],
|
||||
initial_energy_gain: 0,
|
||||
max_energy_gain: 0,
|
||||
energy_increase: 0,
|
||||
speed_increase: 0.0,
|
||||
max_speed_increase: 0.0,
|
||||
scales_from_combo: 0,
|
||||
ori_modifier: 0.7,
|
||||
)
|
||||
energy_cost_per_strike: 0,
|
||||
)
|
||||
|
@ -1,27 +1,18 @@
|
||||
ComboMelee(
|
||||
stage_data: [
|
||||
(
|
||||
stage: 1,
|
||||
base_damage: 36.0,
|
||||
damage_increase: 0,
|
||||
base_poise_damage: 40,
|
||||
poise_damage_increase: 0,
|
||||
knockback: 3.0,
|
||||
range: 2.5,
|
||||
angle: 30.0,
|
||||
base_buildup_duration: 1.2,
|
||||
base_swing_duration: 0.4,
|
||||
hit_timing: 0.5,
|
||||
base_recover_duration: 0.8,
|
||||
forward_movement: 5.0,
|
||||
damage_kind: Crushing,
|
||||
BasicMelee(
|
||||
energy_cost: 0,
|
||||
buildup_duration: 1.2,
|
||||
swing_duration: 0.4,
|
||||
hit_timing: 0.5,
|
||||
recover_duration: 0.8,
|
||||
melee_constructor: (
|
||||
kind: Bash(
|
||||
damage: 36,
|
||||
poise: 40,
|
||||
knockback: 3,
|
||||
energy_regen: 0,
|
||||
),
|
||||
],
|
||||
initial_energy_gain: 0,
|
||||
max_energy_gain: 0,
|
||||
energy_increase: 0,
|
||||
speed_increase: 0.0,
|
||||
max_speed_increase: 0.0,
|
||||
scales_from_combo: 0,
|
||||
range: 2.5,
|
||||
angle: 30.0,
|
||||
),
|
||||
ori_modifier: 0.7,
|
||||
)
|
||||
|
@ -1,33 +1,25 @@
|
||||
ComboMelee(
|
||||
stage_data: [
|
||||
ComboMelee2(
|
||||
strikes: [
|
||||
(
|
||||
stage: 1,
|
||||
base_damage: 2.0,
|
||||
damage_increase: 1.0,
|
||||
base_poise_damage: 8,
|
||||
poise_damage_increase: 0,
|
||||
knockback: 8.0,
|
||||
range: 3.5,
|
||||
angle: 50.0,
|
||||
base_buildup_duration: 0.1,
|
||||
base_swing_duration: 0.05,
|
||||
melee_constructor: (
|
||||
kind: Slash(
|
||||
damage: 2,
|
||||
poise: 8,
|
||||
knockback: 8,
|
||||
energy_regen: 0,
|
||||
),
|
||||
range: 3.5,
|
||||
angle: 50.0,
|
||||
),
|
||||
buildup_duration: 0.1,
|
||||
swing_duration: 0.05,
|
||||
hit_timing: 0.5,
|
||||
base_recover_duration: 0.05,
|
||||
forward_movement: 1.0,
|
||||
damage_kind: Slashing,
|
||||
damage_effect: Some(Buff((
|
||||
kind: Bleeding,
|
||||
dur_secs: 10.0,
|
||||
strength: DamageFraction(0.1),
|
||||
chance: 0.1,
|
||||
))),
|
||||
recover_duration: 0.05,
|
||||
movement: (
|
||||
swing: Some(Forward(1.0)),
|
||||
),
|
||||
ori_modifier: 0.7,
|
||||
),
|
||||
],
|
||||
initial_energy_gain: 0,
|
||||
max_energy_gain: 0,
|
||||
energy_increase: 0,
|
||||
speed_increase: 0.0,
|
||||
max_speed_increase: 0.0,
|
||||
scales_from_combo: 0,
|
||||
ori_modifier: 0.7,
|
||||
)
|
||||
energy_cost_per_strike: 0,
|
||||
)
|
||||
|
@ -1,4 +1,4 @@
|
||||
ComboMelee(
|
||||
ComboMeleeDeprecated(
|
||||
stage_data: [(
|
||||
stage: 1,
|
||||
base_damage: 15.0,
|
||||
|
@ -1,43 +1,45 @@
|
||||
ComboMelee(
|
||||
stage_data: [
|
||||
ComboMelee2(
|
||||
strikes: [
|
||||
(
|
||||
stage: 1,
|
||||
base_damage: 24.0,
|
||||
damage_increase: 1.0,
|
||||
base_poise_damage: 40,
|
||||
poise_damage_increase: 0,
|
||||
knockback: 4.0,
|
||||
range: 4.5,
|
||||
angle: 50.0,
|
||||
base_buildup_duration: 0.6,
|
||||
base_swing_duration: 0.08,
|
||||
melee_constructor: (
|
||||
kind: Bash(
|
||||
damage: 24,
|
||||
poise: 40,
|
||||
knockback: 4,
|
||||
energy_regen: 0,
|
||||
),
|
||||
range: 4.5,
|
||||
angle: 50.0,
|
||||
),
|
||||
buildup_duration: 0.6,
|
||||
swing_duration: 0.08,
|
||||
hit_timing: 0.5,
|
||||
base_recover_duration: 0.6,
|
||||
forward_movement: 3.5,
|
||||
damage_kind: Crushing,
|
||||
recover_duration: 0.6,
|
||||
movement: (
|
||||
swing: Some(Forward(3.5)),
|
||||
),
|
||||
ori_modifier: 0.65,
|
||||
),
|
||||
(
|
||||
stage: 2,
|
||||
base_damage: 32.0,
|
||||
damage_increase: 1.5,
|
||||
base_poise_damage: 40,
|
||||
poise_damage_increase: 0,
|
||||
knockback: 16.0,
|
||||
range: 2.5,
|
||||
angle: 30.0,
|
||||
base_buildup_duration: 0.6,
|
||||
base_swing_duration: 0.25,
|
||||
melee_constructor: (
|
||||
kind: Bash(
|
||||
damage: 32,
|
||||
poise: 40,
|
||||
knockback: 16,
|
||||
energy_regen: 0,
|
||||
),
|
||||
range: 2.5,
|
||||
angle: 30.0,
|
||||
),
|
||||
buildup_duration: 0.6,
|
||||
swing_duration: 0.25,
|
||||
hit_timing: 0.5,
|
||||
base_recover_duration: 1.2,
|
||||
forward_movement: 2.0,
|
||||
damage_kind: Crushing,
|
||||
recover_duration: 1.2,
|
||||
movement: (
|
||||
swing: Some(Forward(2.0)),
|
||||
),
|
||||
ori_modifier: 0.65,
|
||||
),
|
||||
],
|
||||
initial_energy_gain: 0,
|
||||
max_energy_gain: 0,
|
||||
energy_increase: 0,
|
||||
speed_increase: 0.0,
|
||||
max_speed_increase: 0.0,
|
||||
scales_from_combo: 0,
|
||||
ori_modifier: 0.65,
|
||||
energy_cost_per_strike: 0,
|
||||
)
|
||||
|
@ -1,55 +1,57 @@
|
||||
ComboMelee(
|
||||
stage_data: [
|
||||
ComboMelee2(
|
||||
strikes: [
|
||||
(
|
||||
stage: 1,
|
||||
base_damage: 6.5,
|
||||
damage_increase: 0,
|
||||
base_poise_damage: 18,
|
||||
poise_damage_increase: 0,
|
||||
knockback: 4.0,
|
||||
range: 2.5,
|
||||
angle: 15.0,
|
||||
base_buildup_duration: 0.35,
|
||||
base_swing_duration: 0.075,
|
||||
melee_constructor: (
|
||||
kind: Stab(
|
||||
damage: 6.5,
|
||||
poise: 18,
|
||||
knockback: 4,
|
||||
energy_regen: 0,
|
||||
),
|
||||
range: 2.5,
|
||||
angle: 15.0,
|
||||
damage_effect: Some(Buff((
|
||||
kind: Bleeding,
|
||||
dur_secs: 10.0,
|
||||
strength: DamageFraction(0.1),
|
||||
chance: 0.1,
|
||||
))),
|
||||
),
|
||||
buildup_duration: 0.35,
|
||||
swing_duration: 0.075,
|
||||
hit_timing: 0.5,
|
||||
base_recover_duration: 0.4,
|
||||
forward_movement: 0.7,
|
||||
damage_kind: Piercing,
|
||||
damage_effect: Some(Buff((
|
||||
kind: Bleeding,
|
||||
dur_secs: 10.0,
|
||||
strength: DamageFraction(0.1),
|
||||
chance: 0.1,
|
||||
))),
|
||||
recover_duration: 0.4,
|
||||
movement: (
|
||||
swing: Some(Forward(0.7)),
|
||||
),
|
||||
ori_modifier: 0.75,
|
||||
),
|
||||
(
|
||||
stage: 2,
|
||||
base_damage: 8.0,
|
||||
damage_increase: 0,
|
||||
base_poise_damage: 18,
|
||||
poise_damage_increase: 0,
|
||||
knockback: 7.0,
|
||||
range: 2.5,
|
||||
angle: 15.0,
|
||||
base_buildup_duration: 0.5,
|
||||
base_swing_duration: 0.1,
|
||||
melee_constructor: (
|
||||
kind: Stab(
|
||||
damage: 8,
|
||||
poise: 18,
|
||||
knockback: 7,
|
||||
energy_regen: 0,
|
||||
),
|
||||
range: 2.5,
|
||||
angle: 15.0,
|
||||
damage_effect: Some(Buff((
|
||||
kind: Bleeding,
|
||||
dur_secs: 10.0,
|
||||
strength: DamageFraction(0.1),
|
||||
chance: 0.1,
|
||||
))),
|
||||
),
|
||||
buildup_duration: 0.5,
|
||||
swing_duration: 0.1,
|
||||
hit_timing: 0.5,
|
||||
base_recover_duration: 0.5,
|
||||
forward_movement: 0.7,
|
||||
damage_kind: Piercing,
|
||||
damage_effect: Some(Buff((
|
||||
kind: Bleeding,
|
||||
dur_secs: 10.0,
|
||||
strength: DamageFraction(0.1),
|
||||
chance: 0.1,
|
||||
))),
|
||||
recover_duration: 0.5,
|
||||
movement: (
|
||||
swing: Some(Forward(0.7)),
|
||||
),
|
||||
ori_modifier: 0.75,
|
||||
),
|
||||
],
|
||||
initial_energy_gain: 0,
|
||||
max_energy_gain: 0,
|
||||
energy_increase: 3.0,
|
||||
speed_increase: 0.0,
|
||||
max_speed_increase: 0.0,
|
||||
scales_from_combo: 2,
|
||||
ori_modifier: 0.75,
|
||||
energy_cost_per_strike: 0,
|
||||
)
|
||||
|
@ -1,55 +1,57 @@
|
||||
ComboMelee(
|
||||
stage_data: [
|
||||
ComboMelee2(
|
||||
strikes: [
|
||||
(
|
||||
stage: 1,
|
||||
base_damage: 8.0,
|
||||
damage_increase: 1.0,
|
||||
base_poise_damage: 15,
|
||||
poise_damage_increase: 0,
|
||||
knockback: 8.0,
|
||||
range: 3.5,
|
||||
angle: 50.0,
|
||||
base_buildup_duration: 0.4,
|
||||
base_swing_duration: 0.08,
|
||||
melee_constructor: (
|
||||
kind: Slash(
|
||||
damage: 8,
|
||||
poise: 15,
|
||||
knockback: 8,
|
||||
energy_regen: 0,
|
||||
),
|
||||
range: 3.5,
|
||||
angle: 50.0,
|
||||
damage_effect: Some(Buff((
|
||||
kind: Bleeding,
|
||||
dur_secs: 10.0,
|
||||
strength: DamageFraction(0.1),
|
||||
chance: 0.1,
|
||||
))),
|
||||
),
|
||||
buildup_duration: 0.4,
|
||||
swing_duration: 0.08,
|
||||
hit_timing: 0.5,
|
||||
base_recover_duration: 0.5,
|
||||
forward_movement: 2.5,
|
||||
damage_kind: Slashing,
|
||||
damage_effect: Some(Buff((
|
||||
kind: Bleeding,
|
||||
dur_secs: 10.0,
|
||||
strength: DamageFraction(0.1),
|
||||
chance: 0.1,
|
||||
))),
|
||||
recover_duration: 0.5,
|
||||
movement: (
|
||||
swing: Some(Forward(2.5)),
|
||||
),
|
||||
ori_modifier: 0.7,
|
||||
),
|
||||
(
|
||||
stage: 2,
|
||||
base_damage: 10.0,
|
||||
damage_increase: 1.5,
|
||||
base_poise_damage: 20,
|
||||
poise_damage_increase: 0,
|
||||
knockback: 12.0,
|
||||
range: 3.5,
|
||||
angle: 30.0,
|
||||
base_buildup_duration: 0.7,
|
||||
base_swing_duration: 0.1,
|
||||
melee_constructor: (
|
||||
kind: Slash(
|
||||
damage: 10,
|
||||
poise: 20,
|
||||
knockback: 12,
|
||||
energy_regen: 0,
|
||||
),
|
||||
range: 3.5,
|
||||
angle: 30.0,
|
||||
damage_effect: Some(Buff((
|
||||
kind: Bleeding,
|
||||
dur_secs: 10.0,
|
||||
strength: DamageFraction(0.1),
|
||||
chance: 0.1,
|
||||
))),
|
||||
),
|
||||
buildup_duration: 0.7,
|
||||
swing_duration: 0.1,
|
||||
hit_timing: 0.5,
|
||||
base_recover_duration: 0.7,
|
||||
forward_movement: 2.0,
|
||||
damage_kind: Slashing,
|
||||
damage_effect: Some(Buff((
|
||||
kind: Bleeding,
|
||||
dur_secs: 10.0,
|
||||
strength: DamageFraction(0.1),
|
||||
chance: 0.1,
|
||||
))),
|
||||
recover_duration: 0.7,
|
||||
movement: (
|
||||
swing: Some(Forward(2.0)),
|
||||
),
|
||||
ori_modifier: 0.7,
|
||||
),
|
||||
],
|
||||
initial_energy_gain: 0,
|
||||
max_energy_gain: 0,
|
||||
energy_increase: 0,
|
||||
speed_increase: 0.0,
|
||||
max_speed_increase: 0.0,
|
||||
scales_from_combo: 0,
|
||||
ori_modifier: 0.7,
|
||||
energy_cost_per_strike: 0,
|
||||
)
|
||||
|
@ -397,27 +397,6 @@
|
||||
threshold: 0.7,
|
||||
subtitle: "subtitle-hammer-attack",
|
||||
),
|
||||
Attack(ComboMelee(Action, 1), Sword): (
|
||||
files: [
|
||||
"voxygen.audio.sfx.abilities.swing_sword",
|
||||
],
|
||||
threshold: 0.7,
|
||||
subtitle: "subtitle-sword_attack",
|
||||
),
|
||||
Attack(ComboMelee(Action, 2), Sword): (
|
||||
files: [
|
||||
"voxygen.audio.sfx.abilities.separated_second_swing",
|
||||
],
|
||||
threshold: 0.7,
|
||||
subtitle: "subtitle-sword_attack",
|
||||
),
|
||||
Attack(ComboMelee(Action, 3), Sword): (
|
||||
files: [
|
||||
"voxygen.audio.sfx.abilities.separated_third_swing",
|
||||
],
|
||||
threshold: 0.7,
|
||||
subtitle: "subtitle-sword_attack",
|
||||
),
|
||||
Inventory(CollectedTool(Sword)): (
|
||||
files: [
|
||||
"voxygen.audio.sfx.inventory.pickup_sword",
|
||||
@ -443,7 +422,7 @@
|
||||
threshold: 0.5,
|
||||
subtitle: "subtitle-unwield_hammer",
|
||||
),
|
||||
Attack(ComboMelee(Action, 1), Hammer): (
|
||||
Attack(ComboMeleeDeprecated(Action, 1), Hammer): (
|
||||
files: [
|
||||
"voxygen.audio.sfx.abilities.swing",
|
||||
],
|
||||
@ -489,20 +468,6 @@
|
||||
threshold: 0.5,
|
||||
subtitle: "subtitle-unwield_axe",
|
||||
),
|
||||
Attack(ComboMelee(Action, 1), Axe): (
|
||||
files: [
|
||||
"voxygen.audio.sfx.abilities.swing",
|
||||
],
|
||||
threshold: 0.7,
|
||||
subtitle: "subtitle-axe_attack",
|
||||
),
|
||||
Attack(ComboMelee(Action, 2), Axe): (
|
||||
files: [
|
||||
"voxygen.audio.sfx.abilities.swing",
|
||||
],
|
||||
threshold: 0.7,
|
||||
subtitle: "subtitle-axe_attack",
|
||||
),
|
||||
Attack(RapidMelee(Action), Axe): (
|
||||
files: [
|
||||
"voxygen.audio.sfx.abilities.swing",
|
||||
|
@ -615,7 +615,7 @@ pub enum CharacterAbilityType {
|
||||
ChargedRanged,
|
||||
DashMelee(StageSection),
|
||||
BasicBlock,
|
||||
ComboMelee(StageSection, u32),
|
||||
ComboMeleeDeprecated(StageSection, u32),
|
||||
ComboMelee2(StageSection),
|
||||
FinisherMelee(StageSection),
|
||||
DiveMelee(StageSection),
|
||||
@ -642,7 +642,9 @@ impl From<&CharacterState> for CharacterAbilityType {
|
||||
CharacterState::BasicBlock(_) => Self::BasicBlock,
|
||||
CharacterState::LeapMelee(data) => Self::LeapMelee(data.stage_section),
|
||||
CharacterState::LeapShockwave(data) => Self::LeapShockwave(data.stage_section),
|
||||
CharacterState::ComboMelee(data) => Self::ComboMelee(data.stage_section, data.stage),
|
||||
CharacterState::ComboMeleeDeprecated(data) => {
|
||||
Self::ComboMeleeDeprecated(data.stage_section, data.stage)
|
||||
},
|
||||
CharacterState::ComboMelee2(data) => Self::ComboMelee2(data.stage_section),
|
||||
CharacterState::FinisherMelee(data) => Self::FinisherMelee(data.stage_section),
|
||||
CharacterState::DiveMelee(data) => Self::DiveMelee(data.stage_section),
|
||||
@ -771,7 +773,7 @@ pub enum CharacterAbility {
|
||||
#[serde(default)]
|
||||
meta: AbilityMeta,
|
||||
},
|
||||
ComboMelee {
|
||||
ComboMeleeDeprecated {
|
||||
stage_data: Vec<combo_melee::Stage<f32>>,
|
||||
initial_energy_gain: f32,
|
||||
max_energy_gain: f32,
|
||||
@ -1134,7 +1136,7 @@ impl CharacterAbility {
|
||||
(data.physics.on_ground.is_none() || buildup_duration.is_some())
|
||||
&& update.energy.try_change_by(-*energy_cost).is_ok()
|
||||
},
|
||||
CharacterAbility::ComboMelee { .. }
|
||||
CharacterAbility::ComboMeleeDeprecated { .. }
|
||||
| CharacterAbility::Boost { .. }
|
||||
| CharacterAbility::BasicBeam { .. }
|
||||
| CharacterAbility::Blink { .. }
|
||||
@ -1303,7 +1305,7 @@ impl CharacterAbility {
|
||||
*recover_duration /= stats.speed;
|
||||
*energy_cost /= stats.energy_efficiency;
|
||||
},
|
||||
ComboMelee {
|
||||
ComboMeleeDeprecated {
|
||||
ref mut stage_data,
|
||||
initial_energy_gain: _,
|
||||
max_energy_gain: _,
|
||||
@ -1720,7 +1722,7 @@ impl CharacterAbility {
|
||||
}
|
||||
},
|
||||
Boost { .. }
|
||||
| ComboMelee { .. }
|
||||
| ComboMeleeDeprecated { .. }
|
||||
| Blink { .. }
|
||||
| Music { .. }
|
||||
| BasicSummon { .. }
|
||||
@ -1768,7 +1770,7 @@ impl CharacterAbility {
|
||||
| RiposteMelee { .. }
|
||||
| BasicBeam { .. }
|
||||
| Boost { .. }
|
||||
| ComboMelee { .. }
|
||||
| ComboMeleeDeprecated { .. }
|
||||
| Blink { .. }
|
||||
| Music { .. }
|
||||
| BasicSummon { .. }
|
||||
@ -1795,7 +1797,7 @@ impl CharacterAbility {
|
||||
| SelfBuff { meta, .. }
|
||||
| BasicBeam { meta, .. }
|
||||
| Boost { meta, .. }
|
||||
| ComboMelee { meta, .. }
|
||||
| ComboMeleeDeprecated { meta, .. }
|
||||
| ComboMelee2 { meta, .. }
|
||||
| Blink { meta, .. }
|
||||
| BasicSummon { meta, .. }
|
||||
@ -1872,7 +1874,7 @@ impl CharacterAbility {
|
||||
use skills::{HammerSkill::*, Skill::Hammer};
|
||||
|
||||
match self {
|
||||
CharacterAbility::ComboMelee {
|
||||
CharacterAbility::ComboMeleeDeprecated {
|
||||
ref mut speed_increase,
|
||||
ref mut max_speed_increase,
|
||||
ref mut stage_data,
|
||||
@ -2385,9 +2387,8 @@ impl From<(&CharacterAbility, AbilityInfo, &JoinData<'_>)> for CharacterState {
|
||||
was_wielded: false, // false by default. utils might set it to true
|
||||
prev_aimed_dir: None,
|
||||
is_sneaking: false,
|
||||
was_combo: None,
|
||||
}),
|
||||
CharacterAbility::ComboMelee {
|
||||
CharacterAbility::ComboMeleeDeprecated {
|
||||
stage_data,
|
||||
initial_energy_gain,
|
||||
max_energy_gain,
|
||||
@ -2397,7 +2398,7 @@ impl From<(&CharacterAbility, AbilityInfo, &JoinData<'_>)> for CharacterState {
|
||||
scales_from_combo,
|
||||
ori_modifier,
|
||||
meta: _,
|
||||
} => CharacterState::ComboMelee(combo_melee::Data {
|
||||
} => CharacterState::ComboMeleeDeprecated(combo_melee::Data {
|
||||
static_data: combo_melee::StaticData {
|
||||
num_stages: stage_data.len() as u32,
|
||||
stage_data: stage_data.iter().map(|stage| stage.to_duration()).collect(),
|
||||
|
@ -95,7 +95,7 @@ pub enum CharacterState {
|
||||
DashMelee(dash_melee::Data),
|
||||
/// A three-stage attack where each attack pushes player forward
|
||||
/// and successive attacks increase in damage, while player holds button.
|
||||
ComboMelee(combo_melee::Data),
|
||||
ComboMeleeDeprecated(combo_melee::Data),
|
||||
/// A state where you progress through multiple melee attacks
|
||||
ComboMelee2(combo_melee2::Data),
|
||||
/// A leap followed by a small aoe ground attack
|
||||
@ -154,7 +154,7 @@ impl CharacterState {
|
||||
| CharacterState::BasicMelee(_)
|
||||
| CharacterState::BasicRanged(_)
|
||||
| CharacterState::DashMelee(_)
|
||||
| CharacterState::ComboMelee(_)
|
||||
| CharacterState::ComboMeleeDeprecated(_)
|
||||
| CharacterState::ComboMelee2(_)
|
||||
| CharacterState::BasicBlock(_)
|
||||
| CharacterState::LeapMelee(_)
|
||||
@ -220,7 +220,7 @@ impl CharacterState {
|
||||
CharacterState::BasicMelee(_)
|
||||
| CharacterState::BasicRanged(_)
|
||||
| CharacterState::DashMelee(_)
|
||||
| CharacterState::ComboMelee(_)
|
||||
| CharacterState::ComboMeleeDeprecated(_)
|
||||
| CharacterState::ComboMelee2(_)
|
||||
| CharacterState::LeapMelee(_)
|
||||
| CharacterState::LeapShockwave(_)
|
||||
@ -247,7 +247,7 @@ impl CharacterState {
|
||||
CharacterState::BasicMelee(_)
|
||||
| CharacterState::BasicRanged(_)
|
||||
| CharacterState::DashMelee(_)
|
||||
| CharacterState::ComboMelee(_)
|
||||
| CharacterState::ComboMeleeDeprecated(_)
|
||||
| CharacterState::ComboMelee2(_)
|
||||
| CharacterState::BasicBlock(_)
|
||||
| CharacterState::LeapMelee(_)
|
||||
@ -377,7 +377,7 @@ impl CharacterState {
|
||||
|
||||
pub fn is_forced_movement(&self) -> bool {
|
||||
matches!(self,
|
||||
CharacterState::ComboMelee(s) if s.stage_section == StageSection::Action)
|
||||
CharacterState::ComboMeleeDeprecated(s) if s.stage_section == StageSection::Action)
|
||||
|| matches!(self, CharacterState::ComboMelee2(s) if s.stage_section == StageSection::Action)
|
||||
|| matches!(self, CharacterState::DashMelee(s) if s.stage_section == StageSection::Charge)
|
||||
|| matches!(self, CharacterState::LeapMelee(s) if s.stage_section == StageSection::Movement)
|
||||
@ -403,7 +403,7 @@ impl CharacterState {
|
||||
| CharacterState::Wielding(_)
|
||||
| CharacterState::BasicMelee(_)
|
||||
| CharacterState::BasicRanged(_)
|
||||
| CharacterState::ComboMelee(_)
|
||||
| CharacterState::ComboMeleeDeprecated(_)
|
||||
| CharacterState::ComboMelee2(_)
|
||||
| CharacterState::ChargedRanged(_)
|
||||
| CharacterState::RepeaterRanged(_)
|
||||
@ -458,7 +458,7 @@ impl CharacterState {
|
||||
CharacterState::Roll(data) => data.behavior(j, output_events),
|
||||
CharacterState::Wielding(data) => data.behavior(j, output_events),
|
||||
CharacterState::Equipping(data) => data.behavior(j, output_events),
|
||||
CharacterState::ComboMelee(data) => data.behavior(j, output_events),
|
||||
CharacterState::ComboMeleeDeprecated(data) => data.behavior(j, output_events),
|
||||
CharacterState::ComboMelee2(data) => data.behavior(j, output_events),
|
||||
CharacterState::BasicMelee(data) => data.behavior(j, output_events),
|
||||
CharacterState::BasicRanged(data) => data.behavior(j, output_events),
|
||||
@ -511,7 +511,9 @@ impl CharacterState {
|
||||
CharacterState::Roll(data) => data.handle_event(j, output_events, action),
|
||||
CharacterState::Wielding(data) => data.handle_event(j, output_events, action),
|
||||
CharacterState::Equipping(data) => data.handle_event(j, output_events, action),
|
||||
CharacterState::ComboMelee(data) => data.handle_event(j, output_events, action),
|
||||
CharacterState::ComboMeleeDeprecated(data) => {
|
||||
data.handle_event(j, output_events, action)
|
||||
},
|
||||
CharacterState::ComboMelee2(data) => data.handle_event(j, output_events, action),
|
||||
CharacterState::BasicMelee(data) => data.handle_event(j, output_events, action),
|
||||
CharacterState::BasicRanged(data) => data.handle_event(j, output_events, action),
|
||||
@ -564,7 +566,7 @@ impl CharacterState {
|
||||
CharacterState::Roll(data) => Some(data.static_data.ability_info),
|
||||
CharacterState::Wielding(_) => None,
|
||||
CharacterState::Equipping(_) => None,
|
||||
CharacterState::ComboMelee(data) => Some(data.static_data.ability_info),
|
||||
CharacterState::ComboMeleeDeprecated(data) => Some(data.static_data.ability_info),
|
||||
CharacterState::ComboMelee2(data) => Some(data.static_data.ability_info),
|
||||
CharacterState::BasicMelee(data) => Some(data.static_data.ability_info),
|
||||
CharacterState::BasicRanged(data) => Some(data.static_data.ability_info),
|
||||
@ -608,7 +610,7 @@ impl CharacterState {
|
||||
CharacterState::Roll(data) => Some(data.stage_section),
|
||||
CharacterState::Equipping(_) => Some(StageSection::Buildup),
|
||||
CharacterState::Wielding(_) => None,
|
||||
CharacterState::ComboMelee(data) => Some(data.stage_section),
|
||||
CharacterState::ComboMeleeDeprecated(data) => Some(data.stage_section),
|
||||
CharacterState::ComboMelee2(data) => Some(data.stage_section),
|
||||
CharacterState::BasicMelee(data) => Some(data.stage_section),
|
||||
CharacterState::BasicRanged(data) => Some(data.stage_section),
|
||||
@ -668,7 +670,7 @@ impl CharacterState {
|
||||
buildup: Some(data.static_data.buildup_duration),
|
||||
..Default::default()
|
||||
}),
|
||||
CharacterState::ComboMelee(data) => {
|
||||
CharacterState::ComboMeleeDeprecated(data) => {
|
||||
let stage_index = data.stage_index();
|
||||
let stage = data.static_data.stage_data[stage_index];
|
||||
Some(DurationsInfo {
|
||||
@ -840,7 +842,7 @@ impl CharacterState {
|
||||
CharacterState::Roll(data) => Some(data.timer),
|
||||
CharacterState::Wielding(_) => None,
|
||||
CharacterState::Equipping(data) => Some(data.timer),
|
||||
CharacterState::ComboMelee(data) => Some(data.timer),
|
||||
CharacterState::ComboMeleeDeprecated(data) => Some(data.timer),
|
||||
CharacterState::ComboMelee2(data) => Some(data.timer),
|
||||
CharacterState::BasicMelee(data) => Some(data.timer),
|
||||
CharacterState::BasicRanged(data) => Some(data.timer),
|
||||
@ -884,7 +886,7 @@ impl CharacterState {
|
||||
CharacterState::Roll(_) => None,
|
||||
CharacterState::Wielding(_) => None,
|
||||
CharacterState::Equipping(_) => None,
|
||||
CharacterState::ComboMelee(_) => Some(AttackSource::Melee),
|
||||
CharacterState::ComboMeleeDeprecated(_) => Some(AttackSource::Melee),
|
||||
CharacterState::ComboMelee2(_) => Some(AttackSource::Melee),
|
||||
CharacterState::BasicMelee(_) => Some(AttackSource::Melee),
|
||||
CharacterState::BasicRanged(data) => {
|
||||
|
@ -705,7 +705,7 @@ fn default_main_tool(body: &Body) -> Item {
|
||||
arthropod::Species::Dagonite => Some(Item::new_from_asset_expect(
|
||||
"common.items.npc_weapons.unique.arthropods.dagonite",
|
||||
)),
|
||||
_ => Some(Item::new_from_asset_expect(
|
||||
arthropod::Species::Leafbeetle => Some(Item::new_from_asset_expect(
|
||||
"common.items.npc_weapons.unique.arthropods.leafbeetle",
|
||||
)),
|
||||
},
|
||||
|
@ -170,14 +170,14 @@ impl CharacterBehavior for Data {
|
||||
);
|
||||
|
||||
// Build up
|
||||
update.character = CharacterState::ComboMelee(Data {
|
||||
update.character = CharacterState::ComboMeleeDeprecated(Data {
|
||||
static_data: self.static_data.clone(),
|
||||
timer: tick_attack_or_default(data, self.timer, Some(speed_modifier)),
|
||||
..*self
|
||||
});
|
||||
} else {
|
||||
// Transitions to swing section of stage
|
||||
update.character = CharacterState::ComboMelee(Data {
|
||||
update.character = CharacterState::ComboMeleeDeprecated(Data {
|
||||
static_data: self.static_data.clone(),
|
||||
timer: Duration::default(),
|
||||
stage_section: StageSection::Action,
|
||||
@ -194,7 +194,7 @@ impl CharacterBehavior for Data {
|
||||
&& !self.exhausted
|
||||
{
|
||||
// Swing
|
||||
update.character = CharacterState::ComboMelee(Data {
|
||||
update.character = CharacterState::ComboMeleeDeprecated(Data {
|
||||
static_data: self.static_data.clone(),
|
||||
timer: tick_attack_or_default(data, self.timer, None),
|
||||
exhausted: true,
|
||||
@ -304,14 +304,14 @@ impl CharacterBehavior for Data {
|
||||
);
|
||||
|
||||
// Swings
|
||||
update.character = CharacterState::ComboMelee(Data {
|
||||
update.character = CharacterState::ComboMeleeDeprecated(Data {
|
||||
static_data: self.static_data.clone(),
|
||||
timer: tick_attack_or_default(data, self.timer, Some(speed_modifier)),
|
||||
..*self
|
||||
});
|
||||
} else {
|
||||
// Transitions to recover section of stage
|
||||
update.character = CharacterState::ComboMelee(Data {
|
||||
update.character = CharacterState::ComboMeleeDeprecated(Data {
|
||||
static_data: self.static_data.clone(),
|
||||
timer: Duration::default(),
|
||||
stage_section: StageSection::Recover,
|
||||
@ -328,7 +328,7 @@ impl CharacterBehavior for Data {
|
||||
None,
|
||||
);
|
||||
// Recovers
|
||||
update.character = CharacterState::ComboMelee(Data {
|
||||
update.character = CharacterState::ComboMeleeDeprecated(Data {
|
||||
static_data: self.static_data.clone(),
|
||||
timer: tick_attack_or_default(data, self.timer, Some(speed_modifier)),
|
||||
..*self
|
||||
@ -380,7 +380,7 @@ fn reset_state(
|
||||
data.static_data.ability_info.input,
|
||||
);
|
||||
|
||||
if let CharacterState::ComboMelee(c) = &mut update.character {
|
||||
if let CharacterState::ComboMeleeDeprecated(c) = &mut update.character {
|
||||
c.stage = (data.stage % data.static_data.num_stages) + 1;
|
||||
}
|
||||
}
|
||||
|
@ -2,7 +2,7 @@ use crate::{
|
||||
comp::{
|
||||
buff::{BuffChange, BuffKind},
|
||||
character_state::{AttackFilters, OutputEvents},
|
||||
CharacterState, InputKind, StateUpdate,
|
||||
CharacterState, StateUpdate,
|
||||
},
|
||||
event::ServerEvent,
|
||||
states::{
|
||||
@ -46,8 +46,6 @@ pub struct Data {
|
||||
pub prev_aimed_dir: Option<Dir>,
|
||||
/// Is sneaking, true if previous state was also considered sneaking
|
||||
pub is_sneaking: bool,
|
||||
/// Was in state with combo
|
||||
pub was_combo: Option<(InputKind, u32)>,
|
||||
}
|
||||
|
||||
impl CharacterBehavior for Data {
|
||||
@ -126,20 +124,7 @@ impl CharacterBehavior for Data {
|
||||
});
|
||||
} else {
|
||||
// Done
|
||||
if let Some((input, stage)) = self.was_combo {
|
||||
if input_is_pressed(data, input) {
|
||||
handle_input(data, output_events, &mut update, input);
|
||||
// If other states are introduced that progress through stages, add them
|
||||
// here
|
||||
if let CharacterState::ComboMelee(c) = &mut update.character {
|
||||
c.stage = stage;
|
||||
}
|
||||
} else {
|
||||
end_ability(data, &mut update);
|
||||
}
|
||||
} else {
|
||||
end_ability(data, &mut update);
|
||||
}
|
||||
end_ability(data, &mut update);
|
||||
}
|
||||
},
|
||||
_ => {
|
||||
|
@ -1243,16 +1243,11 @@ fn handle_ability(
|
||||
}
|
||||
}
|
||||
if let CharacterState::Roll(roll) = &mut update.character {
|
||||
if let CharacterState::ComboMelee(c) = data.character {
|
||||
roll.was_combo = Some((c.static_data.ability_info.input, c.stage));
|
||||
if data.character.is_wield() || data.character.was_wielded() {
|
||||
roll.was_wielded = true;
|
||||
} else {
|
||||
if data.character.is_wield() || data.character.was_wielded() {
|
||||
roll.was_wielded = true;
|
||||
}
|
||||
if data.character.is_stealthy() {
|
||||
roll.is_sneaking = true;
|
||||
}
|
||||
}
|
||||
if data.character.is_stealthy() {
|
||||
roll.is_sneaking = true;
|
||||
}
|
||||
if data.character.is_aimed() {
|
||||
roll.prev_aimed_dir = Some(data.controller.inputs.look_dir);
|
||||
|
@ -174,7 +174,7 @@ impl<'a> System<'a> for Sys {
|
||||
| CharacterState::DashMelee(_)
|
||||
| CharacterState::LeapMelee(_)
|
||||
| CharacterState::LeapShockwave(_)
|
||||
| CharacterState::ComboMelee(_)
|
||||
| CharacterState::ComboMeleeDeprecated(_)
|
||||
| CharacterState::ComboMelee2(_)
|
||||
| CharacterState::BasicRanged(_)
|
||||
| CharacterState::Music(_)
|
||||
|
@ -3410,7 +3410,7 @@ impl<'a> AgentData<'a> {
|
||||
{
|
||||
// If already in dash, keep dashing if not in recover
|
||||
controller.push_basic_input(InputKind::Ability(0));
|
||||
} else if matches!(self.char_state, CharacterState::ComboMelee(c) if matches!(c.stage_section, StageSection::Recover))
|
||||
} else if matches!(self.char_state, CharacterState::ComboMelee2(c) if matches!(c.stage_section, StageSection::Recover))
|
||||
{
|
||||
// If already in combo keep comboing if not in recover
|
||||
controller.push_basic_input(InputKind::Primary);
|
||||
|
@ -6,19 +6,19 @@ use super::{
|
||||
};
|
||||
use common::states::utils::StageSection;
|
||||
|
||||
pub struct AlphaAnimation;
|
||||
pub struct ComboAnimation;
|
||||
|
||||
impl Animation for AlphaAnimation {
|
||||
type Dependency<'a> = (f32, f32, Option<StageSection>, f32);
|
||||
impl Animation for ComboAnimation {
|
||||
type Dependency<'a> = (Option<&'a str>, StageSection, usize, f32, f32);
|
||||
type Skeleton = ArthropodSkeleton;
|
||||
|
||||
#[cfg(feature = "use-dyn-lib")]
|
||||
const UPDATE_FN: &'static [u8] = b"arthropod_alpha\0";
|
||||
const UPDATE_FN: &'static [u8] = b"arthropod_combo\0";
|
||||
|
||||
#[cfg_attr(feature = "be-dyn-lib", export_name = "arthropod_alpha")]
|
||||
#[cfg_attr(feature = "be-dyn-lib", export_name = "arthropod_combo")]
|
||||
fn update_skeleton_inner(
|
||||
skeleton: &Self::Skeleton,
|
||||
(_velocity, global_time, stage_section, timer): Self::Dependency<'_>,
|
||||
(_ability_id, stage_section, _current_strike, global_time, timer): Self::Dependency<'_>,
|
||||
anim_time: f32,
|
||||
_rate: &mut f32,
|
||||
s_a: &SkeletonAttr,
|
||||
@ -26,9 +26,9 @@ impl Animation for AlphaAnimation {
|
||||
let mut next = (*skeleton).clone();
|
||||
|
||||
let (movement1, movement2, movement3) = match stage_section {
|
||||
Some(StageSection::Buildup) => (anim_time.powi(2), 0.0, 0.0),
|
||||
Some(StageSection::Action) => (1.0, anim_time.powi(4), 0.0),
|
||||
Some(StageSection::Recover) => (1.0, 1.0, anim_time),
|
||||
StageSection::Buildup => (anim_time.powi(2), 0.0, 0.0),
|
||||
StageSection::Action => (1.0, anim_time.powi(4), 0.0),
|
||||
StageSection::Recover => (1.0, 1.0, anim_time),
|
||||
_ => (0.0, 0.0, 0.0),
|
||||
};
|
||||
let pullback = 1.0 - movement3;
|
@ -1,4 +1,4 @@
|
||||
pub mod alpha;
|
||||
pub mod combomelee;
|
||||
pub mod dash;
|
||||
pub mod idle;
|
||||
pub mod jump;
|
||||
@ -11,7 +11,7 @@ pub mod summon;
|
||||
|
||||
// Reexports
|
||||
pub use self::{
|
||||
alpha::AlphaAnimation, dash::DashAnimation, idle::IdleAnimation, jump::JumpAnimation,
|
||||
combomelee::ComboAnimation, dash::DashAnimation, idle::IdleAnimation, jump::JumpAnimation,
|
||||
leapmelee::LeapMeleeAnimation, leapshockwave::LeapShockAnimation, run::RunAnimation,
|
||||
shoot::ShootAnimation, stunned::StunnedAnimation, summon::SummonAnimation,
|
||||
};
|
||||
|
@ -1,6 +1,7 @@
|
||||
use super::{
|
||||
super::{vek::*, Animation},
|
||||
BipedLargeSkeleton, SkeletonAttr,
|
||||
biped_large_alpha_axe, biped_large_alpha_hammer, biped_large_alpha_sword,
|
||||
init_biped_large_alpha, BipedLargeSkeleton, SkeletonAttr,
|
||||
};
|
||||
use common::{
|
||||
comp::item::tool::{AbilitySpec, ToolKind},
|
||||
@ -45,17 +46,7 @@ impl Animation for AlphaAnimation {
|
||||
) -> Self::Skeleton {
|
||||
*rate = 1.0;
|
||||
let mut next = (*skeleton).clone();
|
||||
let speed = Vec2::<f32>::from(velocity).magnitude();
|
||||
|
||||
let lab: f32 = 0.65 * s_a.tempo;
|
||||
let speednorm = (speed / 12.0).powf(0.4);
|
||||
let foothoril = (acc_vel * lab + PI * 1.45).sin() * speednorm;
|
||||
let foothorir = (acc_vel * lab + PI * (0.45)).sin() * speednorm;
|
||||
let footrotl = ((1.0 / (0.5 + (0.5) * ((acc_vel * lab + PI * 1.4).sin()).powi(2))).sqrt())
|
||||
* ((acc_vel * lab + PI * 1.4).sin());
|
||||
|
||||
let footrotr = ((1.0 / (0.5 + (0.5) * ((acc_vel * lab + PI * 0.4).sin()).powi(2))).sqrt())
|
||||
* ((acc_vel * lab + PI * 0.4).sin());
|
||||
let (move1base, move2base, move3) = match stage_section {
|
||||
Some(StageSection::Buildup) => (anim_time.powf(0.25), 0.0, 0.0),
|
||||
Some(StageSection::Action) => (1.0, anim_time, 0.0),
|
||||
@ -65,85 +56,20 @@ impl Animation for AlphaAnimation {
|
||||
let pullback = 1.0 - move3;
|
||||
let move1 = move1base * pullback;
|
||||
let move2 = move2base * pullback;
|
||||
|
||||
let subtract = global_time - timer;
|
||||
let check = subtract - subtract.trunc();
|
||||
let mirror = (check - 0.5).signum();
|
||||
next.second.position = Vec3::new(0.0, 0.0, 0.0);
|
||||
next.second.orientation = Quaternion::rotation_x(0.0);
|
||||
next.shoulder_l.position = Vec3::new(
|
||||
-s_a.shoulder.0,
|
||||
s_a.shoulder.1,
|
||||
s_a.shoulder.2 - foothorir * 1.0,
|
||||
);
|
||||
next.shoulder_l.orientation =
|
||||
Quaternion::rotation_x(move1 * 0.8 + 0.6 * speednorm + (footrotr * -0.2) * speednorm);
|
||||
let speed = Vec2::<f32>::from(velocity).magnitude();
|
||||
|
||||
next.shoulder_r.position = Vec3::new(
|
||||
s_a.shoulder.0,
|
||||
s_a.shoulder.1,
|
||||
s_a.shoulder.2 - foothoril * 1.0,
|
||||
);
|
||||
next.shoulder_r.orientation =
|
||||
Quaternion::rotation_x(move1 * 0.8 + 0.6 * speednorm + (footrotl * -0.2) * speednorm);
|
||||
|
||||
next.main.position = Vec3::new(0.0, 0.0, 0.0);
|
||||
next.main.orientation = Quaternion::rotation_x(0.0);
|
||||
|
||||
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);
|
||||
|
||||
next.hand_l.orientation = Quaternion::rotation_x(0.0);
|
||||
next.hand_r.orientation = Quaternion::rotation_x(0.0);
|
||||
let foothorir = init_biped_large_alpha(&mut next, s_a, speed, acc_vel, move1);
|
||||
|
||||
match active_tool_kind {
|
||||
Some(ToolKind::Sword) => {
|
||||
next.control_l.position = Vec3::new(-1.0, 1.0, 1.0);
|
||||
next.control_r.position = Vec3::new(0.0, 2.0, -3.0);
|
||||
next.head.orientation = Quaternion::rotation_x(move1 * -0.25)
|
||||
* Quaternion::rotation_z(move1 * -0.2 + move2 * 0.6);
|
||||
next.control.position = Vec3::new(
|
||||
-3.0 + move1 * -4.0 + move2 * 5.0,
|
||||
5.0 + s_a.grip.0 / 1.2 + move1 * -4.0 + move2 * 8.0,
|
||||
-4.0 + -s_a.grip.0 / 2.0 + move2 * -5.0,
|
||||
);
|
||||
next.upper_torso.orientation = Quaternion::rotation_z(move1 * 0.5 + move2 * -0.7);
|
||||
next.lower_torso.orientation = Quaternion::rotation_z(move1 * -0.5 + move2 * 0.7);
|
||||
next.control_l.orientation =
|
||||
Quaternion::rotation_x(PI / 2.0 + move1 * -0.5 + move2 * 1.5)
|
||||
* Quaternion::rotation_y(-0.2);
|
||||
next.control_r.orientation =
|
||||
Quaternion::rotation_x(PI / 2.2 + move1 * -0.5 + move2 * 1.5)
|
||||
* Quaternion::rotation_y(0.2)
|
||||
* Quaternion::rotation_z(0.0);
|
||||
|
||||
next.control.orientation =
|
||||
Quaternion::rotation_x(-0.2 + move1 * 0.5 + move2 * -2.0)
|
||||
* Quaternion::rotation_y(-0.1 + move1 * -0.5 + move2 * 1.0);
|
||||
biped_large_alpha_sword(&mut next, s_a, move1, move2);
|
||||
},
|
||||
Some(ToolKind::Hammer) => {
|
||||
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);
|
||||
biped_large_alpha_hammer(&mut next, s_a, move1, move2);
|
||||
},
|
||||
Some(ToolKind::Axe) => match ability_id {
|
||||
Some("common.abilities.custom.gigas_frost.cleave") => {
|
||||
@ -257,32 +183,7 @@ impl Animation for AlphaAnimation {
|
||||
next.main.orientation = Quaternion::rotation_y(move1 * 0.4 + move2 * -1.2);
|
||||
},
|
||||
_ => {
|
||||
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 * 28.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.6 + move2 * -0.9);
|
||||
next.lower_torso.orientation =
|
||||
Quaternion::rotation_z(move1 * -0.6 + move2 * 0.9);
|
||||
|
||||
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.4 + move2 * 3.5)
|
||||
* Quaternion::rotation_z(move1 * -1.0 + move2 * -1.5);
|
||||
biped_large_alpha_axe(&mut next, s_a, move1, move2);
|
||||
},
|
||||
},
|
||||
Some(ToolKind::Natural) => match ability_id {
|
||||
@ -306,7 +207,6 @@ impl Animation for AlphaAnimation {
|
||||
* Quaternion::rotation_z(move1 * -0.5 + move2 * 0.6);
|
||||
next.head.orientation = Quaternion::rotation_x(move1 * 0.3);
|
||||
},
|
||||
|
||||
Some("common.abilities.custom.tidalwarrior.pincer") => {
|
||||
if mirror > 0.0 {
|
||||
next.head.orientation = Quaternion::rotation_z(move1 * 0.75);
|
||||
|
@ -1,5 +1,6 @@
|
||||
use super::{
|
||||
super::{vek::*, Animation},
|
||||
biped_large_beta_axe, biped_large_beta_hammer, biped_large_beta_sword, init_biped_large_beta,
|
||||
BipedLargeSkeleton, SkeletonAttr,
|
||||
};
|
||||
use common::{
|
||||
@ -43,17 +44,7 @@ impl Animation for BetaAnimation {
|
||||
) -> Self::Skeleton {
|
||||
*rate = 1.0;
|
||||
let mut next = (*skeleton).clone();
|
||||
let speed = Vec2::<f32>::from(velocity).magnitude();
|
||||
|
||||
let lab: f32 = 0.65 * s_a.tempo;
|
||||
let speednorm = (speed / 12.0).powf(0.4);
|
||||
let foothoril = (acc_vel * lab + PI * 1.45).sin() * speednorm;
|
||||
let foothorir = (acc_vel * lab + PI * (0.45)).sin() * speednorm;
|
||||
let footrotl = ((1.0 / (0.5 + (0.5) * ((acc_vel * lab + PI * 1.4).sin()).powi(2))).sqrt())
|
||||
* ((acc_vel * lab + PI * 1.4).sin());
|
||||
|
||||
let footrotr = ((1.0 / (0.5 + (0.5) * ((acc_vel * lab + PI * 0.4).sin()).powi(2))).sqrt())
|
||||
* ((acc_vel * lab + PI * 0.4).sin());
|
||||
let (move1base, move2base, move3) = match stage_section {
|
||||
Some(StageSection::Buildup) => (anim_time.powf(0.25), 0.0, 0.0),
|
||||
Some(StageSection::Action) => (1.0, anim_time, 0.0),
|
||||
@ -64,108 +55,19 @@ impl Animation for BetaAnimation {
|
||||
let move1 = move1base * pullback;
|
||||
let move2 = move2base * pullback;
|
||||
|
||||
next.shoulder_l.position = Vec3::new(
|
||||
-s_a.shoulder.0,
|
||||
s_a.shoulder.1,
|
||||
s_a.shoulder.2 - foothorir * 1.0,
|
||||
);
|
||||
next.shoulder_l.orientation =
|
||||
Quaternion::rotation_x(move1 * 0.8 + 0.6 * speednorm + (footrotr * -0.2) * speednorm);
|
||||
let speed = Vec2::<f32>::from(velocity).magnitude();
|
||||
|
||||
next.shoulder_r.position = Vec3::new(
|
||||
s_a.shoulder.0,
|
||||
s_a.shoulder.1,
|
||||
s_a.shoulder.2 - foothoril * 1.0,
|
||||
);
|
||||
next.shoulder_r.orientation =
|
||||
Quaternion::rotation_x(move1 * 0.8 + 0.6 * speednorm + (footrotl * -0.2) * speednorm);
|
||||
next.torso.orientation = Quaternion::rotation_z(0.0);
|
||||
|
||||
next.main.position = Vec3::new(0.0, 0.0, 0.0);
|
||||
next.main.orientation = Quaternion::rotation_x(0.0);
|
||||
|
||||
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);
|
||||
|
||||
next.hand_l.orientation = Quaternion::rotation_x(0.0);
|
||||
next.hand_r.orientation = Quaternion::rotation_x(0.0);
|
||||
init_biped_large_beta(&mut next, s_a, speed, acc_vel, move1);
|
||||
|
||||
match active_tool_kind {
|
||||
Some(ToolKind::Sword) => {
|
||||
next.control_l.position = Vec3::new(-1.0, 1.0, 1.0);
|
||||
next.control_r.position = Vec3::new(0.0, 2.0, -3.0);
|
||||
next.head.orientation = Quaternion::rotation_x(move1 * -0.25)
|
||||
* Quaternion::rotation_z(move1 * -0.2 + move2 * 0.6);
|
||||
next.control.position = Vec3::new(
|
||||
-3.0 + move1 * -4.0 + move2 * 5.0,
|
||||
5.0 + s_a.grip.0 / 1.2 + move1 * -4.0 + move2 * 8.0,
|
||||
-4.0 + -s_a.grip.0 / 2.0 + move2 * -5.0,
|
||||
);
|
||||
next.upper_torso.orientation =
|
||||
Quaternion::rotation_z(move1base * 0.5 + move2 * -0.7);
|
||||
next.lower_torso.orientation =
|
||||
Quaternion::rotation_z(move1base * -0.5 + move2 * 0.7);
|
||||
next.control_l.orientation =
|
||||
Quaternion::rotation_x(PI / 2.0 + move1 * -0.5 + move2 * 1.5)
|
||||
* Quaternion::rotation_y(-0.2);
|
||||
next.control_r.orientation =
|
||||
Quaternion::rotation_x(PI / 2.2 + move1 * -0.5 + move2 * 1.5)
|
||||
* Quaternion::rotation_y(0.2)
|
||||
* Quaternion::rotation_z(0.0);
|
||||
|
||||
next.control.orientation =
|
||||
Quaternion::rotation_x(-0.2 + move1 * 0.5 + move2 * -1.5)
|
||||
* Quaternion::rotation_y(-0.1 + move1 * -0.5 + move2 * 1.0);
|
||||
biped_large_beta_sword(&mut next, s_a, move1base, move1, move2);
|
||||
},
|
||||
Some(ToolKind::Hammer) => {
|
||||
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 * 6.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.6 + move2 * -1.5);
|
||||
next.lower_torso.orientation = Quaternion::rotation_z(move1 * -0.6 + move2 * 1.5);
|
||||
|
||||
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 * -1.5 + move2 * -0.3)
|
||||
* Quaternion::rotation_y(-1.8 + move1 * -0.8 + move2 * 3.0)
|
||||
* Quaternion::rotation_z(move1 * -0.8 + move2 * -0.8);
|
||||
biped_large_beta_hammer(&mut next, s_a, move1, move2);
|
||||
},
|
||||
Some(ToolKind::Axe) => {
|
||||
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 * -18.0 + move2 * 20.0,
|
||||
(s_a.grip.0 / 1.0) + move1 * -3.0 + move2 * 12.0,
|
||||
(-s_a.grip.0 / 0.8) + move1 * -2.0 + move2 * 4.0,
|
||||
);
|
||||
next.head.orientation = Quaternion::rotation_x(move1 * -0.25)
|
||||
* Quaternion::rotation_z(move1 * -0.9 + move2 * 0.6);
|
||||
next.upper_torso.orientation = Quaternion::rotation_z(move1 * 1.2 + move2 * -1.0);
|
||||
next.lower_torso.orientation = Quaternion::rotation_z(move1 * -1.2 + move2 * 1.0);
|
||||
|
||||
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.0 + move2 * -0.8)
|
||||
* Quaternion::rotation_y(-1.8 + move1 * 3.0 + move2 * -0.9)
|
||||
* Quaternion::rotation_z(move1 * -0.2 + move2 * -1.5);
|
||||
biped_large_beta_axe(&mut next, s_a, move1, move2);
|
||||
},
|
||||
Some(ToolKind::Natural) => match ability_id {
|
||||
Some("common.abilities.custom.wendigomagic.singlestrike") => {
|
||||
|
@ -1,5 +1,7 @@
|
||||
use super::{
|
||||
super::{vek::*, Animation},
|
||||
biped_large_alpha_axe, biped_large_alpha_hammer, biped_large_alpha_sword, biped_large_beta_axe,
|
||||
biped_large_beta_hammer, biped_large_beta_sword, init_biped_large_alpha, init_biped_large_beta,
|
||||
BipedLargeSkeleton, SkeletonAttr,
|
||||
};
|
||||
use common::states::utils::{AbilityInfo, StageSection};
|
||||
@ -13,6 +15,8 @@ impl Animation for ComboAnimation {
|
||||
Option<AbilityInfo>,
|
||||
usize,
|
||||
Vec2<f32>,
|
||||
Vec3<f32>,
|
||||
f32,
|
||||
);
|
||||
type Skeleton = BipedLargeSkeleton;
|
||||
|
||||
@ -22,7 +26,7 @@ impl Animation for ComboAnimation {
|
||||
#[cfg_attr(feature = "be-dyn-lib", export_name = "biped_large_combo")]
|
||||
fn update_skeleton_inner(
|
||||
skeleton: &Self::Skeleton,
|
||||
(ability_id, stage_section, _ability_info, current_strike, _move_dir): Self::Dependency<'_>,
|
||||
(ability_id, stage_section, _ability_info, current_strike, _move_dir, velocity, acc_vel): Self::Dependency<'_>,
|
||||
anim_time: f32,
|
||||
rate: &mut f32,
|
||||
s_a: &SkeletonAttr,
|
||||
@ -108,6 +112,114 @@ impl Animation for ComboAnimation {
|
||||
_ => {},
|
||||
}
|
||||
},
|
||||
Some(
|
||||
"common.abilities.custom.cyclops.doublestrike"
|
||||
| "common.abilities.hammersimple.doublestrike",
|
||||
) => {
|
||||
let speed = Vec2::<f32>::from(velocity).magnitude();
|
||||
match strike {
|
||||
0 => {
|
||||
let (move1base, move2base, move3) = match stage_section {
|
||||
Some(StageSection::Buildup) => (anim_time.powf(0.25), 0.0, 0.0),
|
||||
Some(StageSection::Action) => (1.0, anim_time, 0.0),
|
||||
Some(StageSection::Recover) => (1.0, 1.0, anim_time.powi(4)),
|
||||
_ => (0.0, 0.0, 0.0),
|
||||
};
|
||||
let pullback = 1.0 - move3;
|
||||
let move1 = move1base * pullback;
|
||||
let move2 = move2base * pullback;
|
||||
|
||||
init_biped_large_alpha(&mut next, s_a, speed, acc_vel, move1);
|
||||
biped_large_alpha_hammer(&mut next, s_a, move1, move2);
|
||||
},
|
||||
1 => {
|
||||
let (move1base, move2base, move3) = match stage_section {
|
||||
Some(StageSection::Buildup) => (anim_time.powf(0.25), 0.0, 0.0),
|
||||
Some(StageSection::Action) => (1.0, anim_time, 0.0),
|
||||
Some(StageSection::Recover) => (1.0, 1.0, anim_time.powi(6)),
|
||||
_ => (0.0, 0.0, 0.0),
|
||||
};
|
||||
let pullback = 1.0 - move3;
|
||||
let move1 = move1base * pullback;
|
||||
let move2 = move2base * pullback;
|
||||
|
||||
init_biped_large_beta(&mut next, s_a, speed, acc_vel, move1);
|
||||
biped_large_beta_hammer(&mut next, s_a, move1, move2);
|
||||
},
|
||||
_ => {},
|
||||
}
|
||||
},
|
||||
Some(
|
||||
"common.abilities.custom.dullahan.melee"
|
||||
| "common.abilities.swordsimple.doublestrike",
|
||||
) => {
|
||||
let speed = Vec2::<f32>::from(velocity).magnitude();
|
||||
match strike {
|
||||
0 => {
|
||||
let (move1base, move2base, move3) = match stage_section {
|
||||
Some(StageSection::Buildup) => (anim_time.powf(0.25), 0.0, 0.0),
|
||||
Some(StageSection::Action) => (1.0, anim_time, 0.0),
|
||||
Some(StageSection::Recover) => (1.0, 1.0, anim_time.powi(4)),
|
||||
_ => (0.0, 0.0, 0.0),
|
||||
};
|
||||
let pullback = 1.0 - move3;
|
||||
let move1 = move1base * pullback;
|
||||
let move2 = move2base * pullback;
|
||||
|
||||
init_biped_large_alpha(&mut next, s_a, speed, acc_vel, move1);
|
||||
biped_large_alpha_sword(&mut next, s_a, move1, move2);
|
||||
},
|
||||
1 => {
|
||||
let (move1base, move2base, move3) = match stage_section {
|
||||
Some(StageSection::Buildup) => (anim_time.powf(0.25), 0.0, 0.0),
|
||||
Some(StageSection::Action) => (1.0, anim_time, 0.0),
|
||||
Some(StageSection::Recover) => (1.0, 1.0, anim_time.powi(6)),
|
||||
_ => (0.0, 0.0, 0.0),
|
||||
};
|
||||
let pullback = 1.0 - move3;
|
||||
let move1 = move1base * pullback;
|
||||
let move2 = move2base * pullback;
|
||||
|
||||
init_biped_large_beta(&mut next, s_a, speed, acc_vel, move1);
|
||||
biped_large_beta_sword(&mut next, s_a, move1base, move1, move2);
|
||||
},
|
||||
_ => {},
|
||||
}
|
||||
},
|
||||
Some("common.abilities.custom.oni.doublestrike") => {
|
||||
let speed = Vec2::<f32>::from(velocity).magnitude();
|
||||
match strike {
|
||||
0 => {
|
||||
let (move1base, move2base, move3) = match stage_section {
|
||||
Some(StageSection::Buildup) => (anim_time.powf(0.25), 0.0, 0.0),
|
||||
Some(StageSection::Action) => (1.0, anim_time, 0.0),
|
||||
Some(StageSection::Recover) => (1.0, 1.0, anim_time.powi(4)),
|
||||
_ => (0.0, 0.0, 0.0),
|
||||
};
|
||||
let pullback = 1.0 - move3;
|
||||
let move1 = move1base * pullback;
|
||||
let move2 = move2base * pullback;
|
||||
|
||||
init_biped_large_alpha(&mut next, s_a, speed, acc_vel, move1);
|
||||
biped_large_alpha_axe(&mut next, s_a, move1, move2);
|
||||
},
|
||||
1 => {
|
||||
let (move1base, move2base, move3) = match stage_section {
|
||||
Some(StageSection::Buildup) => (anim_time.powf(0.25), 0.0, 0.0),
|
||||
Some(StageSection::Action) => (1.0, anim_time, 0.0),
|
||||
Some(StageSection::Recover) => (1.0, 1.0, anim_time.powi(6)),
|
||||
_ => (0.0, 0.0, 0.0),
|
||||
};
|
||||
let pullback = 1.0 - move3;
|
||||
let move1 = move1base * pullback;
|
||||
let move2 = move2base * pullback;
|
||||
|
||||
init_biped_large_beta(&mut next, s_a, speed, acc_vel, move1);
|
||||
biped_large_beta_axe(&mut next, s_a, move1, move2);
|
||||
},
|
||||
_ => {},
|
||||
}
|
||||
},
|
||||
_ => {},
|
||||
}
|
||||
}
|
||||
|
@ -633,3 +633,268 @@ fn mount_point(body: &Body) -> Vec3<f32> {
|
||||
}
|
||||
.into()
|
||||
}
|
||||
|
||||
pub fn init_biped_large_alpha(
|
||||
next: &mut BipedLargeSkeleton,
|
||||
s_a: &SkeletonAttr,
|
||||
speed: f32,
|
||||
acc_vel: f32,
|
||||
move1: f32,
|
||||
) -> f32 {
|
||||
let lab: f32 = 0.65 * s_a.tempo;
|
||||
let speednorm = (speed / 12.0).powf(0.4);
|
||||
let foothoril = (acc_vel * lab + PI * 1.45).sin() * speednorm;
|
||||
let foothorir = (acc_vel * lab + PI * (0.45)).sin() * speednorm;
|
||||
let footrotl = ((1.0 / (0.5 + (0.5) * ((acc_vel * lab + PI * 1.4).sin()).powi(2))).sqrt())
|
||||
* ((acc_vel * lab + PI * 1.4).sin());
|
||||
|
||||
let footrotr = ((1.0 / (0.5 + (0.5) * ((acc_vel * lab + PI * 0.4).sin()).powi(2))).sqrt())
|
||||
* ((acc_vel * lab + PI * 0.4).sin());
|
||||
next.second.position = Vec3::new(0.0, 0.0, 0.0);
|
||||
next.second.orientation = Quaternion::rotation_x(0.0);
|
||||
next.shoulder_l.position = Vec3::new(
|
||||
-s_a.shoulder.0,
|
||||
s_a.shoulder.1,
|
||||
s_a.shoulder.2 - foothorir * 1.0,
|
||||
);
|
||||
next.shoulder_l.orientation =
|
||||
Quaternion::rotation_x(move1 * 0.8 + 0.6 * speednorm + (footrotr * -0.2) * speednorm);
|
||||
|
||||
next.shoulder_r.position = Vec3::new(
|
||||
s_a.shoulder.0,
|
||||
s_a.shoulder.1,
|
||||
s_a.shoulder.2 - foothoril * 1.0,
|
||||
);
|
||||
next.shoulder_r.orientation =
|
||||
Quaternion::rotation_x(move1 * 0.8 + 0.6 * speednorm + (footrotl * -0.2) * speednorm);
|
||||
|
||||
next.main.position = Vec3::new(0.0, 0.0, 0.0);
|
||||
next.main.orientation = Quaternion::rotation_x(0.0);
|
||||
|
||||
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);
|
||||
|
||||
next.hand_l.orientation = Quaternion::rotation_x(0.0);
|
||||
next.hand_r.orientation = Quaternion::rotation_x(0.0);
|
||||
|
||||
foothorir
|
||||
}
|
||||
|
||||
pub fn init_biped_large_beta(
|
||||
next: &mut BipedLargeSkeleton,
|
||||
s_a: &SkeletonAttr,
|
||||
speed: f32,
|
||||
acc_vel: f32,
|
||||
move1: f32,
|
||||
) {
|
||||
let lab: f32 = 0.65 * s_a.tempo;
|
||||
let speednorm = (speed / 12.0).powf(0.4);
|
||||
let foothoril = (acc_vel * lab + PI * 1.45).sin() * speednorm;
|
||||
let foothorir = (acc_vel * lab + PI * (0.45)).sin() * speednorm;
|
||||
let footrotl = ((1.0 / (0.5 + (0.5) * ((acc_vel * lab + PI * 1.4).sin()).powi(2))).sqrt())
|
||||
* ((acc_vel * lab + PI * 1.4).sin());
|
||||
|
||||
let footrotr = ((1.0 / (0.5 + (0.5) * ((acc_vel * lab + PI * 0.4).sin()).powi(2))).sqrt())
|
||||
* ((acc_vel * lab + PI * 0.4).sin());
|
||||
|
||||
next.shoulder_l.position = Vec3::new(
|
||||
-s_a.shoulder.0,
|
||||
s_a.shoulder.1,
|
||||
s_a.shoulder.2 - foothorir * 1.0,
|
||||
);
|
||||
next.shoulder_l.orientation =
|
||||
Quaternion::rotation_x(move1 * 0.8 + 0.6 * speednorm + (footrotr * -0.2) * speednorm);
|
||||
|
||||
next.shoulder_r.position = Vec3::new(
|
||||
s_a.shoulder.0,
|
||||
s_a.shoulder.1,
|
||||
s_a.shoulder.2 - foothoril * 1.0,
|
||||
);
|
||||
next.shoulder_r.orientation =
|
||||
Quaternion::rotation_x(move1 * 0.8 + 0.6 * speednorm + (footrotl * -0.2) * speednorm);
|
||||
next.torso.orientation = Quaternion::rotation_z(0.0);
|
||||
|
||||
next.main.position = Vec3::new(0.0, 0.0, 0.0);
|
||||
next.main.orientation = Quaternion::rotation_x(0.0);
|
||||
|
||||
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);
|
||||
|
||||
next.hand_l.orientation = Quaternion::rotation_x(0.0);
|
||||
next.hand_r.orientation = Quaternion::rotation_x(0.0);
|
||||
}
|
||||
|
||||
pub fn biped_large_alpha_hammer(
|
||||
next: &mut BipedLargeSkeleton,
|
||||
s_a: &SkeletonAttr,
|
||||
move1: f32,
|
||||
move2: f32,
|
||||
) {
|
||||
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);
|
||||
}
|
||||
|
||||
pub fn biped_large_beta_hammer(
|
||||
next: &mut BipedLargeSkeleton,
|
||||
s_a: &SkeletonAttr,
|
||||
move1: f32,
|
||||
move2: f32,
|
||||
) {
|
||||
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 * 6.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.6 + move2 * -1.5);
|
||||
next.lower_torso.orientation = Quaternion::rotation_z(move1 * -0.6 + move2 * 1.5);
|
||||
|
||||
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 * -1.5 + move2 * -0.3)
|
||||
* Quaternion::rotation_y(-1.8 + move1 * -0.8 + move2 * 3.0)
|
||||
* Quaternion::rotation_z(move1 * -0.8 + move2 * -0.8);
|
||||
}
|
||||
|
||||
pub fn biped_large_alpha_sword(
|
||||
next: &mut BipedLargeSkeleton,
|
||||
s_a: &SkeletonAttr,
|
||||
move1: f32,
|
||||
move2: f32,
|
||||
) {
|
||||
next.control_l.position = Vec3::new(-1.0, 1.0, 1.0);
|
||||
next.control_r.position = Vec3::new(0.0, 2.0, -3.0);
|
||||
next.head.orientation =
|
||||
Quaternion::rotation_x(move1 * -0.25) * Quaternion::rotation_z(move1 * -0.2 + move2 * 0.6);
|
||||
next.control.position = Vec3::new(
|
||||
-3.0 + move1 * -4.0 + move2 * 5.0,
|
||||
5.0 + s_a.grip.0 / 1.2 + move1 * -4.0 + move2 * 8.0,
|
||||
-4.0 + -s_a.grip.0 / 2.0 + move2 * -5.0,
|
||||
);
|
||||
next.upper_torso.orientation = Quaternion::rotation_z(move1 * 0.5 + move2 * -0.7);
|
||||
next.lower_torso.orientation = Quaternion::rotation_z(move1 * -0.5 + move2 * 0.7);
|
||||
next.control_l.orientation = Quaternion::rotation_x(PI / 2.0 + move1 * -0.5 + move2 * 1.5)
|
||||
* Quaternion::rotation_y(-0.2);
|
||||
next.control_r.orientation = Quaternion::rotation_x(PI / 2.2 + move1 * -0.5 + move2 * 1.5)
|
||||
* Quaternion::rotation_y(0.2)
|
||||
* Quaternion::rotation_z(0.0);
|
||||
|
||||
next.control.orientation = Quaternion::rotation_x(-0.2 + move1 * 0.5 + move2 * -2.0)
|
||||
* Quaternion::rotation_y(-0.1 + move1 * -0.5 + move2 * 1.0);
|
||||
}
|
||||
|
||||
pub fn biped_large_beta_sword(
|
||||
next: &mut BipedLargeSkeleton,
|
||||
s_a: &SkeletonAttr,
|
||||
move1base: f32,
|
||||
move1: f32,
|
||||
move2: f32,
|
||||
) {
|
||||
next.control_l.position = Vec3::new(-1.0, 1.0, 1.0);
|
||||
next.control_r.position = Vec3::new(0.0, 2.0, -3.0);
|
||||
next.head.orientation =
|
||||
Quaternion::rotation_x(move1 * -0.25) * Quaternion::rotation_z(move1 * -0.2 + move2 * 0.6);
|
||||
next.control.position = Vec3::new(
|
||||
-3.0 + move1 * -4.0 + move2 * 5.0,
|
||||
5.0 + s_a.grip.0 / 1.2 + move1 * -4.0 + move2 * 8.0,
|
||||
-4.0 + -s_a.grip.0 / 2.0 + move2 * -5.0,
|
||||
);
|
||||
next.upper_torso.orientation = Quaternion::rotation_z(move1base * 0.5 + move2 * -0.7);
|
||||
next.lower_torso.orientation = Quaternion::rotation_z(move1base * -0.5 + move2 * 0.7);
|
||||
next.control_l.orientation = Quaternion::rotation_x(PI / 2.0 + move1 * -0.5 + move2 * 1.5)
|
||||
* Quaternion::rotation_y(-0.2);
|
||||
next.control_r.orientation = Quaternion::rotation_x(PI / 2.2 + move1 * -0.5 + move2 * 1.5)
|
||||
* Quaternion::rotation_y(0.2)
|
||||
* Quaternion::rotation_z(0.0);
|
||||
|
||||
next.control.orientation = Quaternion::rotation_x(-0.2 + move1 * 0.5 + move2 * -1.5)
|
||||
* Quaternion::rotation_y(-0.1 + move1 * -0.5 + move2 * 1.0);
|
||||
}
|
||||
|
||||
pub fn biped_large_alpha_axe(
|
||||
next: &mut BipedLargeSkeleton,
|
||||
s_a: &SkeletonAttr,
|
||||
move1: f32,
|
||||
move2: f32,
|
||||
) {
|
||||
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 * 28.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.6 + move2 * -0.9);
|
||||
next.lower_torso.orientation = Quaternion::rotation_z(move1 * -0.6 + move2 * 0.9);
|
||||
|
||||
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.4 + move2 * 3.5)
|
||||
* Quaternion::rotation_z(move1 * -1.0 + move2 * -1.5);
|
||||
}
|
||||
|
||||
pub fn biped_large_beta_axe(
|
||||
next: &mut BipedLargeSkeleton,
|
||||
s_a: &SkeletonAttr,
|
||||
move1: f32,
|
||||
move2: f32,
|
||||
) {
|
||||
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 * -18.0 + move2 * 20.0,
|
||||
(s_a.grip.0 / 1.0) + move1 * -3.0 + move2 * 12.0,
|
||||
(-s_a.grip.0 / 0.8) + move1 * -2.0 + move2 * 4.0,
|
||||
);
|
||||
next.head.orientation =
|
||||
Quaternion::rotation_x(move1 * -0.25) * Quaternion::rotation_z(move1 * -0.9 + move2 * 0.6);
|
||||
next.upper_torso.orientation = Quaternion::rotation_z(move1 * 1.2 + move2 * -1.0);
|
||||
next.lower_torso.orientation = Quaternion::rotation_z(move1 * -1.2 + move2 * 1.0);
|
||||
|
||||
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.0 + move2 * -0.8)
|
||||
* Quaternion::rotation_y(-1.8 + move1 * 3.0 + move2 * -0.9)
|
||||
* Quaternion::rotation_z(move1 * -0.2 + move2 * -1.5);
|
||||
}
|
||||
|
@ -1,6 +1,7 @@
|
||||
use super::{
|
||||
super::{vek::*, Animation},
|
||||
BipedSmallSkeleton, SkeletonAttr,
|
||||
biped_small_alpha_axe, biped_small_alpha_dagger, biped_small_alpha_spear,
|
||||
init_biped_small_alpha, BipedSmallSkeleton, SkeletonAttr,
|
||||
};
|
||||
use common::{comp::item::ToolKind, states::utils::StageSection};
|
||||
use std::f32::consts::PI;
|
||||
@ -49,12 +50,12 @@ impl Animation for AlphaAnimation {
|
||||
) -> Self::Skeleton {
|
||||
let mut next = (*skeleton).clone();
|
||||
let speed = Vec2::<f32>::from(velocity).magnitude();
|
||||
let speednorm = speed / 9.4;
|
||||
let speednormcancel = 1.0 - speednorm;
|
||||
|
||||
let fast = (anim_time * 10.0).sin();
|
||||
let fastalt = (anim_time * 10.0 + PI / 2.0).sin();
|
||||
|
||||
let speednorm = speed / 9.4;
|
||||
let speednormcancel = 1.0 - speednorm;
|
||||
let anim_time = anim_time.min(1.0);
|
||||
let (move1base, move2base, move3) = match stage_section {
|
||||
Some(StageSection::Buildup) => (anim_time.sqrt(), 0.0, 0.0),
|
||||
@ -70,105 +71,26 @@ impl Animation for AlphaAnimation {
|
||||
let move2 = move2base * pullback * mirror;
|
||||
let move1abs = move1base * pullback;
|
||||
let move2abs = move2base * pullback;
|
||||
next.hand_l.position = Vec3::new(s_a.grip.0 * 4.0, 0.0, s_a.grip.2);
|
||||
next.hand_r.position = Vec3::new(-s_a.grip.0 * 4.0, 0.0, s_a.grip.2);
|
||||
next.main.position = Vec3::new(0.0, 0.0, 0.0);
|
||||
next.main.orientation = Quaternion::rotation_x(0.0);
|
||||
next.hand_l.orientation = Quaternion::rotation_x(0.0);
|
||||
next.hand_r.orientation = Quaternion::rotation_x(0.0);
|
||||
|
||||
init_biped_small_alpha(&mut next, s_a);
|
||||
|
||||
match active_tool_kind {
|
||||
Some(ToolKind::Spear) => {
|
||||
next.head.position = Vec3::new(0.0, s_a.head.0, s_a.head.1);
|
||||
next.head.orientation = Quaternion::rotation_x(move1abs * 0.2 + move2abs * 0.3)
|
||||
* Quaternion::rotation_z(move1abs * -0.2 + move2abs * 0.6)
|
||||
* Quaternion::rotation_y(move1abs * 0.3 + move2abs * -0.5);
|
||||
next.chest.position = Vec3::new(0.0, s_a.chest.0, s_a.chest.1);
|
||||
next.chest.orientation = Quaternion::rotation_x(move1abs * -0.2 + move2abs * 0.3)
|
||||
* Quaternion::rotation_z(move1abs * 0.5 + move2abs * -0.6);
|
||||
|
||||
next.pants.position = Vec3::new(0.0, s_a.pants.0, s_a.pants.1);
|
||||
next.pants.orientation = Quaternion::rotation_x(move1abs * 0.2 + move2abs * -0.3)
|
||||
* Quaternion::rotation_z(move1abs * -0.2 + move2abs * 0.2);
|
||||
|
||||
next.control_l.position = Vec3::new(1.0 - s_a.grip.0 * 2.0, 2.0, -2.0);
|
||||
next.control_r.position = Vec3::new(-1.0 + s_a.grip.0 * 2.0, 2.0, 2.0);
|
||||
|
||||
next.control.position = Vec3::new(
|
||||
-3.0 + move1abs * -3.0 + move2abs * 5.0,
|
||||
s_a.grip.2 + move1abs * -12.0 + move2abs * 17.0,
|
||||
-s_a.grip.2 / 2.5 + s_a.grip.0 * -2.0 + move2abs * 5.0,
|
||||
biped_small_alpha_spear(
|
||||
&mut next,
|
||||
s_a,
|
||||
move1abs,
|
||||
move2abs,
|
||||
fast,
|
||||
fastalt,
|
||||
speednormcancel,
|
||||
);
|
||||
|
||||
next.control_l.orientation =
|
||||
Quaternion::rotation_x(PI / 1.5 + move1abs * -1.5 + move2abs * 2.5)
|
||||
* Quaternion::rotation_y(-0.3);
|
||||
next.control_r.orientation = Quaternion::rotation_x(
|
||||
PI / 1.5 + s_a.grip.0 * 0.2 + move1abs * -1.5 + move2abs * 2.5,
|
||||
) * Quaternion::rotation_y(0.5 + s_a.grip.0 * 0.2);
|
||||
|
||||
next.control.orientation =
|
||||
Quaternion::rotation_x(-1.35 + move1abs * -0.3 + move2abs * 0.5)
|
||||
* Quaternion::rotation_z(move1abs * 1.0 + move2abs * -1.0)
|
||||
* Quaternion::rotation_y(move2abs * 0.0);
|
||||
|
||||
next.tail.position = Vec3::new(0.0, s_a.tail.0, s_a.tail.1);
|
||||
next.tail.orientation = Quaternion::rotation_x(0.05 * fastalt * speednormcancel)
|
||||
* Quaternion::rotation_z(fast * 0.15 * speednormcancel);
|
||||
},
|
||||
Some(ToolKind::Axe | ToolKind::Hammer | ToolKind::Pick | ToolKind::Shovel) => {
|
||||
next.head.orientation = Quaternion::rotation_z(move1abs * 0.3 + move2abs * -0.6);
|
||||
next.control_l.position = Vec3::new(2.0 - s_a.grip.0 * 2.0, 1.0, 3.0);
|
||||
next.control_r.position = Vec3::new(
|
||||
9.0 + move1abs * -10.0 + s_a.grip.0 * 2.0,
|
||||
-1.0 + move1abs * 2.0,
|
||||
move1abs * 3.0 - 2.0,
|
||||
);
|
||||
|
||||
next.control.position = Vec3::new(
|
||||
-5.0 + move1abs * 5.0,
|
||||
-1.0 + s_a.grip.2,
|
||||
-1.0 + move1abs * 3.0 + -s_a.grip.2 / 2.5 + s_a.grip.0 * -2.0,
|
||||
);
|
||||
|
||||
next.control_l.orientation = Quaternion::rotation_x(PI / 2.0 + move2abs * 1.0)
|
||||
* Quaternion::rotation_y(-0.0)
|
||||
* Quaternion::rotation_z(-0.0);
|
||||
next.control_r.orientation =
|
||||
Quaternion::rotation_x(0.5 + move1abs * 1.5 + s_a.grip.0 * 0.2)
|
||||
* Quaternion::rotation_y(0.2 + s_a.grip.0 * 0.2)
|
||||
* Quaternion::rotation_z(-0.0);
|
||||
|
||||
next.control.orientation = Quaternion::rotation_x(-0.3 + move2abs * -1.0)
|
||||
* Quaternion::rotation_y(move1abs * -0.9 + move2abs * 2.0)
|
||||
* Quaternion::rotation_z(-0.3);
|
||||
biped_small_alpha_axe(&mut next, s_a, move1abs, move2abs);
|
||||
},
|
||||
Some(ToolKind::Dagger) => {
|
||||
next.head.orientation = Quaternion::rotation_x(move1abs * 0.15 + move2abs * -0.15)
|
||||
* Quaternion::rotation_z(move1abs * 0.15 + move2abs * -0.3);
|
||||
next.control_l.position = Vec3::new(2.0 - s_a.grip.0 * 2.0, 1.0, 3.0);
|
||||
next.control_r.position = Vec3::new(
|
||||
9.0 + move1abs * -7.0 + s_a.grip.0 * 2.0,
|
||||
-1.0 + move1abs * 6.0,
|
||||
-2.0,
|
||||
);
|
||||
|
||||
next.control.position = Vec3::new(
|
||||
-5.0 + move1abs * 5.0 + move2abs * 9.0,
|
||||
-1.0 + move2abs * -3.0 + s_a.grip.2,
|
||||
-1.0 + move1abs * 3.0 + -s_a.grip.2 / 2.5 + s_a.grip.0 * -2.0,
|
||||
);
|
||||
|
||||
next.control_l.orientation = Quaternion::rotation_x(PI / 2.0)
|
||||
* Quaternion::rotation_y(-0.0)
|
||||
* Quaternion::rotation_z(-0.0);
|
||||
next.control_r.orientation =
|
||||
Quaternion::rotation_x(0.5 + move1abs * 1.5 + s_a.grip.0 * 0.2)
|
||||
* Quaternion::rotation_y(0.2 + s_a.grip.0 * 0.2)
|
||||
* Quaternion::rotation_z(-0.0);
|
||||
|
||||
next.control.orientation = Quaternion::rotation_x(-0.3 + move2abs * -1.0)
|
||||
* Quaternion::rotation_y(move1abs * -0.4 + move2abs * 1.0)
|
||||
* Quaternion::rotation_z(-0.3 + move2abs * -2.2);
|
||||
biped_small_alpha_dagger(&mut next, s_a, move1abs, move2abs);
|
||||
},
|
||||
Some(ToolKind::Staff) => match ability_id {
|
||||
Some("common.abilities.custom.dwarves.flamekeeper.flamecrush") => {
|
||||
|
@ -1,18 +1,14 @@
|
||||
use super::{
|
||||
super::{vek::*, Animation},
|
||||
BipedSmallSkeleton, SkeletonAttr,
|
||||
biped_small_alpha_axe, biped_small_alpha_dagger, biped_small_alpha_spear,
|
||||
init_biped_small_alpha, BipedSmallSkeleton, SkeletonAttr,
|
||||
};
|
||||
use common::states::utils::{AbilityInfo, StageSection};
|
||||
use common::states::utils::StageSection;
|
||||
use std::f32::consts::PI;
|
||||
|
||||
pub struct ComboAnimation;
|
||||
impl Animation for ComboAnimation {
|
||||
type Dependency<'a> = (
|
||||
Option<&'a str>,
|
||||
Option<StageSection>,
|
||||
Option<AbilityInfo>,
|
||||
usize,
|
||||
Vec2<f32>,
|
||||
);
|
||||
type Dependency<'a> = (Option<&'a str>, StageSection, usize, Vec3<f32>, f32, f32);
|
||||
type Skeleton = BipedSmallSkeleton;
|
||||
|
||||
#[cfg(feature = "use-dyn-lib")]
|
||||
@ -21,7 +17,7 @@ impl Animation for ComboAnimation {
|
||||
#[cfg_attr(feature = "be-dyn-lib", export_name = "biped_small_combo")]
|
||||
fn update_skeleton_inner(
|
||||
skeleton: &Self::Skeleton,
|
||||
(ability_id, stage_section, _ability_info, current_strike, _move_dir): Self::Dependency<'_>,
|
||||
(ability_id, stage_section, current_strike, velocity, _global_time, _timer): Self::Dependency<'_>,
|
||||
anim_time: f32,
|
||||
rate: &mut f32,
|
||||
s_a: &SkeletonAttr,
|
||||
@ -32,7 +28,7 @@ impl Animation for ComboAnimation {
|
||||
next.main.position = Vec3::new(0.0, 0.0, 0.0);
|
||||
next.main.orientation = Quaternion::rotation_z(0.0);
|
||||
let multi_strike_pullback = 1.0
|
||||
- if matches!(stage_section, Some(StageSection::Recover)) {
|
||||
- if matches!(stage_section, StageSection::Recover) {
|
||||
anim_time.powi(4)
|
||||
} else {
|
||||
0.0
|
||||
@ -50,11 +46,11 @@ impl Animation for ComboAnimation {
|
||||
) => {
|
||||
let (move1, move2) = if strike == current_strike {
|
||||
match stage_section {
|
||||
Some(StageSection::Buildup) => {
|
||||
StageSection::Buildup => {
|
||||
(((anim_time.max(0.4) - 0.4) * 1.5).powf(0.5), 0.0)
|
||||
},
|
||||
Some(StageSection::Action) => (1.0, (anim_time.min(0.4) * 2.5).powi(2)),
|
||||
Some(StageSection::Recover) => (1.0, 1.0),
|
||||
StageSection::Action => (1.0, (anim_time.min(0.4) * 2.5).powi(2)),
|
||||
StageSection::Recover => (1.0, 1.0),
|
||||
_ => (0.0, 0.0),
|
||||
}
|
||||
} else {
|
||||
@ -81,6 +77,68 @@ impl Animation for ComboAnimation {
|
||||
_ => {},
|
||||
}
|
||||
},
|
||||
Some(
|
||||
"common.abilities.axesimple.doublestrike"
|
||||
| "common.abilities.custom.boreal_warrior.hammer",
|
||||
) => {
|
||||
let anim_time = anim_time.min(1.0);
|
||||
let (move1base, move2base, move3) = match stage_section {
|
||||
StageSection::Buildup => (anim_time.sqrt(), 0.0, 0.0),
|
||||
StageSection::Action => (1.0, anim_time.powi(4), 0.0),
|
||||
StageSection::Recover => (1.0, 1.0, anim_time),
|
||||
_ => (0.0, 0.0, 0.0),
|
||||
};
|
||||
let pullback = 1.0 - move3;
|
||||
let move1abs = move1base * pullback;
|
||||
let move2abs = move2base * pullback;
|
||||
|
||||
init_biped_small_alpha(&mut next, s_a);
|
||||
biped_small_alpha_axe(&mut next, s_a, move1abs, move2abs);
|
||||
},
|
||||
Some("common.abilities.daggersimple.singlestrike") => {
|
||||
let anim_time = anim_time.min(1.0);
|
||||
let (move1base, move2base, move3) = match stage_section {
|
||||
StageSection::Buildup => (anim_time.sqrt(), 0.0, 0.0),
|
||||
StageSection::Action => (1.0, anim_time.powi(4), 0.0),
|
||||
StageSection::Recover => (1.0, 1.0, anim_time),
|
||||
_ => (0.0, 0.0, 0.0),
|
||||
};
|
||||
let pullback = 1.0 - move3;
|
||||
let move1abs = move1base * pullback;
|
||||
let move2abs = move2base * pullback;
|
||||
|
||||
init_biped_small_alpha(&mut next, s_a);
|
||||
biped_small_alpha_dagger(&mut next, s_a, move1abs, move2abs);
|
||||
},
|
||||
Some("common.abilities.spear.doublestrike") => {
|
||||
let anim_time = anim_time.min(1.0);
|
||||
let speed = Vec2::<f32>::from(velocity).magnitude();
|
||||
let speednorm = speed / 9.4;
|
||||
let speednormcancel = 1.0 - speednorm;
|
||||
let fast = (anim_time * 10.0).sin();
|
||||
let fastalt = (anim_time * 10.0 + PI / 2.0).sin();
|
||||
|
||||
let (move1base, move2base, move3) = match stage_section {
|
||||
StageSection::Buildup => (anim_time.sqrt(), 0.0, 0.0),
|
||||
StageSection::Action => (1.0, anim_time.powi(4), 0.0),
|
||||
StageSection::Recover => (1.0, 1.0, anim_time),
|
||||
_ => (0.0, 0.0, 0.0),
|
||||
};
|
||||
let pullback = 1.0 - move3;
|
||||
let move1abs = move1base * pullback;
|
||||
let move2abs = move2base * pullback;
|
||||
|
||||
init_biped_small_alpha(&mut next, s_a);
|
||||
biped_small_alpha_spear(
|
||||
&mut next,
|
||||
s_a,
|
||||
move1abs,
|
||||
move2abs,
|
||||
fast,
|
||||
fastalt,
|
||||
speednormcancel,
|
||||
);
|
||||
},
|
||||
_ => {},
|
||||
}
|
||||
}
|
||||
|
@ -22,6 +22,7 @@ pub use self::{
|
||||
use super::{make_bone, vek::*, FigureBoneData, Offsets, Skeleton};
|
||||
use common::comp::{self};
|
||||
use core::convert::TryFrom;
|
||||
use std::f32::consts::PI;
|
||||
|
||||
pub type Body = comp::biped_small::Body;
|
||||
|
||||
@ -280,3 +281,123 @@ impl<'a> From<&'a Body> for SkeletonAttr {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub fn init_biped_small_alpha(next: &mut BipedSmallSkeleton, s_a: &SkeletonAttr) {
|
||||
next.hand_l.position = Vec3::new(s_a.grip.0 * 4.0, 0.0, s_a.grip.2);
|
||||
next.hand_r.position = Vec3::new(-s_a.grip.0 * 4.0, 0.0, s_a.grip.2);
|
||||
next.main.position = Vec3::new(0.0, 0.0, 0.0);
|
||||
next.main.orientation = Quaternion::rotation_x(0.0);
|
||||
next.hand_l.orientation = Quaternion::rotation_x(0.0);
|
||||
next.hand_r.orientation = Quaternion::rotation_x(0.0);
|
||||
}
|
||||
|
||||
pub fn biped_small_alpha_spear(
|
||||
next: &mut BipedSmallSkeleton,
|
||||
s_a: &SkeletonAttr,
|
||||
move1abs: f32,
|
||||
move2abs: f32,
|
||||
fast: f32,
|
||||
fastalt: f32,
|
||||
speednormcancel: f32,
|
||||
) {
|
||||
next.head.position = Vec3::new(0.0, s_a.head.0, s_a.head.1);
|
||||
next.head.orientation = Quaternion::rotation_x(move1abs * 0.2 + move2abs * 0.3)
|
||||
* Quaternion::rotation_z(move1abs * -0.2 + move2abs * 0.6)
|
||||
* Quaternion::rotation_y(move1abs * 0.3 + move2abs * -0.5);
|
||||
next.chest.position = Vec3::new(0.0, s_a.chest.0, s_a.chest.1);
|
||||
next.chest.orientation = Quaternion::rotation_x(move1abs * -0.2 + move2abs * 0.3)
|
||||
* Quaternion::rotation_z(move1abs * 0.5 + move2abs * -0.6);
|
||||
|
||||
next.pants.position = Vec3::new(0.0, s_a.pants.0, s_a.pants.1);
|
||||
next.pants.orientation = Quaternion::rotation_x(move1abs * 0.2 + move2abs * -0.3)
|
||||
* Quaternion::rotation_z(move1abs * -0.2 + move2abs * 0.2);
|
||||
|
||||
next.control_l.position = Vec3::new(1.0 - s_a.grip.0 * 2.0, 2.0, -2.0);
|
||||
next.control_r.position = Vec3::new(-1.0 + s_a.grip.0 * 2.0, 2.0, 2.0);
|
||||
|
||||
next.control.position = Vec3::new(
|
||||
-3.0 + move1abs * -3.0 + move2abs * 5.0,
|
||||
s_a.grip.2 + move1abs * -12.0 + move2abs * 17.0,
|
||||
-s_a.grip.2 / 2.5 + s_a.grip.0 * -2.0 + move2abs * 5.0,
|
||||
);
|
||||
|
||||
next.control_l.orientation =
|
||||
Quaternion::rotation_x(PI / 1.5 + move1abs * -1.5 + move2abs * 2.5)
|
||||
* Quaternion::rotation_y(-0.3);
|
||||
next.control_r.orientation =
|
||||
Quaternion::rotation_x(PI / 1.5 + s_a.grip.0 * 0.2 + move1abs * -1.5 + move2abs * 2.5)
|
||||
* Quaternion::rotation_y(0.5 + s_a.grip.0 * 0.2);
|
||||
|
||||
next.control.orientation = Quaternion::rotation_x(-1.35 + move1abs * -0.3 + move2abs * 0.5)
|
||||
* Quaternion::rotation_z(move1abs * 1.0 + move2abs * -1.0)
|
||||
* Quaternion::rotation_y(move2abs * 0.0);
|
||||
|
||||
next.tail.position = Vec3::new(0.0, s_a.tail.0, s_a.tail.1);
|
||||
next.tail.orientation = Quaternion::rotation_x(0.05 * fastalt * speednormcancel)
|
||||
* Quaternion::rotation_z(fast * 0.15 * speednormcancel);
|
||||
}
|
||||
|
||||
pub fn biped_small_alpha_axe(
|
||||
next: &mut BipedSmallSkeleton,
|
||||
s_a: &SkeletonAttr,
|
||||
move1abs: f32,
|
||||
move2abs: f32,
|
||||
) {
|
||||
next.head.orientation = Quaternion::rotation_z(move1abs * 0.3 + move2abs * -0.6);
|
||||
next.control_l.position = Vec3::new(2.0 - s_a.grip.0 * 2.0, 1.0, 3.0);
|
||||
next.control_r.position = Vec3::new(
|
||||
9.0 + move1abs * -10.0 + s_a.grip.0 * 2.0,
|
||||
-1.0 + move1abs * 2.0,
|
||||
move1abs * 3.0 - 2.0,
|
||||
);
|
||||
|
||||
next.control.position = Vec3::new(
|
||||
-5.0 + move1abs * 5.0,
|
||||
-1.0 + s_a.grip.2,
|
||||
-1.0 + move1abs * 3.0 + -s_a.grip.2 / 2.5 + s_a.grip.0 * -2.0,
|
||||
);
|
||||
|
||||
next.control_l.orientation = Quaternion::rotation_x(PI / 2.0 + move2abs * 1.0)
|
||||
* Quaternion::rotation_y(-0.0)
|
||||
* Quaternion::rotation_z(-0.0);
|
||||
next.control_r.orientation = Quaternion::rotation_x(0.5 + move1abs * 1.5 + s_a.grip.0 * 0.2)
|
||||
* Quaternion::rotation_y(0.2 + s_a.grip.0 * 0.2)
|
||||
* Quaternion::rotation_z(-0.0);
|
||||
|
||||
next.control.orientation = Quaternion::rotation_x(-0.3 + move2abs * -1.0)
|
||||
* Quaternion::rotation_y(move1abs * -0.9 + move2abs * 2.0)
|
||||
* Quaternion::rotation_z(-0.3);
|
||||
}
|
||||
|
||||
pub fn biped_small_alpha_dagger(
|
||||
next: &mut BipedSmallSkeleton,
|
||||
s_a: &SkeletonAttr,
|
||||
move1abs: f32,
|
||||
move2abs: f32,
|
||||
) {
|
||||
next.head.orientation = Quaternion::rotation_x(move1abs * 0.15 + move2abs * -0.15)
|
||||
* Quaternion::rotation_z(move1abs * 0.15 + move2abs * -0.3);
|
||||
next.control_l.position = Vec3::new(2.0 - s_a.grip.0 * 2.0, 1.0, 3.0);
|
||||
next.control_r.position = Vec3::new(
|
||||
9.0 + move1abs * -7.0 + s_a.grip.0 * 2.0,
|
||||
-1.0 + move1abs * 6.0,
|
||||
-2.0,
|
||||
);
|
||||
|
||||
next.control.position = Vec3::new(
|
||||
-5.0 + move1abs * 5.0 + move2abs * 9.0,
|
||||
-1.0 + move2abs * -3.0 + s_a.grip.2,
|
||||
-1.0 + move1abs * 3.0 + -s_a.grip.2 / 2.5 + s_a.grip.0 * -2.0,
|
||||
);
|
||||
|
||||
next.control_l.orientation = Quaternion::rotation_x(PI / 2.0)
|
||||
* Quaternion::rotation_y(-0.0)
|
||||
* Quaternion::rotation_z(-0.0);
|
||||
next.control_r.orientation = Quaternion::rotation_x(0.5 + move1abs * 1.5 + s_a.grip.0 * 0.2)
|
||||
* Quaternion::rotation_y(0.2 + s_a.grip.0 * 0.2)
|
||||
* Quaternion::rotation_z(-0.0);
|
||||
|
||||
next.control.orientation = Quaternion::rotation_x(-0.3 + move2abs * -1.0)
|
||||
* Quaternion::rotation_y(move1abs * -0.4 + move2abs * 1.0)
|
||||
* Quaternion::rotation_z(-0.3 + move2abs * -2.2);
|
||||
}
|
||||
|
0
voxygen/anim/src/golem/combomelee.rs
Normal file
0
voxygen/anim/src/golem/combomelee.rs
Normal file
@ -1,60 +0,0 @@
|
||||
use super::{
|
||||
super::{vek::*, Animation},
|
||||
QuadrupedLowSkeleton, SkeletonAttr,
|
||||
};
|
||||
use common::states::utils::StageSection;
|
||||
//use std::ops::Rem;
|
||||
|
||||
pub struct AlphaAnimation;
|
||||
|
||||
impl Animation for AlphaAnimation {
|
||||
type Dependency<'a> = (f32, f32, Option<StageSection>, f32);
|
||||
type Skeleton = QuadrupedLowSkeleton;
|
||||
|
||||
#[cfg(feature = "use-dyn-lib")]
|
||||
const UPDATE_FN: &'static [u8] = b"quadruped_low_alpha\0";
|
||||
|
||||
#[cfg_attr(feature = "be-dyn-lib", export_name = "quadruped_low_alpha")]
|
||||
fn update_skeleton_inner(
|
||||
skeleton: &Self::Skeleton,
|
||||
(_velocity, global_time, stage_section, timer): Self::Dependency<'_>,
|
||||
anim_time: f32,
|
||||
_rate: &mut f32,
|
||||
_s_a: &SkeletonAttr,
|
||||
) -> Self::Skeleton {
|
||||
let mut next = (*skeleton).clone();
|
||||
|
||||
let (movement1base, movement2base, movement3) = match stage_section {
|
||||
Some(StageSection::Buildup) => (anim_time.sqrt(), 0.0, 0.0),
|
||||
Some(StageSection::Action) => (1.0, anim_time.powi(4), 0.0),
|
||||
Some(StageSection::Recover) => (1.0, 1.0, anim_time),
|
||||
_ => (0.0, 0.0, 0.0),
|
||||
};
|
||||
let pullback = 1.0 - movement3;
|
||||
let subtract = global_time - timer;
|
||||
let check = subtract - subtract.trunc();
|
||||
let mirror = (check - 0.5).signum();
|
||||
let twitch3 = (mirror * movement3 * 9.0).sin();
|
||||
let movement1 = mirror * movement1base * pullback;
|
||||
let movement2 = mirror * movement2base * pullback;
|
||||
let movement1abs = movement1base * pullback;
|
||||
let movement2abs = movement2base * pullback;
|
||||
|
||||
next.head_upper.orientation = Quaternion::rotation_z(twitch3 * -0.7);
|
||||
|
||||
next.head_lower.orientation =
|
||||
Quaternion::rotation_x(movement1abs * 0.35 + movement2abs * -0.9)
|
||||
* Quaternion::rotation_y(movement1 * 0.7 + movement2 * -1.0);
|
||||
|
||||
next.jaw.orientation = Quaternion::rotation_x(movement1abs * -0.5 + movement2abs * 0.5);
|
||||
next.chest.orientation = Quaternion::rotation_y(movement1 * -0.08 + movement2 * 0.15)
|
||||
* Quaternion::rotation_z(movement1 * -0.2 + movement2 * 0.6);
|
||||
|
||||
next.tail_front.orientation = Quaternion::rotation_x(0.15)
|
||||
* Quaternion::rotation_z(movement1 * -0.4 + movement2 * -0.2);
|
||||
|
||||
next.tail_rear.orientation = Quaternion::rotation_x(-0.12)
|
||||
* Quaternion::rotation_z(movement1 * -0.4 + movement2 * -0.2);
|
||||
next
|
||||
}
|
||||
}
|
@ -1,14 +1,11 @@
|
||||
use super::{
|
||||
super::{vek::*, Animation},
|
||||
QuadrupedLowSkeleton, SkeletonAttr,
|
||||
};
|
||||
use super::{super::Animation, quadruped_low_beta, QuadrupedLowSkeleton, SkeletonAttr};
|
||||
use common::states::utils::StageSection;
|
||||
//use std::ops::Rem;
|
||||
|
||||
pub struct BetaAnimation;
|
||||
|
||||
impl Animation for BetaAnimation {
|
||||
type Dependency<'a> = (f32, f32, Option<StageSection>, f32);
|
||||
type Dependency<'a> = (f32, f32, StageSection, f32);
|
||||
type Skeleton = QuadrupedLowSkeleton;
|
||||
|
||||
#[cfg(feature = "use-dyn-lib")]
|
||||
@ -20,41 +17,12 @@ impl Animation for BetaAnimation {
|
||||
(_velocity, global_time, stage_section, timer): Self::Dependency<'_>,
|
||||
anim_time: f32,
|
||||
_rate: &mut f32,
|
||||
_s_a: &SkeletonAttr,
|
||||
s_a: &SkeletonAttr,
|
||||
) -> Self::Skeleton {
|
||||
let mut next = (*skeleton).clone();
|
||||
|
||||
let (movement1base, movement2base, movement3) = match stage_section {
|
||||
Some(StageSection::Buildup) => (anim_time.sqrt(), 0.0, 0.0),
|
||||
Some(StageSection::Action) => (1.0, anim_time.powi(4), 0.0),
|
||||
Some(StageSection::Recover) => (1.0, 1.0, anim_time),
|
||||
_ => (0.0, 0.0, 0.0),
|
||||
};
|
||||
let pullback = 1.0 - movement3;
|
||||
let subtract = global_time - timer;
|
||||
let check = subtract - subtract.trunc();
|
||||
let mirror = (check - 0.5).signum();
|
||||
let twitch3 = (mirror * movement3 * 9.0).sin();
|
||||
let movement1 = mirror * movement1base * pullback;
|
||||
let movement2 = mirror * movement2base * pullback;
|
||||
let movement1abs = movement1base * pullback;
|
||||
let movement2abs = movement2base * pullback;
|
||||
quadruped_low_beta(&mut next, s_a, stage_section, anim_time, global_time, timer);
|
||||
|
||||
next.head_upper.orientation = Quaternion::rotation_z(twitch3 * 0.2);
|
||||
|
||||
next.head_lower.orientation =
|
||||
Quaternion::rotation_x(movement1abs * 0.15 + movement2abs * -0.6)
|
||||
* Quaternion::rotation_y(movement1 * -0.1 + movement2 * 0.15);
|
||||
|
||||
next.jaw.orientation = Quaternion::rotation_x(movement1abs * -0.9 + movement2abs * 0.9);
|
||||
next.chest.orientation = Quaternion::rotation_y(movement1 * 0.08 + movement2 * -0.15)
|
||||
* Quaternion::rotation_z(movement1 * 0.2 + movement2 * -0.3);
|
||||
|
||||
next.tail_front.orientation = Quaternion::rotation_x(0.15)
|
||||
* Quaternion::rotation_z(movement1 * 0.4 + movement2 * 0.2);
|
||||
|
||||
next.tail_rear.orientation = Quaternion::rotation_x(-0.12)
|
||||
* Quaternion::rotation_z(movement1 * 0.4 + movement2 * 0.2);
|
||||
next
|
||||
}
|
||||
}
|
||||
|
@ -1,19 +1,12 @@
|
||||
use super::{
|
||||
super::{vek::*, Animation},
|
||||
QuadrupedLowSkeleton, SkeletonAttr,
|
||||
quadruped_low_alpha, quadruped_low_beta, QuadrupedLowSkeleton, SkeletonAttr,
|
||||
};
|
||||
use common::states::utils::{AbilityInfo, StageSection};
|
||||
use common::states::utils::StageSection;
|
||||
|
||||
pub struct ComboAnimation;
|
||||
impl Animation for ComboAnimation {
|
||||
type Dependency<'a> = (
|
||||
Option<&'a str>,
|
||||
Option<StageSection>,
|
||||
Option<AbilityInfo>,
|
||||
usize,
|
||||
f32,
|
||||
f32,
|
||||
);
|
||||
type Dependency<'a> = (Option<&'a str>, StageSection, usize, f32, f32);
|
||||
type Skeleton = QuadrupedLowSkeleton;
|
||||
|
||||
#[cfg(feature = "use-dyn-lib")]
|
||||
@ -22,16 +15,16 @@ impl Animation for ComboAnimation {
|
||||
#[cfg_attr(feature = "be-dyn-lib", export_name = "quadruped_low_combo")]
|
||||
fn update_skeleton_inner(
|
||||
skeleton: &Self::Skeleton,
|
||||
(ability_id, stage_section, _ability_info, current_strike, global_time, timer): Self::Dependency<'_>,
|
||||
(ability_id, stage_section, current_strike, global_time, timer): Self::Dependency<'_>,
|
||||
anim_time: f32,
|
||||
rate: &mut f32,
|
||||
_s_a: &SkeletonAttr,
|
||||
s_a: &SkeletonAttr,
|
||||
) -> Self::Skeleton {
|
||||
*rate = 1.0;
|
||||
let mut next = (*skeleton).clone();
|
||||
|
||||
let _multi_strike_pullback = 1.0
|
||||
- if matches!(stage_section, Some(StageSection::Recover)) {
|
||||
- if matches!(stage_section, StageSection::Recover) {
|
||||
anim_time.powi(4)
|
||||
} else {
|
||||
0.0
|
||||
@ -45,9 +38,9 @@ impl Animation for ComboAnimation {
|
||||
| "common.abilities.custom.driggle.bite",
|
||||
) => {
|
||||
let (movement1base, movement2base, movement3) = match stage_section {
|
||||
Some(StageSection::Buildup) => (anim_time.sqrt(), 0.0, 0.0),
|
||||
Some(StageSection::Action) => (1.0, anim_time.powi(4), 0.0),
|
||||
Some(StageSection::Recover) => (1.0, 1.0, anim_time),
|
||||
StageSection::Buildup => (anim_time.sqrt(), 0.0, 0.0),
|
||||
StageSection::Action => (1.0, anim_time.powi(4), 0.0),
|
||||
StageSection::Recover => (1.0, 1.0, anim_time),
|
||||
_ => (0.0, 0.0, 0.0),
|
||||
};
|
||||
let pullback = 1.0 - movement3;
|
||||
@ -102,6 +95,71 @@ impl Animation for ComboAnimation {
|
||||
_ => {},
|
||||
}
|
||||
},
|
||||
Some(
|
||||
"common.abilities.custom.asp.singlestrike"
|
||||
| "comon.abilities.custom.maneater.singlestrike"
|
||||
| "common.abilities.custom.quadlowbasic.singlestrike",
|
||||
) => {
|
||||
quadruped_low_alpha(
|
||||
&mut next,
|
||||
s_a,
|
||||
stage_section,
|
||||
anim_time,
|
||||
global_time,
|
||||
timer,
|
||||
);
|
||||
},
|
||||
Some(
|
||||
"common.abilities.custom.basilisk.triplestrike"
|
||||
| "common.abilities.custom.quadlowbasic.triplestrike"
|
||||
| "common.abilities.custom.quadlowbreathe.triplestrike"
|
||||
| "common.abilities.custom.quadlowtail.triplestrike",
|
||||
) => match strike {
|
||||
0 | 2 => {
|
||||
quadruped_low_alpha(
|
||||
&mut next,
|
||||
s_a,
|
||||
stage_section,
|
||||
anim_time,
|
||||
global_time,
|
||||
timer,
|
||||
);
|
||||
},
|
||||
1 => {
|
||||
quadruped_low_beta(
|
||||
&mut next,
|
||||
s_a,
|
||||
stage_section,
|
||||
anim_time,
|
||||
global_time,
|
||||
timer,
|
||||
);
|
||||
},
|
||||
_ => {},
|
||||
},
|
||||
Some("common.abilities.custom.quadlowquick.quadstrike") => match strike {
|
||||
0 | 2 | 3 => {
|
||||
quadruped_low_alpha(
|
||||
&mut next,
|
||||
s_a,
|
||||
stage_section,
|
||||
anim_time,
|
||||
global_time,
|
||||
timer,
|
||||
);
|
||||
},
|
||||
1 => {
|
||||
quadruped_low_beta(
|
||||
&mut next,
|
||||
s_a,
|
||||
stage_section,
|
||||
anim_time,
|
||||
global_time,
|
||||
timer,
|
||||
);
|
||||
},
|
||||
_ => {},
|
||||
},
|
||||
_ => {},
|
||||
}
|
||||
}
|
||||
|
@ -1,4 +1,3 @@
|
||||
pub mod alpha;
|
||||
pub mod beta;
|
||||
pub mod breathe;
|
||||
pub mod combomelee;
|
||||
@ -14,14 +13,17 @@ pub mod tailwhip;
|
||||
|
||||
// Reexports
|
||||
pub use self::{
|
||||
alpha::AlphaAnimation, beta::BetaAnimation, breathe::BreatheAnimation,
|
||||
combomelee::ComboAnimation, dash::DashAnimation, idle::IdleAnimation, jump::JumpAnimation,
|
||||
run::RunAnimation, shockwave::ShockwaveAnimation, shoot::ShootAnimation,
|
||||
spritesummon::SpriteSummonAnimation, stunned::StunnedAnimation, tailwhip::TailwhipAnimation,
|
||||
beta::BetaAnimation, breathe::BreatheAnimation, combomelee::ComboAnimation,
|
||||
dash::DashAnimation, idle::IdleAnimation, jump::JumpAnimation, run::RunAnimation,
|
||||
shockwave::ShockwaveAnimation, shoot::ShootAnimation, spritesummon::SpriteSummonAnimation,
|
||||
stunned::StunnedAnimation, tailwhip::TailwhipAnimation,
|
||||
};
|
||||
|
||||
use super::{make_bone, vek::*, FigureBoneData, Offsets, Skeleton};
|
||||
use common::comp::{self};
|
||||
use common::{
|
||||
comp::{self},
|
||||
states::utils::StageSection,
|
||||
};
|
||||
use core::convert::TryFrom;
|
||||
|
||||
pub type Body = comp::quadruped_low::Body;
|
||||
@ -435,3 +437,83 @@ fn mount_point(body: &Body) -> Vec3<f32> {
|
||||
}
|
||||
.into()
|
||||
}
|
||||
|
||||
pub fn quadruped_low_alpha(
|
||||
next: &mut QuadrupedLowSkeleton,
|
||||
_s_a: &SkeletonAttr,
|
||||
stage_section: StageSection,
|
||||
anim_time: f32,
|
||||
global_time: f32,
|
||||
timer: f32,
|
||||
) {
|
||||
let (movement1base, movement2base, movement3) = match stage_section {
|
||||
StageSection::Buildup => (anim_time.sqrt(), 0.0, 0.0),
|
||||
StageSection::Action => (1.0, anim_time.powi(4), 0.0),
|
||||
StageSection::Recover => (1.0, 1.0, anim_time),
|
||||
_ => (0.0, 0.0, 0.0),
|
||||
};
|
||||
let pullback = 1.0 - movement3;
|
||||
let subtract = global_time - timer;
|
||||
let check = subtract - subtract.trunc();
|
||||
let mirror = (check - 0.5).signum();
|
||||
let twitch3 = (mirror * movement3 * 9.0).sin();
|
||||
let movement1 = mirror * movement1base * pullback;
|
||||
let movement2 = mirror * movement2base * pullback;
|
||||
let movement1abs = movement1base * pullback;
|
||||
let movement2abs = movement2base * pullback;
|
||||
|
||||
next.head_upper.orientation = Quaternion::rotation_z(twitch3 * -0.7);
|
||||
|
||||
next.head_lower.orientation = Quaternion::rotation_x(movement1abs * 0.35 + movement2abs * -0.9)
|
||||
* Quaternion::rotation_y(movement1 * 0.7 + movement2 * -1.0);
|
||||
|
||||
next.jaw.orientation = Quaternion::rotation_x(movement1abs * -0.5 + movement2abs * 0.5);
|
||||
next.chest.orientation = Quaternion::rotation_y(movement1 * -0.08 + movement2 * 0.15)
|
||||
* Quaternion::rotation_z(movement1 * -0.2 + movement2 * 0.6);
|
||||
|
||||
next.tail_front.orientation =
|
||||
Quaternion::rotation_x(0.15) * Quaternion::rotation_z(movement1 * -0.4 + movement2 * -0.2);
|
||||
|
||||
next.tail_rear.orientation =
|
||||
Quaternion::rotation_x(-0.12) * Quaternion::rotation_z(movement1 * -0.4 + movement2 * -0.2);
|
||||
}
|
||||
|
||||
pub fn quadruped_low_beta(
|
||||
next: &mut QuadrupedLowSkeleton,
|
||||
_s_a: &SkeletonAttr,
|
||||
stage_section: StageSection,
|
||||
anim_time: f32,
|
||||
global_time: f32,
|
||||
timer: f32,
|
||||
) {
|
||||
let (movement1base, movement2base, movement3) = match stage_section {
|
||||
StageSection::Buildup => (anim_time.sqrt(), 0.0, 0.0),
|
||||
StageSection::Action => (1.0, anim_time.powi(4), 0.0),
|
||||
StageSection::Recover => (1.0, 1.0, anim_time),
|
||||
_ => (0.0, 0.0, 0.0),
|
||||
};
|
||||
let pullback = 1.0 - movement3;
|
||||
let subtract = global_time - timer;
|
||||
let check = subtract - subtract.trunc();
|
||||
let mirror = (check - 0.5).signum();
|
||||
let twitch3 = (mirror * movement3 * 9.0).sin();
|
||||
let movement1 = mirror * movement1base * pullback;
|
||||
let movement2 = mirror * movement2base * pullback;
|
||||
let movement1abs = movement1base * pullback;
|
||||
let movement2abs = movement2base * pullback;
|
||||
|
||||
next.head_upper.orientation = Quaternion::rotation_z(twitch3 * 0.2);
|
||||
|
||||
next.head_lower.orientation = Quaternion::rotation_x(movement1abs * 0.15 + movement2abs * -0.6)
|
||||
* Quaternion::rotation_y(movement1 * -0.1 + movement2 * 0.15);
|
||||
|
||||
next.jaw.orientation = Quaternion::rotation_x(movement1abs * -0.9 + movement2abs * 0.9);
|
||||
next.chest.orientation = Quaternion::rotation_y(movement1 * 0.08 + movement2 * -0.15)
|
||||
* Quaternion::rotation_z(movement1 * 0.2 + movement2 * -0.3);
|
||||
|
||||
next.tail_front.orientation =
|
||||
Quaternion::rotation_x(0.15) * Quaternion::rotation_z(movement1 * 0.4 + movement2 * 0.2);
|
||||
|
||||
next.tail_rear.orientation =
|
||||
Quaternion::rotation_x(-0.12) * Quaternion::rotation_z(movement1 * 0.4 + movement2 * 0.2);
|
||||
}
|
||||
|
@ -1,99 +0,0 @@
|
||||
use super::{
|
||||
super::{vek::*, Animation},
|
||||
QuadrupedMediumSkeleton, SkeletonAttr,
|
||||
};
|
||||
use common::states::utils::StageSection;
|
||||
|
||||
pub struct AlphaAnimation;
|
||||
|
||||
impl Animation for AlphaAnimation {
|
||||
type Dependency<'a> = (f32, f32, Option<StageSection>, f32);
|
||||
type Skeleton = QuadrupedMediumSkeleton;
|
||||
|
||||
#[cfg(feature = "use-dyn-lib")]
|
||||
const UPDATE_FN: &'static [u8] = b"quadruped_medium_alpha\0";
|
||||
|
||||
#[cfg_attr(feature = "be-dyn-lib", export_name = "quadruped_medium_alpha")]
|
||||
fn update_skeleton_inner(
|
||||
skeleton: &Self::Skeleton,
|
||||
(velocity, global_time, stage_section, timer): Self::Dependency<'_>,
|
||||
anim_time: f32,
|
||||
_rate: &mut f32,
|
||||
s_a: &SkeletonAttr,
|
||||
) -> Self::Skeleton {
|
||||
let mut next = (*skeleton).clone();
|
||||
let speed = (Vec2::<f32>::from(velocity).magnitude()).min(24.0);
|
||||
|
||||
let (movement1base, movement2base, movement3) = match stage_section {
|
||||
Some(StageSection::Buildup) => (anim_time.powf(0.25), 0.0, 0.0),
|
||||
Some(StageSection::Action) => (1.0, anim_time.powf(0.25), 0.0),
|
||||
Some(StageSection::Recover) => (1.0, 1.0, anim_time.powi(4)),
|
||||
_ => (0.0, 0.0, 0.0),
|
||||
};
|
||||
let pullback = 1.0 - movement3;
|
||||
let subtract = global_time - timer;
|
||||
let check = subtract - subtract.trunc();
|
||||
let mirror = (check - 0.5).signum();
|
||||
let movement1 = movement1base * mirror * pullback;
|
||||
let movement1abs = movement1base * pullback;
|
||||
let movement2 = movement2base * mirror * pullback;
|
||||
let movement2abs = movement2base * pullback;
|
||||
let twitch1 = (movement1 * 10.0).sin() * pullback;
|
||||
let twitch2 = (movement3 * 5.0).sin() * pullback;
|
||||
let twitchmovement = twitch1 + twitch2;
|
||||
|
||||
next.head.orientation = Quaternion::rotation_x(movement1abs * -0.3 + movement2abs * 0.6)
|
||||
* Quaternion::rotation_y(movement1 * 0.35 + movement2 * -0.15)
|
||||
* Quaternion::rotation_z(movement1 * 0.15 + movement2 * -0.5);
|
||||
|
||||
next.neck.orientation = Quaternion::rotation_x(movement1abs * 0.2 + movement2abs * -0.2)
|
||||
* Quaternion::rotation_y(movement1 * 0.0)
|
||||
* Quaternion::rotation_z(movement1 * 0.10 + movement1 * -0.15);
|
||||
|
||||
next.jaw.orientation = Quaternion::rotation_x(movement1abs * -0.4 + movement2abs * 0.4);
|
||||
|
||||
next.tail.orientation = Quaternion::rotation_z(
|
||||
movement1 * 0.5 + movement2 * -0.8 + twitchmovement * 0.2 * mirror,
|
||||
);
|
||||
next.torso_front.position = Vec3::new(
|
||||
0.0,
|
||||
s_a.torso_front.0 + movement1abs * -4.0,
|
||||
s_a.torso_front.1,
|
||||
);
|
||||
next.torso_front.orientation = Quaternion::rotation_y(movement1 * -0.25 * movement2 * 0.25)
|
||||
* Quaternion::rotation_z(movement1 * 0.35 + movement2 * -0.45);
|
||||
|
||||
next.torso_back.orientation = Quaternion::rotation_y(movement1 * 0.25 + movement1 * -0.25)
|
||||
* Quaternion::rotation_z(movement1 * -0.4 + movement2 * 0.65);
|
||||
|
||||
next.ears.orientation = Quaternion::rotation_x(twitchmovement * 0.2);
|
||||
if speed < 0.5 {
|
||||
next.leg_fl.orientation =
|
||||
Quaternion::rotation_x(movement1abs * 0.8 + movement2abs * -0.6)
|
||||
* Quaternion::rotation_y(movement1 * -0.3 + movement2 * 0.3)
|
||||
* Quaternion::rotation_z(movement1 * -0.35 + movement2 * 0.45);
|
||||
|
||||
next.leg_fr.orientation =
|
||||
Quaternion::rotation_x(movement1abs * 0.8 + movement2abs * -0.6)
|
||||
* Quaternion::rotation_y(movement1 * -0.3 + movement2 * 0.3)
|
||||
* Quaternion::rotation_z(movement1 * -0.35 + movement2 * 0.45);
|
||||
|
||||
next.leg_bl.orientation = Quaternion::rotation_x(movement1 * 0.1 + movement2 * -0.3);
|
||||
|
||||
next.leg_br.orientation = Quaternion::rotation_x(movement1 * -0.1 + movement2 * 0.3);
|
||||
|
||||
next.foot_fl.orientation =
|
||||
Quaternion::rotation_x(movement1abs * -0.9 + movement2abs * 0.6);
|
||||
|
||||
next.foot_fr.orientation =
|
||||
Quaternion::rotation_x(movement1abs * -0.9 + movement2abs * 0.6);
|
||||
|
||||
next.foot_bl.orientation =
|
||||
Quaternion::rotation_x(movement1abs * -0.5 + movement2abs * -0.3);
|
||||
|
||||
next.foot_br.orientation =
|
||||
Quaternion::rotation_x(movement1abs * -0.5 + movement2abs * -0.3);
|
||||
};
|
||||
next
|
||||
}
|
||||
}
|
@ -1,99 +0,0 @@
|
||||
use super::{
|
||||
super::{vek::*, Animation},
|
||||
QuadrupedMediumSkeleton, SkeletonAttr,
|
||||
};
|
||||
use common::states::utils::StageSection;
|
||||
|
||||
pub struct BetaAnimation;
|
||||
|
||||
impl Animation for BetaAnimation {
|
||||
type Dependency<'a> = (f32, f32, Option<StageSection>, f32);
|
||||
type Skeleton = QuadrupedMediumSkeleton;
|
||||
|
||||
#[cfg(feature = "use-dyn-lib")]
|
||||
const UPDATE_FN: &'static [u8] = b"quadruped_medium_beta\0";
|
||||
|
||||
#[cfg_attr(feature = "be-dyn-lib", export_name = "quadruped_medium_beta")]
|
||||
fn update_skeleton_inner(
|
||||
skeleton: &Self::Skeleton,
|
||||
(velocity, global_time, stage_section, timer): Self::Dependency<'_>,
|
||||
anim_time: f32,
|
||||
_rate: &mut f32,
|
||||
s_a: &SkeletonAttr,
|
||||
) -> Self::Skeleton {
|
||||
let mut next = (*skeleton).clone();
|
||||
let speed = (Vec2::<f32>::from(velocity).magnitude()).min(24.0);
|
||||
|
||||
let (movement1base, movement2base, movement3) = match stage_section {
|
||||
Some(StageSection::Buildup) => (anim_time.powf(0.25), 0.0, 0.0),
|
||||
Some(StageSection::Action) => (1.0, anim_time.sqrt(), 0.0),
|
||||
Some(StageSection::Recover) => (1.0, 1.0, anim_time.powi(4)),
|
||||
_ => (0.0, 0.0, 0.0),
|
||||
};
|
||||
let pullback = 1.0 - movement3;
|
||||
let subtract = global_time - timer;
|
||||
let check = subtract - subtract.trunc();
|
||||
let mirror = (check - 0.5).signum();
|
||||
let movement1 = movement1base * mirror * pullback;
|
||||
let movement1abs = movement1base * pullback;
|
||||
let movement2 = movement2base * mirror * pullback;
|
||||
let movement2abs = movement2base * pullback;
|
||||
let twitch1 = (movement1 * 10.0).sin() * pullback;
|
||||
let twitch2 = (movement2abs * -8.0).sin();
|
||||
let twitchmovement = twitch1 + twitch2;
|
||||
|
||||
next.head.orientation = Quaternion::rotation_x(movement1abs * -0.4 + movement2abs * 1.1)
|
||||
* Quaternion::rotation_y(movement1 * -0.35 + movement2 * 0.25)
|
||||
* Quaternion::rotation_z(movement1 * -0.25 + movement2 * 0.5);
|
||||
|
||||
next.neck.orientation = Quaternion::rotation_x(movement1abs * 0.0 + movement2abs * -0.2)
|
||||
* Quaternion::rotation_y(movement1 * 0.0)
|
||||
* Quaternion::rotation_z(movement1 * -0.10 + movement1 * 0.15);
|
||||
|
||||
next.jaw.orientation = Quaternion::rotation_x(movement1abs * -0.5 + twitch2 * -0.4);
|
||||
|
||||
next.tail.orientation = Quaternion::rotation_z(
|
||||
movement1 * 0.5 + movement2 * -0.8 + twitchmovement * 0.2 * mirror,
|
||||
);
|
||||
next.torso_front.position = Vec3::new(
|
||||
0.0,
|
||||
s_a.torso_front.0 + movement1abs * -4.0,
|
||||
s_a.torso_front.1,
|
||||
);
|
||||
next.torso_front.orientation = Quaternion::rotation_y(movement1 * -0.25 * movement2 * 0.25)
|
||||
* Quaternion::rotation_z(movement1 * 0.35 + movement2 * -0.45);
|
||||
|
||||
next.torso_back.orientation = Quaternion::rotation_y(movement1 * 0.25 + movement1 * -0.25)
|
||||
* Quaternion::rotation_z(movement1 * -0.4 + movement2 * 0.65);
|
||||
|
||||
next.ears.orientation = Quaternion::rotation_x(twitchmovement * 0.2);
|
||||
if speed < 0.5 {
|
||||
next.leg_fl.orientation =
|
||||
Quaternion::rotation_x(movement1abs * 0.8 + movement2abs * -0.6)
|
||||
* Quaternion::rotation_y(movement1 * -0.3 + movement2 * 0.3)
|
||||
* Quaternion::rotation_z(movement1 * -0.35 + movement2 * 0.45);
|
||||
|
||||
next.leg_fr.orientation =
|
||||
Quaternion::rotation_x(movement1abs * 0.8 + movement2abs * -0.6)
|
||||
* Quaternion::rotation_y(movement1 * -0.3 + movement2 * 0.3)
|
||||
* Quaternion::rotation_z(movement1 * -0.35 + movement2 * 0.45);
|
||||
|
||||
next.leg_bl.orientation = Quaternion::rotation_x(movement1 * 0.1 + movement2 * -0.3);
|
||||
|
||||
next.leg_br.orientation = Quaternion::rotation_x(movement1 * -0.1 + movement2 * 0.3);
|
||||
|
||||
next.foot_fl.orientation =
|
||||
Quaternion::rotation_x(movement1abs * -0.9 + movement2abs * 0.6);
|
||||
|
||||
next.foot_fr.orientation =
|
||||
Quaternion::rotation_x(movement1abs * -0.9 + movement2abs * 0.6);
|
||||
|
||||
next.foot_bl.orientation =
|
||||
Quaternion::rotation_x(movement1abs * -0.5 + movement2abs * -0.3);
|
||||
|
||||
next.foot_br.orientation =
|
||||
Quaternion::rotation_x(movement1abs * -0.5 + movement2abs * -0.3);
|
||||
};
|
||||
next
|
||||
}
|
||||
}
|
@ -1,19 +1,12 @@
|
||||
use super::{
|
||||
super::{vek::*, Animation},
|
||||
QuadrupedMediumSkeleton, SkeletonAttr,
|
||||
quadruped_medium_alpha, quadruped_medium_beta, QuadrupedMediumSkeleton, SkeletonAttr,
|
||||
};
|
||||
use common::states::utils::{AbilityInfo, StageSection};
|
||||
use common::states::utils::StageSection;
|
||||
|
||||
pub struct ComboAnimation;
|
||||
impl Animation for ComboAnimation {
|
||||
type Dependency<'a> = (
|
||||
Option<&'a str>,
|
||||
Option<StageSection>,
|
||||
Option<AbilityInfo>,
|
||||
usize,
|
||||
f32,
|
||||
f32,
|
||||
);
|
||||
type Dependency<'a> = (Option<&'a str>, StageSection, usize, f32, f32, f32);
|
||||
type Skeleton = QuadrupedMediumSkeleton;
|
||||
|
||||
#[cfg(feature = "use-dyn-lib")]
|
||||
@ -22,16 +15,18 @@ impl Animation for ComboAnimation {
|
||||
#[cfg_attr(feature = "be-dyn-lib", export_name = "quadruped_medium_combo")]
|
||||
fn update_skeleton_inner(
|
||||
skeleton: &Self::Skeleton,
|
||||
(ability_id, stage_section, _ability_info, current_strike, global_time, timer): Self::Dependency<'_>,
|
||||
(ability_id, stage_section, current_strike, speed, global_time, timer): Self::Dependency<
|
||||
'_,
|
||||
>,
|
||||
anim_time: f32,
|
||||
rate: &mut f32,
|
||||
_s_a: &SkeletonAttr,
|
||||
s_a: &SkeletonAttr,
|
||||
) -> Self::Skeleton {
|
||||
*rate = 1.0;
|
||||
let mut next = (*skeleton).clone();
|
||||
|
||||
let _multi_strike_pullback = 1.0
|
||||
- if matches!(stage_section, Some(StageSection::Recover)) {
|
||||
- if matches!(stage_section, StageSection::Recover) {
|
||||
anim_time.powi(4)
|
||||
} else {
|
||||
0.0
|
||||
@ -44,9 +39,9 @@ impl Animation for ComboAnimation {
|
||||
| "common.abilities.custom.frostfang.triplestrike",
|
||||
) => {
|
||||
let (movement1base, movement2base, movement3) = match stage_section {
|
||||
Some(StageSection::Buildup) => (anim_time.sqrt(), 0.0, 0.0),
|
||||
Some(StageSection::Action) => (1.0, anim_time.powi(4), 0.0),
|
||||
Some(StageSection::Recover) => (1.0, 1.0, anim_time),
|
||||
StageSection::Buildup => (anim_time.sqrt(), 0.0, 0.0),
|
||||
StageSection::Action => (1.0, anim_time.powi(4), 0.0),
|
||||
StageSection::Recover => (1.0, 1.0, anim_time),
|
||||
_ => (0.0, 0.0, 0.0),
|
||||
};
|
||||
let pullback = 1.0 - movement3;
|
||||
@ -101,6 +96,77 @@ impl Animation for ComboAnimation {
|
||||
_ => {},
|
||||
}
|
||||
},
|
||||
Some("common.abilities.custom.quadmedbasic.singlestrike") => match strike {
|
||||
0 => {
|
||||
quadruped_medium_alpha(
|
||||
&mut next,
|
||||
s_a,
|
||||
speed,
|
||||
stage_section,
|
||||
anim_time,
|
||||
global_time,
|
||||
timer,
|
||||
);
|
||||
},
|
||||
_ => {},
|
||||
},
|
||||
Some(
|
||||
"common.abilities.custom.quadmedbasic.triplestrike"
|
||||
| "common.abilities.custom.quadmedquick.triplestrike",
|
||||
) => match strike {
|
||||
0 | 2 => {
|
||||
quadruped_medium_alpha(
|
||||
&mut next,
|
||||
s_a,
|
||||
speed,
|
||||
stage_section,
|
||||
anim_time,
|
||||
global_time,
|
||||
timer,
|
||||
);
|
||||
},
|
||||
1 => {
|
||||
quadruped_medium_beta(
|
||||
&mut next,
|
||||
s_a,
|
||||
speed,
|
||||
stage_section,
|
||||
anim_time,
|
||||
global_time,
|
||||
timer,
|
||||
);
|
||||
},
|
||||
_ => {},
|
||||
},
|
||||
Some(
|
||||
"common.abilities.custom.quadmedcharge.doublestrike"
|
||||
| "common.abilities.custom.quadmedjump.doublestrike"
|
||||
| "common.abilities.custom.roshwalr.doublehusk",
|
||||
) => match strike {
|
||||
0 => {
|
||||
quadruped_medium_alpha(
|
||||
&mut next,
|
||||
s_a,
|
||||
speed,
|
||||
stage_section,
|
||||
anim_time,
|
||||
global_time,
|
||||
timer,
|
||||
);
|
||||
},
|
||||
1 => {
|
||||
quadruped_medium_beta(
|
||||
&mut next,
|
||||
s_a,
|
||||
speed,
|
||||
stage_section,
|
||||
anim_time,
|
||||
global_time,
|
||||
timer,
|
||||
);
|
||||
},
|
||||
_ => {},
|
||||
},
|
||||
_ => {},
|
||||
}
|
||||
}
|
||||
|
@ -1,5 +1,3 @@
|
||||
pub mod alpha;
|
||||
pub mod beta;
|
||||
pub mod combomelee;
|
||||
pub mod dash;
|
||||
pub mod feed;
|
||||
@ -13,14 +11,16 @@ pub mod stunned;
|
||||
|
||||
// Reexports
|
||||
pub use self::{
|
||||
alpha::AlphaAnimation, beta::BetaAnimation, combomelee::ComboAnimation, dash::DashAnimation,
|
||||
feed::FeedAnimation, hoof::HoofAnimation, idle::IdleAnimation, jump::JumpAnimation,
|
||||
leapmelee::LeapMeleeAnimation, run::RunAnimation, shockwave::ShockwaveAnimation,
|
||||
stunned::StunnedAnimation,
|
||||
combomelee::ComboAnimation, dash::DashAnimation, feed::FeedAnimation, hoof::HoofAnimation,
|
||||
idle::IdleAnimation, jump::JumpAnimation, leapmelee::LeapMeleeAnimation, run::RunAnimation,
|
||||
shockwave::ShockwaveAnimation, stunned::StunnedAnimation,
|
||||
};
|
||||
|
||||
use super::{make_bone, vek::*, FigureBoneData, Offsets, Skeleton};
|
||||
use common::comp::{self};
|
||||
use common::{
|
||||
comp::{self},
|
||||
states::utils::StageSection,
|
||||
};
|
||||
use core::convert::TryFrom;
|
||||
|
||||
pub type Body = comp::quadruped_medium::Body;
|
||||
@ -797,3 +797,159 @@ fn mount_point(body: &Body) -> Vec3<f32> {
|
||||
}
|
||||
.into()
|
||||
}
|
||||
|
||||
pub fn quadruped_medium_alpha(
|
||||
next: &mut QuadrupedMediumSkeleton,
|
||||
s_a: &SkeletonAttr,
|
||||
speed: f32,
|
||||
stage_section: StageSection,
|
||||
anim_time: f32,
|
||||
global_time: f32,
|
||||
timer: f32,
|
||||
) {
|
||||
let speed = (Vec2::<f32>::from(speed).magnitude()).min(24.0);
|
||||
|
||||
let (movement1base, movement2base, movement3) = match stage_section {
|
||||
StageSection::Buildup => (anim_time.powf(0.25), 0.0, 0.0),
|
||||
StageSection::Action => (1.0, anim_time.powf(0.25), 0.0),
|
||||
StageSection::Recover => (1.0, 1.0, anim_time.powi(4)),
|
||||
_ => (0.0, 0.0, 0.0),
|
||||
};
|
||||
let pullback = 1.0 - movement3;
|
||||
let subtract = global_time - timer;
|
||||
let check = subtract - subtract.trunc();
|
||||
let mirror = (check - 0.5).signum();
|
||||
let movement1 = movement1base * mirror * pullback;
|
||||
let movement1abs = movement1base * pullback;
|
||||
let movement2 = movement2base * mirror * pullback;
|
||||
let movement2abs = movement2base * pullback;
|
||||
let twitch1 = (movement1 * 10.0).sin() * pullback;
|
||||
let twitch2 = (movement3 * 5.0).sin() * pullback;
|
||||
let twitchmovement = twitch1 + twitch2;
|
||||
|
||||
next.head.orientation = Quaternion::rotation_x(movement1abs * -0.3 + movement2abs * 0.6)
|
||||
* Quaternion::rotation_y(movement1 * 0.35 + movement2 * -0.15)
|
||||
* Quaternion::rotation_z(movement1 * 0.15 + movement2 * -0.5);
|
||||
|
||||
next.neck.orientation = Quaternion::rotation_x(movement1abs * 0.2 + movement2abs * -0.2)
|
||||
* Quaternion::rotation_y(movement1 * 0.0)
|
||||
* Quaternion::rotation_z(movement1 * 0.10 + movement1 * -0.15);
|
||||
|
||||
next.jaw.orientation = Quaternion::rotation_x(movement1abs * -0.4 + movement2abs * 0.4);
|
||||
|
||||
next.tail.orientation =
|
||||
Quaternion::rotation_z(movement1 * 0.5 + movement2 * -0.8 + twitchmovement * 0.2 * mirror);
|
||||
next.torso_front.position = Vec3::new(
|
||||
0.0,
|
||||
s_a.torso_front.0 + movement1abs * -4.0,
|
||||
s_a.torso_front.1,
|
||||
);
|
||||
next.torso_front.orientation = Quaternion::rotation_y(movement1 * -0.25 * movement2 * 0.25)
|
||||
* Quaternion::rotation_z(movement1 * 0.35 + movement2 * -0.45);
|
||||
|
||||
next.torso_back.orientation = Quaternion::rotation_y(movement1 * 0.25 + movement1 * -0.25)
|
||||
* Quaternion::rotation_z(movement1 * -0.4 + movement2 * 0.65);
|
||||
|
||||
next.ears.orientation = Quaternion::rotation_x(twitchmovement * 0.2);
|
||||
if speed < 0.5 {
|
||||
next.leg_fl.orientation = Quaternion::rotation_x(movement1abs * 0.8 + movement2abs * -0.6)
|
||||
* Quaternion::rotation_y(movement1 * -0.3 + movement2 * 0.3)
|
||||
* Quaternion::rotation_z(movement1 * -0.35 + movement2 * 0.45);
|
||||
|
||||
next.leg_fr.orientation = Quaternion::rotation_x(movement1abs * 0.8 + movement2abs * -0.6)
|
||||
* Quaternion::rotation_y(movement1 * -0.3 + movement2 * 0.3)
|
||||
* Quaternion::rotation_z(movement1 * -0.35 + movement2 * 0.45);
|
||||
|
||||
next.leg_bl.orientation = Quaternion::rotation_x(movement1 * 0.1 + movement2 * -0.3);
|
||||
|
||||
next.leg_br.orientation = Quaternion::rotation_x(movement1 * -0.1 + movement2 * 0.3);
|
||||
|
||||
next.foot_fl.orientation = Quaternion::rotation_x(movement1abs * -0.9 + movement2abs * 0.6);
|
||||
|
||||
next.foot_fr.orientation = Quaternion::rotation_x(movement1abs * -0.9 + movement2abs * 0.6);
|
||||
|
||||
next.foot_bl.orientation =
|
||||
Quaternion::rotation_x(movement1abs * -0.5 + movement2abs * -0.3);
|
||||
|
||||
next.foot_br.orientation =
|
||||
Quaternion::rotation_x(movement1abs * -0.5 + movement2abs * -0.3);
|
||||
};
|
||||
}
|
||||
|
||||
pub fn quadruped_medium_beta(
|
||||
next: &mut QuadrupedMediumSkeleton,
|
||||
s_a: &SkeletonAttr,
|
||||
speed: f32,
|
||||
stage_section: StageSection,
|
||||
anim_time: f32,
|
||||
global_time: f32,
|
||||
timer: f32,
|
||||
) {
|
||||
let speed = (Vec2::<f32>::from(speed).magnitude()).min(24.0);
|
||||
|
||||
let (movement1base, movement2base, movement3) = match stage_section {
|
||||
StageSection::Buildup => (anim_time.powf(0.25), 0.0, 0.0),
|
||||
StageSection::Action => (1.0, anim_time.sqrt(), 0.0),
|
||||
StageSection::Recover => (1.0, 1.0, anim_time.powi(4)),
|
||||
_ => (0.0, 0.0, 0.0),
|
||||
};
|
||||
let pullback = 1.0 - movement3;
|
||||
let subtract = global_time - timer;
|
||||
let check = subtract - subtract.trunc();
|
||||
let mirror = (check - 0.5).signum();
|
||||
let movement1 = movement1base * mirror * pullback;
|
||||
let movement1abs = movement1base * pullback;
|
||||
let movement2 = movement2base * mirror * pullback;
|
||||
let movement2abs = movement2base * pullback;
|
||||
let twitch1 = (movement1 * 10.0).sin() * pullback;
|
||||
let twitch2 = (movement2abs * -8.0).sin();
|
||||
let twitchmovement = twitch1 + twitch2;
|
||||
|
||||
next.head.orientation = Quaternion::rotation_x(movement1abs * -0.4 + movement2abs * 1.1)
|
||||
* Quaternion::rotation_y(movement1 * -0.35 + movement2 * 0.25)
|
||||
* Quaternion::rotation_z(movement1 * -0.25 + movement2 * 0.5);
|
||||
|
||||
next.neck.orientation = Quaternion::rotation_x(movement1abs * 0.0 + movement2abs * -0.2)
|
||||
* Quaternion::rotation_y(movement1 * 0.0)
|
||||
* Quaternion::rotation_z(movement1 * -0.10 + movement1 * 0.15);
|
||||
|
||||
next.jaw.orientation = Quaternion::rotation_x(movement1abs * -0.5 + twitch2 * -0.4);
|
||||
|
||||
next.tail.orientation =
|
||||
Quaternion::rotation_z(movement1 * 0.5 + movement2 * -0.8 + twitchmovement * 0.2 * mirror);
|
||||
next.torso_front.position = Vec3::new(
|
||||
0.0,
|
||||
s_a.torso_front.0 + movement1abs * -4.0,
|
||||
s_a.torso_front.1,
|
||||
);
|
||||
next.torso_front.orientation = Quaternion::rotation_y(movement1 * -0.25 * movement2 * 0.25)
|
||||
* Quaternion::rotation_z(movement1 * 0.35 + movement2 * -0.45);
|
||||
|
||||
next.torso_back.orientation = Quaternion::rotation_y(movement1 * 0.25 + movement1 * -0.25)
|
||||
* Quaternion::rotation_z(movement1 * -0.4 + movement2 * 0.65);
|
||||
|
||||
next.ears.orientation = Quaternion::rotation_x(twitchmovement * 0.2);
|
||||
if speed < 0.5 {
|
||||
next.leg_fl.orientation = Quaternion::rotation_x(movement1abs * 0.8 + movement2abs * -0.6)
|
||||
* Quaternion::rotation_y(movement1 * -0.3 + movement2 * 0.3)
|
||||
* Quaternion::rotation_z(movement1 * -0.35 + movement2 * 0.45);
|
||||
|
||||
next.leg_fr.orientation = Quaternion::rotation_x(movement1abs * 0.8 + movement2abs * -0.6)
|
||||
* Quaternion::rotation_y(movement1 * -0.3 + movement2 * 0.3)
|
||||
* Quaternion::rotation_z(movement1 * -0.35 + movement2 * 0.45);
|
||||
|
||||
next.leg_bl.orientation = Quaternion::rotation_x(movement1 * 0.1 + movement2 * -0.3);
|
||||
|
||||
next.leg_br.orientation = Quaternion::rotation_x(movement1 * -0.1 + movement2 * 0.3);
|
||||
|
||||
next.foot_fl.orientation = Quaternion::rotation_x(movement1abs * -0.9 + movement2abs * 0.6);
|
||||
|
||||
next.foot_fr.orientation = Quaternion::rotation_x(movement1abs * -0.9 + movement2abs * 0.6);
|
||||
|
||||
next.foot_bl.orientation =
|
||||
Quaternion::rotation_x(movement1abs * -0.5 + movement2abs * -0.3);
|
||||
|
||||
next.foot_br.orientation =
|
||||
Quaternion::rotation_x(movement1abs * -0.5 + movement2abs * -0.3);
|
||||
};
|
||||
}
|
||||
|
@ -8,7 +8,7 @@ use common::states::utils::StageSection;
|
||||
pub struct AlphaAnimation;
|
||||
|
||||
impl Animation for AlphaAnimation {
|
||||
type Dependency<'a> = (f32, f32, Option<StageSection>, f32);
|
||||
type Dependency<'a> = (f32, StageSection, f32);
|
||||
type Skeleton = QuadrupedSmallSkeleton;
|
||||
|
||||
#[cfg(feature = "use-dyn-lib")]
|
||||
@ -17,7 +17,7 @@ impl Animation for AlphaAnimation {
|
||||
#[cfg_attr(feature = "be-dyn-lib", export_name = "quadruped_small_alpha")]
|
||||
fn update_skeleton_inner(
|
||||
skeleton: &Self::Skeleton,
|
||||
(_velocity, global_time, stage_section, timer): Self::Dependency<'_>,
|
||||
(global_time, stage_section, timer): Self::Dependency<'_>,
|
||||
anim_time: f32,
|
||||
_rate: &mut f32,
|
||||
_s_a: &SkeletonAttr,
|
||||
@ -25,9 +25,9 @@ impl Animation for AlphaAnimation {
|
||||
let mut next = (*skeleton).clone();
|
||||
|
||||
let (movement1base, movement2base, movement3) = match stage_section {
|
||||
Some(StageSection::Buildup) => (anim_time.sqrt(), 0.0, 0.0),
|
||||
Some(StageSection::Action) => (1.0, anim_time.powi(4), 0.0),
|
||||
Some(StageSection::Recover) => (1.0, 1.0, anim_time),
|
||||
StageSection::Buildup => (anim_time.sqrt(), 0.0, 0.0),
|
||||
StageSection::Action => (1.0, anim_time.powi(4), 0.0),
|
||||
StageSection::Recover => (1.0, 1.0, anim_time),
|
||||
_ => (0.0, 0.0, 0.0),
|
||||
};
|
||||
let pullback = 1.0 - movement3;
|
||||
|
@ -1,66 +0,0 @@
|
||||
use super::{
|
||||
super::{vek::*, Animation},
|
||||
SkeletonAttr, TheropodSkeleton,
|
||||
};
|
||||
use common::states::utils::StageSection;
|
||||
|
||||
pub struct AlphaAnimation;
|
||||
|
||||
impl Animation for AlphaAnimation {
|
||||
type Dependency<'a> = (f32, f32, Option<StageSection>, f32);
|
||||
type Skeleton = TheropodSkeleton;
|
||||
|
||||
#[cfg(feature = "use-dyn-lib")]
|
||||
const UPDATE_FN: &'static [u8] = b"theropod_alpha\0";
|
||||
|
||||
#[cfg_attr(feature = "be-dyn-lib", export_name = "theropod_alpha")]
|
||||
fn update_skeleton_inner(
|
||||
skeleton: &Self::Skeleton,
|
||||
(_velocity, global_time, stage_section, timer): Self::Dependency<'_>,
|
||||
anim_time: f32,
|
||||
_rate: &mut f32,
|
||||
_s_a: &SkeletonAttr,
|
||||
) -> Self::Skeleton {
|
||||
let mut next = (*skeleton).clone();
|
||||
|
||||
let (movement1base, movement2base, movement3) = match stage_section {
|
||||
Some(StageSection::Buildup) => (anim_time.powi(2), 0.0, 0.0),
|
||||
Some(StageSection::Action) => (1.0, anim_time.powi(4), 0.0),
|
||||
Some(StageSection::Recover) => (1.0, 1.0, anim_time),
|
||||
_ => (0.0, 0.0, 0.0),
|
||||
};
|
||||
let pullback = 1.0 - movement3;
|
||||
let subtract = global_time - timer;
|
||||
let check = subtract - subtract.trunc();
|
||||
let mirror = (check - 0.5).signum();
|
||||
let movement1 = mirror * movement1base * pullback;
|
||||
let movement2 = mirror * movement2base * pullback;
|
||||
let movement1abs = movement1base * pullback;
|
||||
let movement2abs = movement2base * pullback;
|
||||
|
||||
next.head.orientation = Quaternion::rotation_x(movement1abs * 0.2)
|
||||
* Quaternion::rotation_y(movement1 * 0.1 + movement2 * 0.2);
|
||||
next.neck.orientation = Quaternion::rotation_x(movement1abs * -0.3)
|
||||
* Quaternion::rotation_y(movement1 * 0.1 + movement2 * 0.1);
|
||||
|
||||
next.jaw.orientation = Quaternion::rotation_x(movement1abs * -0.5 + movement2abs * 0.5);
|
||||
|
||||
next.chest_front.orientation = Quaternion::rotation_x(movement1abs * -0.2);
|
||||
next.chest_back.orientation = Quaternion::rotation_x(movement1abs * 0.2);
|
||||
|
||||
next.leg_l.orientation = Quaternion::rotation_x(movement1abs * -0.1);
|
||||
|
||||
next.leg_r.orientation = Quaternion::rotation_x(movement1abs * -0.1);
|
||||
next.foot_l.orientation = Quaternion::rotation_x(movement1abs * -0.3);
|
||||
next.foot_r.orientation = Quaternion::rotation_x(movement1abs * -0.3);
|
||||
|
||||
next.tail_front.orientation =
|
||||
Quaternion::rotation_x(0.1 + movement1abs * -0.1 + movement2abs * -0.3)
|
||||
* Quaternion::rotation_z(movement1 * -0.1 + movement2 * -0.2);
|
||||
|
||||
next.tail_back.orientation =
|
||||
Quaternion::rotation_x(0.1 + movement1abs * -0.1 + movement2abs * -0.3)
|
||||
* Quaternion::rotation_z(movement1 * -0.1 + movement2 * -0.2);
|
||||
next
|
||||
}
|
||||
}
|
@ -1,65 +0,0 @@
|
||||
use super::{
|
||||
super::{vek::*, Animation},
|
||||
SkeletonAttr, TheropodSkeleton,
|
||||
};
|
||||
use common::states::utils::StageSection;
|
||||
//use std::ops::Rem;
|
||||
|
||||
pub struct BetaAnimation;
|
||||
|
||||
impl Animation for BetaAnimation {
|
||||
type Dependency<'a> = (f32, f32, Option<StageSection>, f32);
|
||||
type Skeleton = TheropodSkeleton;
|
||||
|
||||
#[cfg(feature = "use-dyn-lib")]
|
||||
const UPDATE_FN: &'static [u8] = b"theropod_beta\0";
|
||||
|
||||
#[cfg_attr(feature = "be-dyn-lib", export_name = "theropod_beta")]
|
||||
fn update_skeleton_inner(
|
||||
skeleton: &Self::Skeleton,
|
||||
(_velocity, global_time, stage_section, timer): Self::Dependency<'_>,
|
||||
anim_time: f32,
|
||||
_rate: &mut f32,
|
||||
_s_a: &SkeletonAttr,
|
||||
) -> Self::Skeleton {
|
||||
let mut next = (*skeleton).clone();
|
||||
|
||||
let (movement1base, movement2base, movement3) = match stage_section {
|
||||
Some(StageSection::Buildup) => (anim_time.powi(2), 0.0, 0.0),
|
||||
Some(StageSection::Action) => (1.0, anim_time.powi(4), 0.0),
|
||||
Some(StageSection::Recover) => (1.0, 1.0, anim_time),
|
||||
_ => (0.0, 0.0, 0.0),
|
||||
};
|
||||
let pullback = 1.0 - movement3;
|
||||
let subtract = global_time - timer;
|
||||
let check = subtract - subtract.trunc();
|
||||
let mirror = (check - 0.5).signum();
|
||||
let movement1 = mirror * movement1base * pullback;
|
||||
let movement2 = mirror * movement2base * pullback;
|
||||
let movement1abs = movement1base * pullback;
|
||||
let movement2abs = movement2base * pullback;
|
||||
|
||||
next.head.orientation = Quaternion::rotation_x(movement1abs * -0.4 + movement2abs * 1.2)
|
||||
* Quaternion::rotation_y(movement1 * 0.1 + movement2 * -0.1);
|
||||
next.neck.orientation = Quaternion::rotation_x(movement1abs * 0.4 + movement2abs * -1.2)
|
||||
* Quaternion::rotation_y(movement1 * 0.1 + movement2 * -0.1);
|
||||
|
||||
next.chest_front.orientation =
|
||||
Quaternion::rotation_x(movement1abs * 0.6 + movement2abs * -1.5);
|
||||
next.chest_back.orientation =
|
||||
Quaternion::rotation_x(movement1abs * -0.6 + movement2abs * 1.5);
|
||||
|
||||
next.leg_l.orientation = Quaternion::rotation_x(movement1abs * -0.5);
|
||||
|
||||
next.leg_r.orientation = Quaternion::rotation_x(movement1abs * -0.5);
|
||||
next.foot_l.orientation = Quaternion::rotation_x(movement1abs * 0.4);
|
||||
next.foot_r.orientation = Quaternion::rotation_x(movement1abs * 0.4);
|
||||
|
||||
next.tail_front.orientation =
|
||||
Quaternion::rotation_x(0.1 + movement1abs * -0.1 + movement2abs * -0.3);
|
||||
|
||||
next.tail_back.orientation =
|
||||
Quaternion::rotation_x(0.1 + movement1abs * -0.1 + movement2abs * -0.3);
|
||||
next
|
||||
}
|
||||
}
|
118
voxygen/anim/src/theropod/combomelee.rs
Normal file
118
voxygen/anim/src/theropod/combomelee.rs
Normal file
@ -0,0 +1,118 @@
|
||||
use super::{
|
||||
super::{vek::*, Animation},
|
||||
SkeletonAttr, TheropodSkeleton,
|
||||
};
|
||||
use common::states::utils::StageSection;
|
||||
|
||||
pub struct ComboAnimation;
|
||||
|
||||
impl Animation for ComboAnimation {
|
||||
type Dependency<'a> = (Option<&'a str>, StageSection, usize, f32, f32);
|
||||
type Skeleton = TheropodSkeleton;
|
||||
|
||||
#[cfg(feature = "use-dyn-lib")]
|
||||
const UPDATE_FN: &'static [u8] = b"theropod_combo\0";
|
||||
|
||||
#[cfg_attr(feature = "be-dyn-lib", export_name = "theropod_combo")]
|
||||
fn update_skeleton_inner(
|
||||
skeleton: &Self::Skeleton,
|
||||
(_ability_id, stage_section, current_strike, global_time, timer): Self::Dependency<'_>,
|
||||
anim_time: f32,
|
||||
_rate: &mut f32,
|
||||
_s_a: &SkeletonAttr,
|
||||
) -> Self::Skeleton {
|
||||
let mut next = (*skeleton).clone();
|
||||
|
||||
let multi_strike_pullback = 1.0
|
||||
- if matches!(stage_section, StageSection::Recover) {
|
||||
anim_time.powi(4)
|
||||
} else {
|
||||
0.0
|
||||
};
|
||||
|
||||
for strike in 0..=current_strike {
|
||||
match strike {
|
||||
0 => {
|
||||
let (movement1base, movement2base) = match stage_section {
|
||||
StageSection::Buildup => (anim_time.powi(2), 0.0),
|
||||
StageSection::Action => (1.0, anim_time.powi(4)),
|
||||
_ => (0.0, 0.0),
|
||||
};
|
||||
let subtract = global_time - timer;
|
||||
let check = subtract - subtract.trunc();
|
||||
let mirror = (check - 0.5).signum();
|
||||
let movement1 = mirror * movement1base * multi_strike_pullback;
|
||||
let movement2 = mirror * movement2base * multi_strike_pullback;
|
||||
let movement1abs = movement1base * multi_strike_pullback;
|
||||
let movement2abs = movement2base * multi_strike_pullback;
|
||||
|
||||
next.head.orientation = Quaternion::rotation_x(movement1abs * 0.2)
|
||||
* Quaternion::rotation_y(movement1 * 0.1 + movement2 * 0.2);
|
||||
next.neck.orientation = Quaternion::rotation_x(movement1abs * -0.3)
|
||||
* Quaternion::rotation_y(movement1 * 0.1 + movement2 * 0.1);
|
||||
|
||||
next.jaw.orientation =
|
||||
Quaternion::rotation_x(movement1abs * -0.5 + movement2abs * 0.5);
|
||||
|
||||
next.chest_front.orientation = Quaternion::rotation_x(movement1abs * -0.2);
|
||||
next.chest_back.orientation = Quaternion::rotation_x(movement1abs * 0.2);
|
||||
|
||||
next.leg_l.orientation = Quaternion::rotation_x(movement1abs * -0.1);
|
||||
|
||||
next.leg_r.orientation = Quaternion::rotation_x(movement1abs * -0.1);
|
||||
next.foot_l.orientation = Quaternion::rotation_x(movement1abs * -0.3);
|
||||
next.foot_r.orientation = Quaternion::rotation_x(movement1abs * -0.3);
|
||||
|
||||
next.tail_front.orientation =
|
||||
Quaternion::rotation_x(0.1 + movement1abs * -0.1 + movement2abs * -0.3)
|
||||
* Quaternion::rotation_z(movement1 * -0.1 + movement2 * -0.2);
|
||||
|
||||
next.tail_back.orientation =
|
||||
Quaternion::rotation_x(0.1 + movement1abs * -0.1 + movement2abs * -0.3)
|
||||
* Quaternion::rotation_z(movement1 * -0.1 + movement2 * -0.2);
|
||||
},
|
||||
1 | 2 => {
|
||||
let (movement1base, movement2base) = match stage_section {
|
||||
StageSection::Buildup => (anim_time.powi(2), 0.0),
|
||||
StageSection::Action => (1.0, anim_time.powi(4)),
|
||||
_ => (0.0, 0.0),
|
||||
};
|
||||
let subtract = global_time - timer;
|
||||
let check = subtract - subtract.trunc();
|
||||
let mirror = (check - 0.5).signum();
|
||||
let movement1 = mirror * movement1base * multi_strike_pullback;
|
||||
let movement2 = mirror * movement2base * multi_strike_pullback;
|
||||
let movement1abs = movement1base * multi_strike_pullback;
|
||||
let movement2abs = movement2base * multi_strike_pullback;
|
||||
|
||||
next.head.orientation =
|
||||
Quaternion::rotation_x(movement1abs * -0.4 + movement2abs * 1.2)
|
||||
* Quaternion::rotation_y(movement1 * 0.1 + movement2 * -0.1);
|
||||
next.neck.orientation =
|
||||
Quaternion::rotation_x(movement1abs * 0.4 + movement2abs * -1.2)
|
||||
* Quaternion::rotation_y(movement1 * 0.1 + movement2 * -0.1);
|
||||
|
||||
next.chest_front.orientation =
|
||||
Quaternion::rotation_x(movement1abs * 0.6 + movement2abs * -1.5);
|
||||
next.chest_back.orientation =
|
||||
Quaternion::rotation_x(movement1abs * -0.6 + movement2abs * 1.5);
|
||||
|
||||
next.leg_l.orientation = Quaternion::rotation_x(movement1abs * -0.5);
|
||||
|
||||
next.leg_r.orientation = Quaternion::rotation_x(movement1abs * -0.5);
|
||||
next.foot_l.orientation = Quaternion::rotation_x(movement1abs * 0.4);
|
||||
next.foot_r.orientation = Quaternion::rotation_x(movement1abs * 0.4);
|
||||
|
||||
next.tail_front.orientation =
|
||||
Quaternion::rotation_x(0.1 + movement1abs * -0.1 + movement2abs * -0.3);
|
||||
|
||||
next.tail_back.orientation =
|
||||
Quaternion::rotation_x(0.1 + movement1abs * -0.1 + movement2abs * -0.3);
|
||||
},
|
||||
_ => {},
|
||||
}
|
||||
}
|
||||
|
||||
next
|
||||
}
|
||||
}
|
@ -1,5 +1,4 @@
|
||||
pub mod alpha;
|
||||
pub mod beta;
|
||||
pub mod combomelee;
|
||||
pub mod dash;
|
||||
pub mod idle;
|
||||
pub mod jump;
|
||||
@ -7,8 +6,8 @@ pub mod run;
|
||||
|
||||
// Reexports
|
||||
pub use self::{
|
||||
alpha::AlphaAnimation, beta::BetaAnimation, dash::DashAnimation, idle::IdleAnimation,
|
||||
jump::JumpAnimation, run::RunAnimation,
|
||||
combomelee::ComboAnimation, dash::DashAnimation, idle::IdleAnimation, jump::JumpAnimation,
|
||||
run::RunAnimation,
|
||||
};
|
||||
|
||||
use super::{make_bone, vek::*, FigureBoneData, Offsets, Skeleton};
|
||||
|
@ -1,7 +1,7 @@
|
||||
use crate::{widgets::two_col_row, SelectedEntityInfo};
|
||||
use common::{
|
||||
comp::CharacterState,
|
||||
states::{charged_melee, combo_melee, dash_melee, leap_melee},
|
||||
states::{charged_melee, dash_melee, leap_melee},
|
||||
};
|
||||
use egui::{Grid, Ui};
|
||||
|
||||
@ -15,9 +15,6 @@ pub fn draw_char_state_group(
|
||||
ui.label(character_state.to_string());
|
||||
});
|
||||
match character_state {
|
||||
CharacterState::ComboMelee(data) => {
|
||||
combo_melee_grid(ui, data);
|
||||
},
|
||||
CharacterState::DashMelee(data) => dash_melee_grid(ui, data),
|
||||
CharacterState::ChargedMelee(data) => charged_melee_grid(ui, data),
|
||||
// Character states with no associated data to display
|
||||
@ -47,18 +44,6 @@ fn charged_melee_grid(ui: &mut Ui, data: &charged_melee::Data) {
|
||||
});
|
||||
}
|
||||
|
||||
fn combo_melee_grid(ui: &mut Ui, data: &combo_melee::Data) {
|
||||
Grid::new("selected_entity_combo_melee_grid")
|
||||
.spacing([40.0, 4.0])
|
||||
.max_col_width(100.0)
|
||||
.striped(true)
|
||||
.show(ui, |ui| #[rustfmt::skip] {
|
||||
two_col_row(ui, "Stage", data.stage.to_string());
|
||||
two_col_row(ui, "Timer", format!("{}ms", data.timer.as_millis()));
|
||||
two_col_row(ui, "num_stages", data.static_data.num_stages.to_string());
|
||||
});
|
||||
}
|
||||
|
||||
fn dash_melee_grid(ui: &mut Ui, data: &dash_melee::Data) {
|
||||
Grid::new("selected_entity_dash_melee_grid")
|
||||
.spacing([40.0, 4.0])
|
||||
|
@ -115,128 +115,6 @@ fn maps_basic_melee() {
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn matches_ability_stage() {
|
||||
let loadout = LoadoutBuilder::empty()
|
||||
.active_mainhand(Some(Item::new_from_asset_expect(
|
||||
"common.items.weapons.sword.starter",
|
||||
)))
|
||||
.build();
|
||||
let inventory = Inventory::with_loadout_humanoid(loadout);
|
||||
|
||||
let result = CombatEventMapper::map_event(
|
||||
&CharacterState::ComboMelee(states::combo_melee::Data {
|
||||
static_data: states::combo_melee::StaticData {
|
||||
num_stages: 1,
|
||||
stage_data: vec![states::combo_melee::Stage {
|
||||
stage: 1,
|
||||
base_damage: 100.0,
|
||||
base_poise_damage: 100.0,
|
||||
damage_increase: 10.0,
|
||||
poise_damage_increase: 10.0,
|
||||
knockback: 10.0,
|
||||
range: 4.0,
|
||||
angle: 30.0,
|
||||
base_buildup_duration: Duration::from_millis(500),
|
||||
base_swing_duration: Duration::from_millis(200),
|
||||
hit_timing: 0.5,
|
||||
base_recover_duration: Duration::from_millis(400),
|
||||
forward_movement: 0.5,
|
||||
damage_kind: DamageKind::Slashing,
|
||||
damage_effect: None,
|
||||
}],
|
||||
initial_energy_gain: 0.0,
|
||||
max_energy_gain: 100.0,
|
||||
energy_increase: 20.0,
|
||||
speed_increase: 0.05,
|
||||
max_speed_increase: 0.8,
|
||||
scales_from_combo: 2,
|
||||
ori_modifier: 1.0,
|
||||
ability_info: empty_ability_info(),
|
||||
},
|
||||
exhausted: false,
|
||||
stage: 1,
|
||||
timer: Duration::default(),
|
||||
stage_section: states::utils::StageSection::Action,
|
||||
}),
|
||||
&PreviousEntityState {
|
||||
event: SfxEvent::Idle,
|
||||
time: Instant::now(),
|
||||
weapon_drawn: true,
|
||||
},
|
||||
&inventory,
|
||||
);
|
||||
|
||||
assert_eq!(
|
||||
result,
|
||||
SfxEvent::Attack(
|
||||
CharacterAbilityType::ComboMelee(states::utils::StageSection::Action, 1),
|
||||
ToolKind::Sword
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn ignores_different_ability_stage() {
|
||||
let loadout = LoadoutBuilder::empty()
|
||||
.active_mainhand(Some(Item::new_from_asset_expect(
|
||||
"common.items.weapons.axe.starter_axe",
|
||||
)))
|
||||
.build();
|
||||
let inventory = Inventory::with_loadout_humanoid(loadout);
|
||||
|
||||
let result = CombatEventMapper::map_event(
|
||||
&CharacterState::ComboMelee(states::combo_melee::Data {
|
||||
static_data: states::combo_melee::StaticData {
|
||||
num_stages: 1,
|
||||
stage_data: vec![states::combo_melee::Stage {
|
||||
stage: 1,
|
||||
base_damage: 100.0,
|
||||
base_poise_damage: 100.0,
|
||||
damage_increase: 100.0,
|
||||
poise_damage_increase: 10.0,
|
||||
knockback: 10.0,
|
||||
range: 4.0,
|
||||
angle: 30.0,
|
||||
base_buildup_duration: Duration::from_millis(500),
|
||||
base_swing_duration: Duration::from_millis(200),
|
||||
hit_timing: 0.5,
|
||||
base_recover_duration: Duration::from_millis(400),
|
||||
forward_movement: 0.5,
|
||||
damage_kind: DamageKind::Slashing,
|
||||
damage_effect: None,
|
||||
}],
|
||||
initial_energy_gain: 0.0,
|
||||
max_energy_gain: 100.0,
|
||||
energy_increase: 20.0,
|
||||
speed_increase: 0.05,
|
||||
max_speed_increase: 0.8,
|
||||
scales_from_combo: 2,
|
||||
ori_modifier: 1.0,
|
||||
ability_info: empty_ability_info(),
|
||||
},
|
||||
exhausted: false,
|
||||
stage: 1,
|
||||
timer: Duration::default(),
|
||||
stage_section: states::utils::StageSection::Action,
|
||||
}),
|
||||
&PreviousEntityState {
|
||||
event: SfxEvent::Idle,
|
||||
time: Instant::now(),
|
||||
weapon_drawn: true,
|
||||
},
|
||||
&inventory,
|
||||
);
|
||||
|
||||
assert_ne!(
|
||||
result,
|
||||
SfxEvent::Attack(
|
||||
CharacterAbilityType::ComboMelee(states::utils::StageSection::Action, 2),
|
||||
ToolKind::Sword
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
fn empty_ability_info() -> states::utils::AbilityInfo {
|
||||
states::utils::AbilityInfo {
|
||||
tool: None,
|
||||
|
@ -71,13 +71,6 @@
|
||||
//! ],
|
||||
//! threshold: 1.2,
|
||||
//! ),
|
||||
//! // A multi-stage attack ability which depends on the weapon
|
||||
//! Attack(ComboMelee(Swing, 1), Sword): (
|
||||
//! files: [
|
||||
//! "voxygen.audio.sfx.abilities.swing_sword",
|
||||
//! ],
|
||||
//! threshold: 0.5,
|
||||
//! ),
|
||||
//! ```
|
||||
|
||||
mod event_mapper;
|
||||
|
@ -1835,7 +1835,7 @@ impl FigureMgr {
|
||||
skeleton_attr,
|
||||
)
|
||||
},
|
||||
CharacterState::ComboMelee(s) => {
|
||||
CharacterState::ComboMeleeDeprecated(s) => {
|
||||
let stage_index = (s.stage - 1) as usize;
|
||||
let stage_time = s.timer.as_secs_f32();
|
||||
let stage_progress =
|
||||
@ -2313,40 +2313,29 @@ impl FigureMgr {
|
||||
),
|
||||
};
|
||||
let target_bones = match &character {
|
||||
CharacterState::ComboMelee(s) => {
|
||||
let stage_index = (s.stage - 1) as usize;
|
||||
CharacterState::BasicMelee(s) => {
|
||||
let stage_time = s.timer.as_secs_f32();
|
||||
let stage_progress =
|
||||
if let Some(stage) = s.static_data.stage_data.get(stage_index) {
|
||||
match s.stage_section {
|
||||
StageSection::Buildup => {
|
||||
stage_time / stage.base_buildup_duration.as_secs_f32()
|
||||
},
|
||||
StageSection::Action => {
|
||||
stage_time / stage.base_swing_duration.as_secs_f32()
|
||||
},
|
||||
StageSection::Recover => {
|
||||
stage_time / stage.base_recover_duration.as_secs_f32()
|
||||
},
|
||||
_ => 0.0,
|
||||
}
|
||||
} else {
|
||||
0.0
|
||||
};
|
||||
{
|
||||
anim::quadruped_small::AlphaAnimation::update_skeleton(
|
||||
&target_base,
|
||||
(
|
||||
rel_vel.magnitude(),
|
||||
time,
|
||||
Some(s.stage_section),
|
||||
state.state_time,
|
||||
),
|
||||
stage_progress,
|
||||
&mut state_animation_rate,
|
||||
skeleton_attr,
|
||||
)
|
||||
}
|
||||
|
||||
let stage_progress = match s.stage_section {
|
||||
StageSection::Buildup => {
|
||||
stage_time / s.static_data.buildup_duration.as_secs_f32()
|
||||
},
|
||||
StageSection::Action => {
|
||||
stage_time / s.static_data.swing_duration.as_secs_f32()
|
||||
},
|
||||
StageSection::Recover => {
|
||||
stage_time / s.static_data.recover_duration.as_secs_f32()
|
||||
},
|
||||
|
||||
_ => 0.0,
|
||||
};
|
||||
anim::quadruped_small::AlphaAnimation::update_skeleton(
|
||||
&target_base,
|
||||
(time, s.stage_section, state.state_time),
|
||||
stage_progress,
|
||||
&mut state_animation_rate,
|
||||
skeleton_attr,
|
||||
)
|
||||
},
|
||||
CharacterState::ComboMelee2(s) => {
|
||||
let timer = s.timer.as_secs_f32();
|
||||
@ -2675,65 +2664,6 @@ impl FigureMgr {
|
||||
skeleton_attr,
|
||||
)
|
||||
},
|
||||
CharacterState::ComboMelee(s) => {
|
||||
let stage_index = (s.stage - 1) as usize;
|
||||
let stage_time = s.timer.as_secs_f32();
|
||||
let stage_progress =
|
||||
if let Some(stage) = s.static_data.stage_data.get(stage_index) {
|
||||
match s.stage_section {
|
||||
StageSection::Buildup => {
|
||||
stage_time / stage.base_buildup_duration.as_secs_f32()
|
||||
},
|
||||
StageSection::Action => {
|
||||
stage_time / stage.base_swing_duration.as_secs_f32()
|
||||
},
|
||||
StageSection::Recover => {
|
||||
stage_time / stage.base_recover_duration.as_secs_f32()
|
||||
},
|
||||
_ => 0.0,
|
||||
}
|
||||
} else {
|
||||
0.0
|
||||
};
|
||||
match s.stage {
|
||||
1 => anim::quadruped_medium::AlphaAnimation::update_skeleton(
|
||||
&target_base,
|
||||
(
|
||||
rel_vel.magnitude(),
|
||||
time,
|
||||
Some(s.stage_section),
|
||||
state.state_time,
|
||||
),
|
||||
stage_progress,
|
||||
&mut state_animation_rate,
|
||||
skeleton_attr,
|
||||
),
|
||||
2 => anim::quadruped_medium::BetaAnimation::update_skeleton(
|
||||
&target_base,
|
||||
(
|
||||
rel_vel.magnitude(),
|
||||
time,
|
||||
Some(s.stage_section),
|
||||
state.state_time,
|
||||
),
|
||||
stage_progress,
|
||||
&mut state_animation_rate,
|
||||
skeleton_attr,
|
||||
),
|
||||
_ => anim::quadruped_medium::AlphaAnimation::update_skeleton(
|
||||
&target_base,
|
||||
(
|
||||
rel_vel.magnitude(),
|
||||
time,
|
||||
Some(s.stage_section),
|
||||
state.state_time,
|
||||
),
|
||||
stage_progress,
|
||||
&mut state_animation_rate,
|
||||
skeleton_attr,
|
||||
),
|
||||
}
|
||||
},
|
||||
CharacterState::ComboMelee2(s) => {
|
||||
let timer = s.timer.as_secs_f32();
|
||||
let current_strike = s.completed_strikes % s.static_data.strikes.len();
|
||||
@ -2755,9 +2685,9 @@ impl FigureMgr {
|
||||
&target_base,
|
||||
(
|
||||
ability_id,
|
||||
Some(s.stage_section),
|
||||
Some(s.static_data.ability_info),
|
||||
s.stage_section,
|
||||
current_strike,
|
||||
rel_vel.magnitude(),
|
||||
time,
|
||||
state.state_time,
|
||||
),
|
||||
@ -3028,12 +2958,7 @@ impl FigureMgr {
|
||||
};
|
||||
anim::quadruped_low::BetaAnimation::update_skeleton(
|
||||
&target_base,
|
||||
(
|
||||
rel_vel.magnitude(),
|
||||
time,
|
||||
Some(s.stage_section),
|
||||
state.state_time,
|
||||
),
|
||||
(rel_vel.magnitude(), time, s.stage_section, state.state_time),
|
||||
stage_progress,
|
||||
&mut state_animation_rate,
|
||||
skeleton_attr,
|
||||
@ -3141,8 +3066,7 @@ impl FigureMgr {
|
||||
&target_base,
|
||||
(
|
||||
ability_id,
|
||||
Some(s.stage_section),
|
||||
Some(s.static_data.ability_info),
|
||||
s.stage_section,
|
||||
current_strike,
|
||||
time,
|
||||
state.state_time,
|
||||
@ -3152,65 +3076,6 @@ impl FigureMgr {
|
||||
skeleton_attr,
|
||||
)
|
||||
},
|
||||
CharacterState::ComboMelee(s) => {
|
||||
let stage_index = (s.stage - 1) as usize;
|
||||
let stage_time = s.timer.as_secs_f32();
|
||||
let stage_progress =
|
||||
if let Some(stage) = s.static_data.stage_data.get(stage_index) {
|
||||
match s.stage_section {
|
||||
StageSection::Buildup => {
|
||||
stage_time / stage.base_buildup_duration.as_secs_f32()
|
||||
},
|
||||
StageSection::Action => {
|
||||
stage_time / stage.base_swing_duration.as_secs_f32()
|
||||
},
|
||||
StageSection::Recover => {
|
||||
stage_time / stage.base_recover_duration.as_secs_f32()
|
||||
},
|
||||
_ => 0.0,
|
||||
}
|
||||
} else {
|
||||
0.0
|
||||
};
|
||||
match s.stage {
|
||||
1 => anim::quadruped_low::AlphaAnimation::update_skeleton(
|
||||
&target_base,
|
||||
(
|
||||
rel_vel.magnitude(),
|
||||
time,
|
||||
Some(s.stage_section),
|
||||
state.state_time,
|
||||
),
|
||||
stage_progress,
|
||||
&mut state_animation_rate,
|
||||
skeleton_attr,
|
||||
),
|
||||
2 => anim::quadruped_low::BetaAnimation::update_skeleton(
|
||||
&target_base,
|
||||
(
|
||||
rel_vel.magnitude(),
|
||||
time,
|
||||
Some(s.stage_section),
|
||||
state.state_time,
|
||||
),
|
||||
stage_progress,
|
||||
&mut state_animation_rate,
|
||||
skeleton_attr,
|
||||
),
|
||||
_ => anim::quadruped_low::AlphaAnimation::update_skeleton(
|
||||
&target_base,
|
||||
(
|
||||
rel_vel.magnitude(),
|
||||
time,
|
||||
Some(s.stage_section),
|
||||
state.state_time,
|
||||
),
|
||||
stage_progress,
|
||||
&mut state_animation_rate,
|
||||
skeleton_attr,
|
||||
),
|
||||
}
|
||||
},
|
||||
CharacterState::BasicBeam(s) => {
|
||||
let stage_time = s.timer.as_secs_f32();
|
||||
let stage_progress = match s.stage_section {
|
||||
@ -3417,27 +3282,20 @@ impl FigureMgr {
|
||||
skeleton_attr,
|
||||
)
|
||||
},
|
||||
CharacterState::ComboMelee(s) => {
|
||||
let stage_index = (s.stage - 1) as usize;
|
||||
CharacterState::BasicMelee(s) => {
|
||||
let stage_time = s.timer.as_secs_f32();
|
||||
let stage_progress =
|
||||
if let Some(stage) = s.static_data.stage_data.get(stage_index) {
|
||||
match s.stage_section {
|
||||
StageSection::Buildup => {
|
||||
stage_time / stage.base_buildup_duration.as_secs_f32()
|
||||
},
|
||||
StageSection::Action => {
|
||||
stage_time / stage.base_swing_duration.as_secs_f32()
|
||||
},
|
||||
StageSection::Recover => {
|
||||
stage_time / stage.base_recover_duration.as_secs_f32()
|
||||
},
|
||||
_ => 0.0,
|
||||
}
|
||||
} else {
|
||||
0.0
|
||||
};
|
||||
|
||||
let stage_progress = match s.stage_section {
|
||||
StageSection::Buildup => {
|
||||
stage_time / s.static_data.buildup_duration.as_secs_f32()
|
||||
},
|
||||
StageSection::Action => {
|
||||
stage_time / s.static_data.swing_duration.as_secs_f32()
|
||||
},
|
||||
StageSection::Recover => {
|
||||
stage_time / s.static_data.recover_duration.as_secs_f32()
|
||||
},
|
||||
_ => 0.0,
|
||||
};
|
||||
anim::bird_medium::AlphaAnimation::update_skeleton(
|
||||
&target_base,
|
||||
(
|
||||
@ -3878,10 +3736,11 @@ impl FigureMgr {
|
||||
&target_base,
|
||||
(
|
||||
ability_id,
|
||||
Some(s.stage_section),
|
||||
Some(s.static_data.ability_info),
|
||||
s.stage_section,
|
||||
current_strike,
|
||||
move_dir,
|
||||
rel_vel,
|
||||
time,
|
||||
state.state_time,
|
||||
),
|
||||
progress,
|
||||
&mut state_animation_rate,
|
||||
@ -4054,65 +3913,6 @@ impl FigureMgr {
|
||||
skeleton_attr,
|
||||
)
|
||||
},
|
||||
CharacterState::ComboMelee(s) => {
|
||||
let stage_index = (s.stage - 1) as usize;
|
||||
let stage_time = s.timer.as_secs_f32();
|
||||
let stage_progress =
|
||||
if let Some(stage) = s.static_data.stage_data.get(stage_index) {
|
||||
match s.stage_section {
|
||||
StageSection::Buildup => {
|
||||
stage_time / stage.base_buildup_duration.as_secs_f32()
|
||||
},
|
||||
StageSection::Action => {
|
||||
stage_time / stage.base_swing_duration.as_secs_f32()
|
||||
},
|
||||
StageSection::Recover => {
|
||||
stage_time / stage.base_recover_duration.as_secs_f32()
|
||||
},
|
||||
_ => 0.0,
|
||||
}
|
||||
} else {
|
||||
0.0
|
||||
};
|
||||
match s.stage {
|
||||
1 => anim::biped_small::AlphaAnimation::update_skeleton(
|
||||
&target_base,
|
||||
(
|
||||
ability_id,
|
||||
active_tool_kind,
|
||||
rel_vel,
|
||||
ori * anim::vek::Vec3::<f32>::unit_y(),
|
||||
state.last_ori * anim::vek::Vec3::<f32>::unit_y(),
|
||||
time,
|
||||
rel_avg_vel,
|
||||
state.acc_vel,
|
||||
Some(s.stage_section),
|
||||
state.state_time,
|
||||
),
|
||||
stage_progress,
|
||||
&mut state_animation_rate,
|
||||
skeleton_attr,
|
||||
),
|
||||
_ => anim::biped_small::AlphaAnimation::update_skeleton(
|
||||
&target_base,
|
||||
(
|
||||
ability_id,
|
||||
active_tool_kind,
|
||||
rel_vel,
|
||||
ori * anim::vek::Vec3::<f32>::unit_y(),
|
||||
state.last_ori * anim::vek::Vec3::<f32>::unit_y(),
|
||||
time,
|
||||
rel_avg_vel,
|
||||
state.acc_vel,
|
||||
Some(s.stage_section),
|
||||
state.state_time,
|
||||
),
|
||||
stage_progress,
|
||||
&mut state_animation_rate,
|
||||
skeleton_attr,
|
||||
),
|
||||
}
|
||||
},
|
||||
CharacterState::BasicMelee(s) => {
|
||||
let stage_time = s.timer.as_secs_f32();
|
||||
let stage_progress = match s.stage_section {
|
||||
@ -4431,52 +4231,36 @@ impl FigureMgr {
|
||||
),
|
||||
};
|
||||
let target_bones = match &character {
|
||||
CharacterState::ComboMelee(s) => {
|
||||
let stage_index = (s.stage - 1) as usize;
|
||||
let stage_time = s.timer.as_secs_f32();
|
||||
let stage_progress =
|
||||
if let Some(stage) = s.static_data.stage_data.get(stage_index) {
|
||||
match s.stage_section {
|
||||
StageSection::Buildup => {
|
||||
stage_time / stage.base_buildup_duration.as_secs_f32()
|
||||
},
|
||||
StageSection::Action => {
|
||||
stage_time / stage.base_swing_duration.as_secs_f32()
|
||||
},
|
||||
StageSection::Recover => {
|
||||
stage_time / stage.base_recover_duration.as_secs_f32()
|
||||
},
|
||||
_ => 0.0,
|
||||
}
|
||||
} else {
|
||||
0.0
|
||||
};
|
||||
match s.stage {
|
||||
1 => anim::theropod::AlphaAnimation::update_skeleton(
|
||||
&target_base,
|
||||
(
|
||||
rel_vel.magnitude(),
|
||||
time,
|
||||
Some(s.stage_section),
|
||||
state.state_time,
|
||||
),
|
||||
stage_progress,
|
||||
&mut state_animation_rate,
|
||||
skeleton_attr,
|
||||
CharacterState::ComboMelee2(s) => {
|
||||
let timer = s.timer.as_secs_f32();
|
||||
let current_strike = s.completed_strikes % s.static_data.strikes.len();
|
||||
let strike_data = s.static_data.strikes[current_strike];
|
||||
let progress = match s.stage_section {
|
||||
StageSection::Buildup => {
|
||||
timer / strike_data.buildup_duration.as_secs_f32()
|
||||
},
|
||||
StageSection::Action => {
|
||||
timer / strike_data.swing_duration.as_secs_f32()
|
||||
},
|
||||
StageSection::Recover => {
|
||||
timer / strike_data.recover_duration.as_secs_f32()
|
||||
},
|
||||
_ => 0.0,
|
||||
};
|
||||
|
||||
anim::theropod::ComboAnimation::update_skeleton(
|
||||
&target_base,
|
||||
(
|
||||
ability_id,
|
||||
s.stage_section,
|
||||
current_strike,
|
||||
time,
|
||||
state.state_time,
|
||||
),
|
||||
_ => anim::theropod::BetaAnimation::update_skeleton(
|
||||
&target_base,
|
||||
(
|
||||
rel_vel.magnitude(),
|
||||
time,
|
||||
Some(s.stage_section),
|
||||
state.state_time,
|
||||
),
|
||||
stage_progress,
|
||||
&mut state_animation_rate,
|
||||
skeleton_attr,
|
||||
),
|
||||
}
|
||||
progress,
|
||||
&mut state_animation_rate,
|
||||
skeleton_attr,
|
||||
)
|
||||
},
|
||||
CharacterState::DashMelee(s) => {
|
||||
let stage_time = s.timer.as_secs_f32();
|
||||
@ -4610,52 +4394,36 @@ impl FigureMgr {
|
||||
),
|
||||
};
|
||||
let target_bones = match &character {
|
||||
CharacterState::ComboMelee(s) => {
|
||||
let stage_index = (s.stage - 1) as usize;
|
||||
let stage_time = s.timer.as_secs_f32();
|
||||
let stage_progress =
|
||||
if let Some(stage) = s.static_data.stage_data.get(stage_index) {
|
||||
match s.stage_section {
|
||||
StageSection::Buildup => {
|
||||
stage_time / stage.base_buildup_duration.as_secs_f32()
|
||||
},
|
||||
StageSection::Action => {
|
||||
stage_time / stage.base_swing_duration.as_secs_f32()
|
||||
},
|
||||
StageSection::Recover => {
|
||||
stage_time / stage.base_recover_duration.as_secs_f32()
|
||||
},
|
||||
_ => 0.0,
|
||||
}
|
||||
} else {
|
||||
0.0
|
||||
};
|
||||
match s.stage {
|
||||
1 => anim::arthropod::AlphaAnimation::update_skeleton(
|
||||
&target_base,
|
||||
(
|
||||
rel_vel.magnitude(),
|
||||
time,
|
||||
Some(s.stage_section),
|
||||
state.state_time,
|
||||
),
|
||||
stage_progress,
|
||||
&mut state_animation_rate,
|
||||
skeleton_attr,
|
||||
CharacterState::ComboMelee2(s) => {
|
||||
let timer = s.timer.as_secs_f32();
|
||||
let current_strike = s.completed_strikes % s.static_data.strikes.len();
|
||||
let strike_data = s.static_data.strikes[current_strike];
|
||||
let progress = match s.stage_section {
|
||||
StageSection::Buildup => {
|
||||
timer / strike_data.buildup_duration.as_secs_f32()
|
||||
},
|
||||
StageSection::Action => {
|
||||
timer / strike_data.swing_duration.as_secs_f32()
|
||||
},
|
||||
StageSection::Recover => {
|
||||
timer / strike_data.recover_duration.as_secs_f32()
|
||||
},
|
||||
_ => 0.0,
|
||||
};
|
||||
|
||||
anim::arthropod::ComboAnimation::update_skeleton(
|
||||
&target_base,
|
||||
(
|
||||
ability_id,
|
||||
s.stage_section,
|
||||
current_strike,
|
||||
time,
|
||||
state.state_time,
|
||||
),
|
||||
_ => anim::arthropod::AlphaAnimation::update_skeleton(
|
||||
&target_base,
|
||||
(
|
||||
rel_vel.magnitude(),
|
||||
time,
|
||||
Some(s.stage_section),
|
||||
state.state_time,
|
||||
),
|
||||
stage_progress,
|
||||
&mut state_animation_rate,
|
||||
skeleton_attr,
|
||||
),
|
||||
}
|
||||
progress,
|
||||
&mut state_animation_rate,
|
||||
skeleton_attr,
|
||||
)
|
||||
},
|
||||
CharacterState::LeapMelee(s) => {
|
||||
let stage_time = s.timer.as_secs_f32();
|
||||
@ -5733,6 +5501,8 @@ impl FigureMgr {
|
||||
Some(s.static_data.ability_info),
|
||||
current_strike,
|
||||
move_dir,
|
||||
rel_vel,
|
||||
state.acc_vel,
|
||||
),
|
||||
progress,
|
||||
&mut state_animation_rate,
|
||||
@ -5899,75 +5669,6 @@ impl FigureMgr {
|
||||
skeleton_attr,
|
||||
)
|
||||
},
|
||||
CharacterState::ComboMelee(s) => {
|
||||
let stage_index = (s.stage - 1) as usize;
|
||||
let stage_time = s.timer.as_secs_f32();
|
||||
let stage_progress =
|
||||
if let Some(stage) = s.static_data.stage_data.get(stage_index) {
|
||||
match s.stage_section {
|
||||
StageSection::Buildup => {
|
||||
stage_time / stage.base_buildup_duration.as_secs_f32()
|
||||
},
|
||||
StageSection::Action => {
|
||||
stage_time / stage.base_swing_duration.as_secs_f32()
|
||||
},
|
||||
StageSection::Recover => {
|
||||
stage_time / stage.base_recover_duration.as_secs_f32()
|
||||
},
|
||||
_ => 0.0,
|
||||
}
|
||||
} else {
|
||||
0.0
|
||||
};
|
||||
match s.stage {
|
||||
1 => anim::biped_large::AlphaAnimation::update_skeleton(
|
||||
&target_base,
|
||||
(
|
||||
active_tool_kind,
|
||||
(second_tool_kind, second_tool_spec),
|
||||
rel_vel,
|
||||
time,
|
||||
Some(s.stage_section),
|
||||
state.acc_vel,
|
||||
state.state_time,
|
||||
ability_id,
|
||||
),
|
||||
stage_progress,
|
||||
&mut state_animation_rate,
|
||||
skeleton_attr,
|
||||
),
|
||||
2 => anim::biped_large::BetaAnimation::update_skeleton(
|
||||
&target_base,
|
||||
(
|
||||
active_tool_kind,
|
||||
(second_tool_kind, second_tool_spec),
|
||||
rel_vel,
|
||||
time,
|
||||
Some(s.stage_section),
|
||||
state.acc_vel,
|
||||
ability_id,
|
||||
),
|
||||
stage_progress,
|
||||
&mut state_animation_rate,
|
||||
skeleton_attr,
|
||||
),
|
||||
_ => anim::biped_large::BetaAnimation::update_skeleton(
|
||||
&target_base,
|
||||
(
|
||||
active_tool_kind,
|
||||
(second_tool_kind, second_tool_spec),
|
||||
rel_vel,
|
||||
time,
|
||||
Some(s.stage_section),
|
||||
state.acc_vel,
|
||||
ability_id,
|
||||
),
|
||||
stage_progress,
|
||||
&mut state_animation_rate,
|
||||
skeleton_attr,
|
||||
),
|
||||
}
|
||||
},
|
||||
CharacterState::RapidMelee(s) => {
|
||||
let stage_time = s.timer.as_secs_f32();
|
||||
let stage_progress = match s.stage_section {
|
||||
@ -6288,35 +5989,6 @@ impl FigureMgr {
|
||||
),
|
||||
};
|
||||
let target_bones = match &character {
|
||||
CharacterState::ComboMelee(s) => {
|
||||
let stage_index = (s.stage - 1) as usize;
|
||||
let stage_time = s.timer.as_secs_f32();
|
||||
let stage_progress =
|
||||
if let Some(stage) = s.static_data.stage_data.get(stage_index) {
|
||||
match s.stage_section {
|
||||
StageSection::Buildup => {
|
||||
stage_time / stage.base_buildup_duration.as_secs_f32()
|
||||
},
|
||||
StageSection::Action => {
|
||||
stage_time / stage.base_swing_duration.as_secs_f32()
|
||||
},
|
||||
StageSection::Recover => {
|
||||
stage_time / stage.base_recover_duration.as_secs_f32()
|
||||
},
|
||||
_ => 0.0,
|
||||
}
|
||||
} else {
|
||||
0.0
|
||||
};
|
||||
|
||||
anim::golem::AlphaAnimation::update_skeleton(
|
||||
&target_base,
|
||||
(Some(s.stage_section), time, state.state_time, ability_id),
|
||||
stage_progress,
|
||||
&mut state_animation_rate,
|
||||
skeleton_attr,
|
||||
)
|
||||
},
|
||||
CharacterState::BasicRanged(s) => {
|
||||
let stage_time = s.timer.as_secs_f32();
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user