mirror of
https://gitlab.com/veloren/veloren.git
synced 2024-08-30 18:12:32 +00:00
Merge branch 'do-no-van/sword-rebalancing' into 'master'
sword ability rebalancing See merge request veloren/veloren!4268
This commit is contained in:
commit
6c5e0a698e
@ -3,7 +3,7 @@ ComboMelee2(
|
||||
(
|
||||
melee_constructor: (
|
||||
kind: Slash(
|
||||
damage: 12,
|
||||
damage: 11,
|
||||
poise: 5,
|
||||
knockback: 0,
|
||||
energy_regen: 0,
|
||||
|
@ -3,7 +3,7 @@ ComboMelee2(
|
||||
(
|
||||
melee_constructor: (
|
||||
kind: Slash(
|
||||
damage: 5,
|
||||
damage: 4,
|
||||
poise: 5,
|
||||
knockback: 0,
|
||||
energy_regen: 0,
|
||||
@ -20,7 +20,7 @@ ComboMelee2(
|
||||
(
|
||||
melee_constructor: (
|
||||
kind: Slash(
|
||||
damage: 7,
|
||||
damage: 6,
|
||||
poise: 5,
|
||||
knockback: 0,
|
||||
energy_regen: 0,
|
||||
|
@ -4,7 +4,7 @@ RapidMelee(
|
||||
recover_duration: 0.1,
|
||||
melee_constructor: (
|
||||
kind: Slash(
|
||||
damage: 10,
|
||||
damage: 6,
|
||||
poise: 3,
|
||||
knockback: 0,
|
||||
energy_regen: 0,
|
||||
@ -12,7 +12,7 @@ RapidMelee(
|
||||
range: 6.0,
|
||||
angle: 10.0,
|
||||
),
|
||||
energy_cost: 2.5,
|
||||
energy_cost: 6,
|
||||
max_strikes: Some(6),
|
||||
move_modifier: 0.35,
|
||||
ori_modifier: 0.25,
|
||||
|
@ -3,13 +3,13 @@ ComboMelee2(
|
||||
(
|
||||
melee_constructor: (
|
||||
kind: Slash(
|
||||
damage: 8,
|
||||
damage: 14,
|
||||
poise: 5,
|
||||
knockback: 0,
|
||||
energy_regen: 0,
|
||||
),
|
||||
range: 3.0,
|
||||
angle: 45.0,
|
||||
angle: 90.0,
|
||||
),
|
||||
buildup_duration: 0.2,
|
||||
swing_duration: 0.1,
|
||||
@ -23,7 +23,7 @@ ComboMelee2(
|
||||
ori_modifier: 0.6,
|
||||
),
|
||||
],
|
||||
energy_cost_per_strike: 0,
|
||||
energy_cost_per_strike: 5,
|
||||
meta: (
|
||||
init_event: Some(EnterStance(Sword(Agile))),
|
||||
),
|
||||
|
@ -3,7 +3,7 @@ ComboMelee2(
|
||||
(
|
||||
melee_constructor: (
|
||||
kind: Slash(
|
||||
damage: 10,
|
||||
damage: 9,
|
||||
poise: 5,
|
||||
knockback: 0,
|
||||
energy_regen: 0,
|
||||
|
@ -4,7 +4,7 @@ RapidMelee(
|
||||
recover_duration: 0.1,
|
||||
melee_constructor: (
|
||||
kind: Slash(
|
||||
damage: 10,
|
||||
damage: 8,
|
||||
poise: 3,
|
||||
knockback: 0,
|
||||
energy_regen: 0,
|
||||
@ -12,7 +12,7 @@ RapidMelee(
|
||||
range: 6.0,
|
||||
angle: 10.0,
|
||||
),
|
||||
energy_cost: 5,
|
||||
energy_cost: 6,
|
||||
max_strikes: Some(3),
|
||||
move_modifier: 0.35,
|
||||
ori_modifier: 0.25,
|
||||
|
@ -3,7 +3,7 @@ ComboMelee2(
|
||||
(
|
||||
melee_constructor: (
|
||||
kind: Slash(
|
||||
damage: 24,
|
||||
damage: 19,
|
||||
poise: 5,
|
||||
knockback: 0,
|
||||
energy_regen: 0,
|
||||
|
@ -3,7 +3,7 @@ ComboMelee2(
|
||||
(
|
||||
melee_constructor: (
|
||||
kind: Slash(
|
||||
damage: 16,
|
||||
damage: 13,
|
||||
poise: 5,
|
||||
knockback: 0,
|
||||
energy_regen: 0,
|
||||
|
@ -3,7 +3,7 @@ ComboMelee2(
|
||||
(
|
||||
melee_constructor: (
|
||||
kind: Slash(
|
||||
damage: 10,
|
||||
damage: 7,
|
||||
poise: 5,
|
||||
knockback: 0,
|
||||
energy_regen: 0,
|
||||
@ -20,7 +20,7 @@ ComboMelee2(
|
||||
(
|
||||
melee_constructor: (
|
||||
kind: Slash(
|
||||
damage: 14,
|
||||
damage: 12,
|
||||
poise: 5,
|
||||
knockback: 0,
|
||||
energy_regen: 0,
|
||||
|
@ -3,7 +3,7 @@ ComboMelee2(
|
||||
(
|
||||
melee_constructor: (
|
||||
kind: Slash(
|
||||
damage: 10,
|
||||
damage: 9,
|
||||
poise: 5,
|
||||
knockback: 0,
|
||||
energy_regen: 0,
|
||||
|
@ -3,7 +3,7 @@ ComboMelee2(
|
||||
(
|
||||
melee_constructor: (
|
||||
kind: Slash(
|
||||
damage: 20,
|
||||
damage: 15,
|
||||
poise: 5,
|
||||
knockback: 0,
|
||||
energy_regen: 0,
|
||||
|
@ -3,7 +3,7 @@ ComboMelee2(
|
||||
(
|
||||
melee_constructor: (
|
||||
kind: Stab(
|
||||
damage: 18,
|
||||
damage: 15,
|
||||
poise: 5,
|
||||
knockback: 0,
|
||||
energy_regen: 0,
|
||||
|
@ -4,7 +4,7 @@ RapidMelee(
|
||||
recover_duration: 0.3,
|
||||
melee_constructor: (
|
||||
kind: Slash(
|
||||
damage: 8,
|
||||
damage: 10,
|
||||
poise: 10,
|
||||
knockback: 0,
|
||||
energy_regen: 0,
|
||||
|
@ -3,7 +3,7 @@ ComboMelee2(
|
||||
(
|
||||
melee_constructor: (
|
||||
kind: Slash(
|
||||
damage: 24,
|
||||
damage: 19,
|
||||
poise: 5,
|
||||
knockback: 0,
|
||||
energy_regen: 0,
|
||||
|
@ -3,7 +3,7 @@ ComboMelee2(
|
||||
(
|
||||
melee_constructor: (
|
||||
kind: Slash(
|
||||
damage: 16,
|
||||
damage: 13,
|
||||
poise: 5,
|
||||
knockback: 0,
|
||||
energy_regen: 0,
|
||||
|
@ -3,7 +3,7 @@ ComboMelee2(
|
||||
(
|
||||
melee_constructor: (
|
||||
kind: Slash(
|
||||
damage: 10,
|
||||
damage: 7,
|
||||
poise: 5,
|
||||
knockback: 0,
|
||||
energy_regen: 0,
|
||||
@ -21,7 +21,7 @@ ComboMelee2(
|
||||
(
|
||||
melee_constructor: (
|
||||
kind: Slash(
|
||||
damage: 14,
|
||||
damage: 12,
|
||||
poise: 5,
|
||||
knockback: 0,
|
||||
energy_regen: 0,
|
||||
|
@ -3,7 +3,7 @@ ComboMelee2(
|
||||
(
|
||||
melee_constructor: (
|
||||
kind: Slash(
|
||||
damage: 10,
|
||||
damage: 9,
|
||||
poise: 5,
|
||||
knockback: 0,
|
||||
energy_regen: 0,
|
||||
|
@ -4,7 +4,7 @@ RapidMelee(
|
||||
recover_duration: 0.4,
|
||||
melee_constructor: (
|
||||
kind: Slash(
|
||||
damage: 10,
|
||||
damage: 8,
|
||||
poise: 5,
|
||||
knockback: 0,
|
||||
energy_regen: 0,
|
||||
|
@ -1,5 +1,5 @@
|
||||
DiveMelee(
|
||||
energy_cost: 5,
|
||||
energy_cost: 15,
|
||||
vertical_speed: 5,
|
||||
buildup_duration: Some(0.1),
|
||||
movement_duration: 5,
|
||||
|
@ -3,7 +3,7 @@ ComboMelee2(
|
||||
(
|
||||
melee_constructor: (
|
||||
kind: Slash(
|
||||
damage: 20,
|
||||
damage: 15,
|
||||
poise: 5,
|
||||
knockback: 0,
|
||||
energy_regen: 0,
|
||||
|
@ -3,7 +3,7 @@ ComboMelee2(
|
||||
(
|
||||
melee_constructor: (
|
||||
kind: Stab(
|
||||
damage: 18,
|
||||
damage: 15,
|
||||
poise: 5,
|
||||
knockback: 0,
|
||||
energy_regen: 0,
|
||||
|
@ -4,9 +4,9 @@ ComboMelee2(
|
||||
(
|
||||
melee_constructor: (
|
||||
kind: Slash(
|
||||
damage: 30,
|
||||
damage: 23,
|
||||
poise: 20,
|
||||
knockback: 10,
|
||||
knockback: 20,
|
||||
energy_regen: 0,
|
||||
),
|
||||
range: 4.0,
|
||||
@ -20,7 +20,7 @@ ComboMelee2(
|
||||
ori_modifier: 0.6,
|
||||
),
|
||||
],
|
||||
energy_cost_per_strike: 25,
|
||||
energy_cost_per_strike: 18,
|
||||
meta: (
|
||||
requirements: (stance: Some(Sword(Cleaving))),
|
||||
),
|
||||
|
@ -4,7 +4,7 @@ RapidMelee(
|
||||
recover_duration: 0.4,
|
||||
melee_constructor: (
|
||||
kind: Slash(
|
||||
damage: 14,
|
||||
damage: 11,
|
||||
poise: 5,
|
||||
knockback: 0,
|
||||
energy_regen: 0,
|
||||
|
@ -3,10 +3,10 @@ ComboMelee2(
|
||||
(
|
||||
melee_constructor: (
|
||||
kind: Slash(
|
||||
damage: 16,
|
||||
damage: 12,
|
||||
poise: 5,
|
||||
knockback: 0,
|
||||
energy_regen: 5,
|
||||
energy_regen: 7,
|
||||
),
|
||||
range: 3.0,
|
||||
angle: 45.0,
|
||||
@ -15,11 +15,11 @@ ComboMelee2(
|
||||
buildup_duration: 0.2,
|
||||
swing_duration: 0.1,
|
||||
hit_timing: 0.5,
|
||||
recover_duration: 0.2,
|
||||
recover_duration: 0.35,
|
||||
ori_modifier: 0.6,
|
||||
),
|
||||
],
|
||||
energy_cost_per_strike: 12,
|
||||
energy_cost_per_strike: 15,
|
||||
meta: (
|
||||
requirements: (stance: Some(Sword(Crippling))),
|
||||
),
|
||||
|
@ -3,7 +3,7 @@ ComboMelee2(
|
||||
(
|
||||
melee_constructor: (
|
||||
kind: Slash(
|
||||
damage: 20,
|
||||
damage: 15,
|
||||
poise: 5,
|
||||
knockback: 0,
|
||||
energy_regen: 0,
|
||||
|
@ -3,7 +3,7 @@ ComboMelee2(
|
||||
(
|
||||
melee_constructor: (
|
||||
kind: Slash(
|
||||
damage: 13,
|
||||
damage: 12,
|
||||
poise: 5,
|
||||
knockback: 0,
|
||||
energy_regen: 0,
|
||||
|
@ -3,7 +3,7 @@ ComboMelee2(
|
||||
(
|
||||
melee_constructor: (
|
||||
kind: Slash(
|
||||
damage: 7,
|
||||
damage: 9,
|
||||
poise: 5,
|
||||
knockback: 0,
|
||||
energy_regen: 0,
|
||||
|
@ -3,7 +3,7 @@ ComboMelee2(
|
||||
(
|
||||
melee_constructor: (
|
||||
kind: Slash(
|
||||
damage: 19,
|
||||
damage: 14,
|
||||
poise: 5,
|
||||
knockback: 0,
|
||||
energy_regen: 0,
|
||||
@ -15,11 +15,11 @@ ComboMelee2(
|
||||
buildup_duration: 0.2,
|
||||
swing_duration: 0.15,
|
||||
hit_timing: 0.5,
|
||||
recover_duration: 0.2,
|
||||
recover_duration: 0.35,
|
||||
ori_modifier: 0.6,
|
||||
),
|
||||
],
|
||||
energy_cost_per_strike: 17,
|
||||
energy_cost_per_strike: 10,
|
||||
meta: (
|
||||
requirements: (stance: Some(Sword(Crippling))),
|
||||
),
|
||||
|
@ -3,7 +3,7 @@ ComboMelee2(
|
||||
(
|
||||
melee_constructor: (
|
||||
kind: Slash(
|
||||
damage: 17,
|
||||
damage: 14,
|
||||
poise: 5,
|
||||
knockback: 0,
|
||||
energy_regen: 0,
|
||||
@ -13,7 +13,7 @@ ComboMelee2(
|
||||
damage_effect: Some(Buff((
|
||||
kind: Bleeding,
|
||||
dur_secs: 8.0,
|
||||
strength: DamageFraction(0.25),
|
||||
strength: DamageFraction(0.15),
|
||||
chance: 1.0,
|
||||
))),
|
||||
),
|
||||
|
@ -3,7 +3,7 @@ ComboMelee2(
|
||||
(
|
||||
melee_constructor: (
|
||||
kind: Slash(
|
||||
damage: 16,
|
||||
damage: 12,
|
||||
poise: 5,
|
||||
knockback: 0,
|
||||
energy_regen: 0,
|
||||
@ -12,8 +12,8 @@ ComboMelee2(
|
||||
angle: 45.0,
|
||||
damage_effect: Some(Buff((
|
||||
kind: Bleeding,
|
||||
dur_secs: 4.0,
|
||||
strength: DamageFraction(0.4),
|
||||
dur_secs: 5.0,
|
||||
strength: DamageFraction(0.25),
|
||||
chance: 1.0,
|
||||
))),
|
||||
),
|
||||
|
@ -3,7 +3,7 @@ ComboMelee2(
|
||||
(
|
||||
melee_constructor: (
|
||||
kind: Slash(
|
||||
damage: 16,
|
||||
damage: 12,
|
||||
poise: 5,
|
||||
knockback: 0,
|
||||
energy_regen: 0,
|
||||
@ -12,7 +12,7 @@ ComboMelee2(
|
||||
angle: 45.0,
|
||||
damage_effect: Some(Buff((
|
||||
kind: Crippled,
|
||||
dur_secs: 15.0,
|
||||
dur_secs: 10.0,
|
||||
strength: Value(0.25),
|
||||
chance: 1.0,
|
||||
))),
|
||||
|
@ -3,7 +3,7 @@ ComboMelee2(
|
||||
(
|
||||
melee_constructor: (
|
||||
kind: Stab(
|
||||
damage: 15,
|
||||
damage: 14,
|
||||
poise: 5,
|
||||
knockback: 0,
|
||||
energy_regen: 0,
|
||||
@ -13,7 +13,7 @@ ComboMelee2(
|
||||
damage_effect: Some(Buff((
|
||||
kind: Bleeding,
|
||||
dur_secs: 8.0,
|
||||
strength: DamageFraction(0.25),
|
||||
strength: DamageFraction(0.15),
|
||||
chance: 1.0,
|
||||
))),
|
||||
),
|
||||
|
@ -3,7 +3,7 @@ ComboMelee2(
|
||||
(
|
||||
melee_constructor: (
|
||||
kind: Slash(
|
||||
damage: 18,
|
||||
damage: 16,
|
||||
poise: 5,
|
||||
knockback: 0,
|
||||
energy_regen: 0,
|
||||
|
@ -3,7 +3,7 @@ ComboMelee2(
|
||||
(
|
||||
melee_constructor: (
|
||||
kind: Slash(
|
||||
damage: 6,
|
||||
damage: 5,
|
||||
poise: 5,
|
||||
knockback: 0,
|
||||
energy_regen: 0,
|
||||
@ -21,7 +21,7 @@ ComboMelee2(
|
||||
(
|
||||
melee_constructor: (
|
||||
kind: Slash(
|
||||
damage: 9,
|
||||
damage: 8,
|
||||
poise: 5,
|
||||
knockback: 0,
|
||||
energy_regen: 0,
|
||||
|
@ -3,12 +3,12 @@ ComboMelee2(
|
||||
(
|
||||
melee_constructor: (
|
||||
kind: Slash(
|
||||
damage: 10,
|
||||
poise: 5,
|
||||
damage: 0,
|
||||
poise: 0,
|
||||
knockback: 0,
|
||||
energy_regen: 0,
|
||||
),
|
||||
range: 6.0,
|
||||
range: 4.0,
|
||||
angle: 45.0,
|
||||
),
|
||||
buildup_duration: 0.05,
|
||||
@ -26,6 +26,5 @@ ComboMelee2(
|
||||
energy_cost_per_strike: 0,
|
||||
meta: (
|
||||
init_event: Some(EnterStance(Sword(Defensive))),
|
||||
capabilities: ("BLOCKS"),
|
||||
),
|
||||
)
|
||||
|
@ -3,7 +3,7 @@ ComboMelee2(
|
||||
(
|
||||
melee_constructor: (
|
||||
kind: Slash(
|
||||
damage: 20,
|
||||
damage: 15,
|
||||
poise: 5,
|
||||
knockback: 0,
|
||||
energy_regen: 0,
|
||||
|
@ -3,7 +3,7 @@ ComboMelee2(
|
||||
(
|
||||
melee_constructor: (
|
||||
kind: Slash(
|
||||
damage: 30,
|
||||
damage: 23,
|
||||
poise: 15,
|
||||
knockback: 0,
|
||||
energy_regen: 0,
|
||||
|
@ -3,7 +3,7 @@ ComboMelee2(
|
||||
(
|
||||
melee_constructor: (
|
||||
kind: Slash(
|
||||
damage: 20,
|
||||
damage: 17,
|
||||
poise: 15,
|
||||
knockback: 0,
|
||||
energy_regen: 0,
|
||||
|
@ -3,7 +3,7 @@ ComboMelee2(
|
||||
(
|
||||
melee_constructor: (
|
||||
kind: Slash(
|
||||
damage: 12,
|
||||
damage: 9,
|
||||
poise: 5,
|
||||
knockback: 0,
|
||||
energy_regen: 0,
|
||||
@ -21,7 +21,7 @@ ComboMelee2(
|
||||
(
|
||||
melee_constructor: (
|
||||
kind: Slash(
|
||||
damage: 18,
|
||||
damage: 14,
|
||||
poise: 5,
|
||||
knockback: 0,
|
||||
energy_regen: 0,
|
||||
|
@ -3,7 +3,7 @@ ComboMelee2(
|
||||
(
|
||||
melee_constructor: (
|
||||
kind: Slash(
|
||||
damage: 12,
|
||||
damage: 11,
|
||||
poise: 5,
|
||||
knockback: 0,
|
||||
energy_regen: 0,
|
||||
|
@ -3,7 +3,7 @@ ComboMelee2(
|
||||
(
|
||||
melee_constructor: (
|
||||
kind: Slash(
|
||||
damage: 25,
|
||||
damage: 19,
|
||||
poise: 15,
|
||||
knockback: 0,
|
||||
energy_regen: 0,
|
||||
|
@ -7,7 +7,7 @@ DiveMelee(
|
||||
recover_duration: 0.3,
|
||||
melee_constructor: (
|
||||
kind: Slash(
|
||||
damage: 30,
|
||||
damage: 25,
|
||||
poise: 40,
|
||||
knockback: 0,
|
||||
energy_regen: 0,
|
||||
|
@ -8,9 +8,8 @@ ComboMelee2(
|
||||
knockback: 0,
|
||||
energy_regen: 0,
|
||||
),
|
||||
range: 1.0,
|
||||
range: 1.5,
|
||||
angle: 45.0,
|
||||
damage_effect: Some(StunnedVulnerable(0.5)),
|
||||
),
|
||||
buildup_duration: 0.15,
|
||||
swing_duration: 0.1,
|
||||
|
@ -3,7 +3,7 @@ ComboMelee2(
|
||||
(
|
||||
melee_constructor: (
|
||||
kind: Stab(
|
||||
damage: 23,
|
||||
damage: 18,
|
||||
poise: 15,
|
||||
knockback: 0,
|
||||
energy_regen: 0,
|
||||
|
@ -3,23 +3,23 @@ ComboMelee2(
|
||||
(
|
||||
melee_constructor: (
|
||||
kind: Slash(
|
||||
damage: 27,
|
||||
damage: 21,
|
||||
poise: 30,
|
||||
knockback: 0,
|
||||
energy_regen: 0,
|
||||
),
|
||||
range: 4.0,
|
||||
angle: 90.0,
|
||||
damage_effect: Some(StunnedVulnerable(0.5)),
|
||||
damage_effect: Some(StunnedVulnerable(0.8)),
|
||||
),
|
||||
buildup_duration: 0.2,
|
||||
buildup_duration: 0.3,
|
||||
swing_duration: 0.2,
|
||||
hit_timing: 0.5,
|
||||
recover_duration: 0.3,
|
||||
ori_modifier: 0.6,
|
||||
),
|
||||
],
|
||||
energy_cost_per_strike: 5,
|
||||
energy_cost_per_strike: 13,
|
||||
meta: (
|
||||
init_event: Some(EnterStance(Sword(Heavy))),
|
||||
),
|
||||
|
@ -157,7 +157,7 @@ impl Attack {
|
||||
let damage_reduction = (1.0 - attacker_penetration) * raw_damage_reduction;
|
||||
let block_reduction =
|
||||
if let (Some(char_state), Some(ori)) = (target.char_state, target.ori) {
|
||||
if ori.look_vec().angle_between(-*dir) < char_state.block_angle() {
|
||||
if ori.look_vec().angle_between(-dir.with_z(0.0)) < char_state.block_angle() {
|
||||
if char_state.is_parry(source) {
|
||||
emit_outcome(Outcome::Block {
|
||||
parry: true,
|
||||
@ -391,7 +391,6 @@ impl Attack {
|
||||
time,
|
||||
attacker.map(|a| a.uid),
|
||||
target.stats,
|
||||
target.health,
|
||||
applied_damage,
|
||||
strength_modifier,
|
||||
)),
|
||||
@ -611,7 +610,6 @@ impl Attack {
|
||||
time,
|
||||
attacker.map(|a| a.uid),
|
||||
target.stats,
|
||||
target.health,
|
||||
accumulated_damage,
|
||||
strength_modifier,
|
||||
)),
|
||||
@ -1179,7 +1177,6 @@ impl CombatBuff {
|
||||
time: Time,
|
||||
uid: Option<Uid>,
|
||||
tgt_stats: Option<&Stats>,
|
||||
tgt_health: Option<&Health>,
|
||||
damage: f32,
|
||||
strength_modifier: f32,
|
||||
) -> Buff {
|
||||
@ -1199,7 +1196,6 @@ impl CombatBuff {
|
||||
source,
|
||||
time,
|
||||
tgt_stats,
|
||||
tgt_health,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
@ -4,7 +4,7 @@ use crate::{
|
||||
AttackEffect, CombatBuff, CombatBuffStrength, CombatEffect, CombatRequirement,
|
||||
DamagedEffect,
|
||||
},
|
||||
comp::{aura::AuraKey, Health, Stats},
|
||||
comp::{aura::AuraKey, Stats},
|
||||
resources::{Secs, Time},
|
||||
uid::Uid,
|
||||
};
|
||||
@ -70,12 +70,12 @@ pub enum BuffKind {
|
||||
/// 50% increase, 1.0 is a 100% increase.
|
||||
Hastened,
|
||||
/// Increases resistance to incoming poise, and poise damage dealt as health
|
||||
/// is lost from the time the buff activated.
|
||||
/// is lost.
|
||||
/// Strength scales the resistance non-linearly. 0.5 provides 50%, 1.0
|
||||
/// provides 67%.
|
||||
/// Strength scales the poise damage increase linearly, a strength of 1.0
|
||||
/// and n health less from activation will cause poise damage to increase by
|
||||
/// n%.
|
||||
/// and n health less from maximum health will cause poise damage to
|
||||
/// increase by n%.
|
||||
Fortitude,
|
||||
/// Increases both attack damage and vulnerability to damage.
|
||||
/// Damage increases linearly with strength, 1.0 is a 100% increase.
|
||||
@ -268,12 +268,7 @@ impl BuffKind {
|
||||
/// only the strongest.
|
||||
pub fn stacks(self) -> bool { matches!(self, BuffKind::PotionSickness) }
|
||||
|
||||
pub fn effects(
|
||||
&self,
|
||||
data: &BuffData,
|
||||
stats: Option<&Stats>,
|
||||
health: Option<&Health>,
|
||||
) -> Vec<BuffEffect> {
|
||||
pub fn effects(&self, data: &BuffData, stats: Option<&Stats>) -> Vec<BuffEffect> {
|
||||
// Normalized nonlinear scaling
|
||||
let nn_scaling = |a| a / (a + 0.5);
|
||||
let instance = rand::random();
|
||||
@ -392,10 +387,7 @@ impl BuffKind {
|
||||
],
|
||||
BuffKind::Fortitude => vec![
|
||||
BuffEffect::PoiseReduction(nn_scaling(data.strength)),
|
||||
BuffEffect::PoiseDamageFromLostHealth {
|
||||
initial_health: health.map_or(0.0, |h| h.current()),
|
||||
strength: data.strength,
|
||||
},
|
||||
BuffEffect::PoiseDamageFromLostHealth(data.strength),
|
||||
],
|
||||
BuffKind::Parried => vec![BuffEffect::AttackSpeed(0.5)],
|
||||
//TODO: Handle potion sickness in a more general way.
|
||||
@ -601,10 +593,7 @@ pub enum BuffEffect {
|
||||
/// Reduces amount of speed increase by consumables
|
||||
MoveSpeedReduction(f32),
|
||||
/// Increases poise damage dealt when health is lost
|
||||
PoiseDamageFromLostHealth {
|
||||
initial_health: f32,
|
||||
strength: f32,
|
||||
},
|
||||
PoiseDamageFromLostHealth(f32),
|
||||
/// Modifier to the amount of damage dealt with attacks
|
||||
AttackDamage(f32),
|
||||
/// Overrides the precision multiplier applied to an attack
|
||||
@ -679,9 +668,8 @@ impl Buff {
|
||||
source: BuffSource,
|
||||
time: Time,
|
||||
stats: Option<&Stats>,
|
||||
health: Option<&Health>,
|
||||
) -> Self {
|
||||
let effects = kind.effects(&data, stats, health);
|
||||
let effects = kind.effects(&data, stats);
|
||||
let cat_ids = kind.extend_cat_ids(cat_ids);
|
||||
let start_time = Time(time.0 + data.delay.map_or(0.0, |delay| delay.0));
|
||||
let end_time = if cat_ids
|
||||
@ -941,7 +929,6 @@ pub mod tests {
|
||||
BuffSource::Unknown,
|
||||
time,
|
||||
None,
|
||||
None,
|
||||
)
|
||||
}
|
||||
|
||||
|
@ -127,7 +127,6 @@ impl CharacterBehavior for Data {
|
||||
BuffSource::Character { by: *data.uid },
|
||||
*data.time,
|
||||
Some(data.stats),
|
||||
data.health,
|
||||
);
|
||||
output_events.emit_server(ServerEvent::Buff {
|
||||
entity: data.entity,
|
||||
|
@ -232,7 +232,6 @@ fn activate_aura(
|
||||
source,
|
||||
*read_data.time,
|
||||
stats,
|
||||
Some(health),
|
||||
)),
|
||||
});
|
||||
}
|
||||
|
@ -153,7 +153,6 @@ impl<'a> System<'a> for Sys {
|
||||
BuffSource::World,
|
||||
*read_data.time,
|
||||
Some(&stat),
|
||||
Some(health),
|
||||
)),
|
||||
});
|
||||
}
|
||||
@ -171,7 +170,6 @@ impl<'a> System<'a> for Sys {
|
||||
BuffSource::World,
|
||||
*read_data.time,
|
||||
Some(&stat),
|
||||
Some(health),
|
||||
)),
|
||||
});
|
||||
}
|
||||
@ -202,7 +200,6 @@ impl<'a> System<'a> for Sys {
|
||||
BuffSource::World,
|
||||
*read_data.time,
|
||||
Some(&stat),
|
||||
Some(health),
|
||||
)),
|
||||
});
|
||||
}
|
||||
@ -221,7 +218,6 @@ impl<'a> System<'a> for Sys {
|
||||
BuffSource::World,
|
||||
*read_data.time,
|
||||
Some(&stat),
|
||||
Some(health),
|
||||
)),
|
||||
});
|
||||
}
|
||||
@ -239,7 +235,6 @@ impl<'a> System<'a> for Sys {
|
||||
BuffSource::World,
|
||||
*read_data.time,
|
||||
Some(&stat),
|
||||
Some(health),
|
||||
)),
|
||||
});
|
||||
}
|
||||
@ -257,7 +252,6 @@ impl<'a> System<'a> for Sys {
|
||||
BuffSource::World,
|
||||
*read_data.time,
|
||||
Some(&stat),
|
||||
Some(health),
|
||||
)),
|
||||
});
|
||||
// When standing on IceSpike also apply Frozen
|
||||
@ -270,7 +264,6 @@ impl<'a> System<'a> for Sys {
|
||||
BuffSource::World,
|
||||
*read_data.time,
|
||||
Some(&stat),
|
||||
Some(health),
|
||||
)),
|
||||
});
|
||||
}
|
||||
@ -288,7 +281,6 @@ impl<'a> System<'a> for Sys {
|
||||
BuffSource::World,
|
||||
*read_data.time,
|
||||
Some(&stat),
|
||||
Some(health),
|
||||
)),
|
||||
});
|
||||
}
|
||||
@ -310,7 +302,6 @@ impl<'a> System<'a> for Sys {
|
||||
BuffSource::World,
|
||||
*read_data.time,
|
||||
Some(&stat),
|
||||
Some(health),
|
||||
)),
|
||||
});
|
||||
} else if matches!(
|
||||
@ -387,7 +378,6 @@ impl<'a> System<'a> for Sys {
|
||||
buff.source,
|
||||
*read_data.time,
|
||||
Some(&stat),
|
||||
Some(health),
|
||||
)),
|
||||
});
|
||||
}
|
||||
@ -701,11 +691,8 @@ fn execute_effect(
|
||||
BuffEffect::MoveSpeedReduction(red) => {
|
||||
stat.move_speed_multiplier *= 1.0 - *red;
|
||||
},
|
||||
BuffEffect::PoiseDamageFromLostHealth {
|
||||
initial_health,
|
||||
strength,
|
||||
} => {
|
||||
let lost_health = (*initial_health - health.current()).max(0.0);
|
||||
BuffEffect::PoiseDamageFromLostHealth(strength) => {
|
||||
let lost_health = health.maximum() - health.current();
|
||||
stat.poise_damage_modifier *= lost_health / 100.0 * *strength;
|
||||
},
|
||||
BuffEffect::AttackDamage(dam) => {
|
||||
|
@ -713,7 +713,7 @@ impl<'a> AgentData<'a> {
|
||||
},
|
||||
Effect::Buff(BuffEffect { kind, data, .. }) => {
|
||||
if let Some(duration) = data.duration {
|
||||
for effect in kind.effects(data, self.stats, self.health) {
|
||||
for effect in kind.effects(data, self.stats) {
|
||||
match effect {
|
||||
comp::BuffEffect::HealthChangeOverTime { rate, kind, .. } => {
|
||||
let amount = match kind {
|
||||
|
@ -4287,7 +4287,6 @@ fn cast_buff(buffkind: BuffKind, data: BuffData, server: &mut Server, target: Ec
|
||||
let ecs = &server.state.ecs();
|
||||
let mut buffs_all = ecs.write_storage::<comp::Buffs>();
|
||||
let stats = ecs.read_storage::<comp::Stats>();
|
||||
let healths = ecs.read_storage::<comp::Health>();
|
||||
let time = ecs.read_resource::<Time>();
|
||||
if let Some(mut buffs) = buffs_all.get_mut(target) {
|
||||
buffs.insert(
|
||||
@ -4298,7 +4297,6 @@ fn cast_buff(buffkind: BuffKind, data: BuffData, server: &mut Server, target: Ec
|
||||
BuffSource::Command,
|
||||
*time,
|
||||
stats.get(target),
|
||||
healths.get(target),
|
||||
),
|
||||
*time,
|
||||
);
|
||||
|
@ -1417,7 +1417,6 @@ pub fn handle_parry_hook(
|
||||
};
|
||||
let time = ecs.read_resource::<Time>();
|
||||
let stats = ecs.read_storage::<comp::Stats>();
|
||||
let healths = ecs.read_storage::<comp::Health>();
|
||||
let buff = buff::Buff::new(
|
||||
BuffKind::Parried,
|
||||
data,
|
||||
@ -1425,7 +1424,6 @@ pub fn handle_parry_hook(
|
||||
source,
|
||||
*time,
|
||||
stats.get(attacker),
|
||||
healths.get(attacker),
|
||||
);
|
||||
server_eventbus.emit_now(ServerEvent::Buff {
|
||||
entity: attacker,
|
||||
|
@ -253,7 +253,6 @@ impl StateExt for State {
|
||||
Effect::Buff(buff) => {
|
||||
let time = self.ecs().read_resource::<Time>();
|
||||
let stats = self.ecs().read_storage::<comp::Stats>();
|
||||
let healths = self.ecs().read_storage::<comp::Health>();
|
||||
self.ecs()
|
||||
.write_storage::<comp::Buffs>()
|
||||
.get_mut(entity)
|
||||
@ -266,7 +265,6 @@ impl StateExt for State {
|
||||
comp::BuffSource::Item,
|
||||
*time,
|
||||
stats.get(entity),
|
||||
healths.get(entity),
|
||||
),
|
||||
*time,
|
||||
)
|
||||
|
Loading…
Reference in New Issue
Block a user