Modified how most abilites that could scale were scaled.

This commit is contained in:
Sam 2020-12-07 22:00:24 -06:00
parent 96b4c67419
commit 490915d384
33 changed files with 106 additions and 139 deletions

View File

@ -3,7 +3,6 @@ ComboMelee(
(
stage: 1,
base_damage: 90,
max_damage: 110,
damage_increase: 10,
knockback: 8.0,
range: 3.5,
@ -16,7 +15,6 @@ ComboMelee(
(
stage: 2,
base_damage: 130,
max_damage: 160,
damage_increase: 15,
knockback: 12.0,
range: 3.5,
@ -32,5 +30,6 @@ ComboMelee(
energy_increase: 30,
speed_increase: 0.075,
max_speed_increase: 1.6,
scales_from_combo: 2,
is_interruptible: false,
)

View File

@ -1,10 +1,10 @@
ChargedRanged(
energy_cost: 1,
energy_drain: 300,
initial_damage: 50,
max_damage: 250,
initial_damage: 10,
scaled_damage: 240,
initial_knockback: 10.0,
max_knockback: 20.0,
scaled_knockback: 10.0,
speed: 1.0,
buildup_duration: 100,
charge_duration: 1500,
@ -13,5 +13,5 @@ ChargedRanged(
projectile_light: None,
projectile_gravity: Some(Gravity(0.2)),
initial_projectile_speed: 100.0,
max_projectile_speed: 500.0,
scaled_projectile_speed: 400.0,
)

View File

@ -2,9 +2,9 @@ ChargedMelee(
energy_cost: 1,
energy_drain: 300,
initial_damage: 10,
max_damage: 170,
scaled_damage: 160,
initial_knockback: 10.0,
max_knockback: 60.0,
scaled_knockback: 50.0,
range: 3.5,
max_angle: 30.0,
speed: 1.0,

View File

@ -2,7 +2,6 @@ ComboMelee(
stage_data: [(
stage: 1,
base_damage: 130,
max_damage: 150,
damage_increase: 10,
knockback: 0.0,
range: 4.5,
@ -17,5 +16,6 @@ ComboMelee(
energy_increase: 50,
speed_increase: 0.05,
max_speed_increase: 1.4,
scales_from_combo: 2,
is_interruptible: false,
)

View File

@ -1,9 +1,9 @@
DashMelee(
energy_cost: 100,
base_damage: 80,
max_damage: 240,
scaled_damage: 160,
base_knockback: 8.0,
max_knockback: 15.0,
scaled_knockback: 7.0,
range: 5.0,
angle: 45.0,
energy_drain: 600,

View File

@ -3,7 +3,6 @@ ComboMelee(
(
stage: 1,
base_damage: 100,
max_damage: 120,
damage_increase: 10,
knockback: 10.0,
range: 4.0,
@ -16,7 +15,6 @@ ComboMelee(
(
stage: 2,
base_damage: 80,
max_damage: 110,
damage_increase: 15,
knockback: 12.0,
range: 3.5,
@ -29,7 +27,6 @@ ComboMelee(
(
stage: 3,
base_damage: 130,
max_damage: 170,
damage_increase: 20,
knockback: 14.0,
range: 6.0,
@ -45,5 +42,6 @@ ComboMelee(
energy_increase: 25,
speed_increase: 0.1,
max_speed_increase: 1.8,
scales_from_combo: 2,
is_interruptible: true,
)

View File

@ -3,7 +3,6 @@ ComboMelee(
(
stage: 1,
base_damage: 100,
max_damage: 100,
damage_increase: 0,
knockback: 5.0,
range: 3.5,
@ -19,5 +18,6 @@ ComboMelee(
energy_increase: 0,
speed_increase: 0.0,
max_speed_increase: 1.0,
scales_from_combo: 0,
is_interruptible: false,
)

View File

@ -3,7 +3,6 @@ ComboMelee(
(
stage: 1,
base_damage: 120,
max_damage: 120,
damage_increase: 0,
knockback: 10.0,
range: 3.5,
@ -16,7 +15,6 @@ ComboMelee(
(
stage: 2,
base_damage: 80,
max_damage: 80,
damage_increase: 0,
knockback: 10.0,
range: 3.5,
@ -29,7 +27,6 @@ ComboMelee(
(
stage: 3,
base_damage: 130,
max_damage: 130,
damage_increase: 0,
knockback: 10.0,
range: 3.5,
@ -45,5 +42,6 @@ ComboMelee(
energy_increase: 0,
speed_increase: 0.0,
max_speed_increase: 1.0,
scales_from_combo: 0,
is_interruptible: false,
)

View File

@ -1,9 +1,9 @@
DashMelee(
energy_cost: 0,
base_damage: 150,
max_damage: 260,
scaled_damage: 110,
base_knockback: 8.0,
max_knockback: 25.0,
scaled_knockback: 17.0,
range: 5.0,
angle: 45.0,
energy_drain: 0,

View File

@ -3,7 +3,6 @@ ComboMelee(
(
stage: 1,
base_damage: 100,
max_damage: 100,
damage_increase: 0,
knockback: 10.0,
range: 4.5,
@ -16,7 +15,6 @@ ComboMelee(
(
stage: 2,
base_damage: 80,
max_damage: 80,
damage_increase: 0,
knockback: 10.0,
range: 3.5,
@ -29,7 +27,6 @@ ComboMelee(
(
stage: 3,
base_damage: 130,
max_damage: 130,
damage_increase: 0,
knockback: 10.0,
range: 3.5,
@ -45,5 +42,6 @@ ComboMelee(
energy_increase: 0,
speed_increase: 0.0,
max_speed_increase: 1.0,
scales_from_combo: 0,
is_interruptible: false,
)

View File

@ -1,9 +1,9 @@
DashMelee(
energy_cost: 0,
base_damage: 30,
max_damage: 40,
scaled_damage: 10,
base_knockback: 8.0,
max_knockback: 15.0,
scaled_knockback: 7.0,
range: 2.0,
angle: 45.0,
energy_drain: 0,

View File

@ -3,7 +3,6 @@ ComboMelee(
(
stage: 1,
base_damage: 100,
max_damage: 100,
damage_increase: 0,
knockback: 2.0,
range: 3.5,
@ -16,7 +15,6 @@ ComboMelee(
(
stage: 2,
base_damage: 130,
max_damage: 130,
damage_increase: 0,
knockback: 2.0,
range: 3.5,
@ -29,7 +27,6 @@ ComboMelee(
(
stage: 3,
base_damage: 130,
max_damage: 130,
damage_increase: 0,
knockback: 2.0,
range: 3.5,
@ -42,7 +39,6 @@ ComboMelee(
(
stage: 4,
base_damage: 130,
max_damage: 130,
damage_increase: 0,
knockback: 8.0,
range: 3.5,
@ -58,5 +54,6 @@ ComboMelee(
energy_increase: 0,
speed_increase: 0.0,
max_speed_increase: 1.0,
scales_from_combo: 0,
is_interruptible: false,
)

View File

@ -3,7 +3,6 @@ ComboMelee(
(
stage: 1,
base_damage: 60,
max_damage: 60,
damage_increase: 0,
knockback: 5.0,
range: 3.5,
@ -19,5 +18,6 @@ ComboMelee(
energy_increase: 0,
speed_increase: 0.0,
max_speed_increase: 1.0,
scales_from_combo: 0,
is_interruptible: false,
)

View File

@ -2,9 +2,9 @@ ChargedMelee(
energy_cost: 0,
energy_drain: 0,
initial_damage: 160,
max_damage: 200,
scaled_damage: 40,
initial_knockback: 10.0,
max_knockback: 30.0,
scaled_knockback: 20.0,
range: 6.0,
max_angle: 90.0,
speed: 1.0,

View File

@ -3,7 +3,6 @@ ComboMelee(
(
stage: 1,
base_damage: 100,
max_damage: 100,
damage_increase: 0,
knockback: 10.0,
range: 3.5,
@ -16,7 +15,6 @@ ComboMelee(
(
stage: 2,
base_damage: 120,
max_damage: 120,
damage_increase: 0,
knockback: 10.0,
range: 3.5,
@ -29,7 +27,6 @@ ComboMelee(
(
stage: 3,
base_damage: 130,
max_damage: 130,
damage_increase: 0,
knockback: 10.0,
range: 3.5,
@ -45,5 +42,6 @@ ComboMelee(
energy_increase: 0,
speed_increase: 0.0,
max_speed_increase: 1.0,
scales_from_combo: 0,
is_interruptible: false,
)

View File

@ -3,7 +3,6 @@ ComboMelee(
(
stage: 1,
base_damage: 120,
max_damage: 120,
damage_increase: 0,
knockback: 5.0,
range: 3.5,
@ -19,5 +18,6 @@ ComboMelee(
energy_increase: 0,
speed_increase: 0.0,
max_speed_increase: 1.0,
scales_from_combo: 0,
is_interruptible: false,
)

View File

@ -3,7 +3,6 @@ ComboMelee(
(
stage: 1,
base_damage: 120,
max_damage: 120,
damage_increase: 0,
knockback: 10.0,
range: 3.5,
@ -16,7 +15,6 @@ ComboMelee(
(
stage: 2,
base_damage: 120,
max_damage: 120,
damage_increase: 0,
knockback: 10.0,
range: 3.5,
@ -29,7 +27,6 @@ ComboMelee(
(
stage: 3,
base_damage: 120,
max_damage: 120,
damage_increase: 0,
knockback: 10.0,
range: 3.5,
@ -45,5 +42,6 @@ ComboMelee(
energy_increase: 0,
speed_increase: 0.0,
max_speed_increase: 1.0,
scales_from_combo: 0,
is_interruptible: false,
)

View File

@ -1,9 +1,9 @@
DashMelee(
energy_cost: 0,
base_damage: 150,
max_damage: 190,
scaled_damage: 40,
base_knockback: 8.0,
max_knockback: 25.0,
scaled_knockback: 17.0,
range: 4.0,
angle: 45.0,
energy_drain: 0,

View File

@ -3,7 +3,6 @@ ComboMelee(
(
stage: 1,
base_damage: 100,
max_damage: 100,
damage_increase: 0,
knockback: 10.0,
range: 3.5,
@ -16,7 +15,6 @@ ComboMelee(
(
stage: 2,
base_damage: 80,
max_damage: 80,
damage_increase: 0,
knockback: 10.0,
range: 3.5,
@ -32,5 +30,6 @@ ComboMelee(
energy_increase: 0,
speed_increase: 0.0,
max_speed_increase: 1.0,
scales_from_combo: 0,
is_interruptible: false,
)

View File

@ -3,7 +3,6 @@ ComboMelee(
(
stage: 1,
base_damage: 100,
max_damage: 100,
damage_increase: 0,
knockback: 8.0,
range: 3.5,
@ -16,7 +15,6 @@ ComboMelee(
(
stage: 2,
base_damage: 80,
max_damage: 80,
damage_increase: 0,
knockback: 8.0,
range: 3.5,
@ -32,5 +30,6 @@ ComboMelee(
energy_increase: 0,
speed_increase: 0.0,
max_speed_increase: 1.0,
scales_from_combo: 0,
is_interruptible: false,
)

View File

@ -1,9 +1,9 @@
DashMelee(
energy_cost: 0,
base_damage: 130,
max_damage: 150,
scaled_damage: 20,
base_knockback: 8.0,
max_knockback: 15.0,
scaled_knockback: 7.0,
range: 2.0,
angle: 45.0,
energy_drain: 0,

View File

@ -3,7 +3,6 @@ ComboMelee(
(
stage: 1,
base_damage: 150,
max_damage: 150,
damage_increase: 0,
knockback: 5.0,
range: 3.5,
@ -16,7 +15,6 @@ ComboMelee(
(
stage: 2,
base_damage: 150,
max_damage: 150,
damage_increase: 0,
knockback: 5.0,
range: 3.5,
@ -29,7 +27,6 @@ ComboMelee(
(
stage: 3,
base_damage: 150,
max_damage: 150,
damage_increase: 0,
knockback: 5.0,
range: 3.5,
@ -45,5 +42,6 @@ ComboMelee(
energy_increase: 0,
speed_increase: 0.0,
max_speed_increase: 1.0,
scales_from_combo: 0,
is_interruptible: false,
)

View File

@ -3,7 +3,6 @@ ComboMelee(
(
stage: 1,
base_damage: 30,
max_damage: 30,
damage_increase: 0,
knockback: 5.0,
range: 3.5,
@ -19,5 +18,6 @@ ComboMelee(
energy_increase: 0,
speed_increase: 0.0,
max_speed_increase: 1.0,
scales_from_combo: 0,
is_interruptible: false,
)

View File

@ -3,7 +3,6 @@ ComboMelee(
(
stage: 1,
base_damage: 150,
max_damage: 150,
damage_increase: 0,
knockback: 5.0,
range: 7.5,
@ -19,5 +18,6 @@ ComboMelee(
energy_increase: 0,
speed_increase: 0.0,
max_speed_increase: 1.0,
scales_from_combo: 0,
is_interruptible: false,
)

View File

@ -3,7 +3,6 @@ ComboMelee(
(
stage: 1,
base_damage: 170,
max_damage: 170,
damage_increase: 0,
knockback: 10.0,
range: 7.5,
@ -16,7 +15,6 @@ ComboMelee(
(
stage: 2,
base_damage: 190,
max_damage: 190,
damage_increase: 0,
knockback: 10.0,
range: 5.5,
@ -29,7 +27,6 @@ ComboMelee(
(
stage: 3,
base_damage: 230,
max_damage: 230,
damage_increase: 0,
knockback: 10.0,
range: 5.5,
@ -45,5 +42,6 @@ ComboMelee(
energy_increase: 0,
speed_increase: 0.0,
max_speed_increase: 1.0,
scales_from_combo: 0,
is_interruptible: false,
)

View File

@ -3,7 +3,6 @@ ComboMelee(
(
stage: 1,
base_damage: 150,
max_damage: 150,
damage_increase: 0,
knockback: 5.0,
range: 5.5,
@ -19,5 +18,6 @@ ComboMelee(
energy_increase: 0,
speed_increase: 0.0,
max_speed_increase: 1.0,
scales_from_combo: 0,
is_interruptible: false,
)

View File

@ -3,7 +3,6 @@ ComboMelee(
(
stage: 1,
base_damage: 170,
max_damage: 170,
damage_increase: 0,
knockback: 10.0,
range: 4.5,
@ -16,7 +15,6 @@ ComboMelee(
(
stage: 2,
base_damage: 190,
max_damage: 190,
damage_increase: 0,
knockback: 10.0,
range: 4.0,
@ -29,7 +27,6 @@ ComboMelee(
(
stage: 3,
base_damage: 230,
max_damage: 230,
damage_increase: 0,
knockback: 10.0,
range: 4.0,
@ -45,5 +42,6 @@ ComboMelee(
energy_increase: 0,
speed_increase: 0.0,
max_speed_increase: 1.0,
scales_from_combo: 0,
is_interruptible: false,
)

View File

@ -49,7 +49,7 @@ impl From<&CharacterState> for CharacterAbilityType {
CharacterState::SpinMelee(data) => Self::SpinMelee(data.stage_section),
CharacterState::ChargedMelee(data) => Self::ChargedMelee(data.stage_section),
CharacterState::ChargedRanged(_) => Self::ChargedRanged,
CharacterState::Shockwave(_) => Self::ChargedRanged,
CharacterState::Shockwave(_) => Self::Shockwave,
CharacterState::BasicBeam(_) => Self::BasicBeam,
CharacterState::RepeaterRanged(_) => Self::RepeaterRanged,
_ => Self::BasicMelee,
@ -101,9 +101,9 @@ pub enum CharacterAbility {
DashMelee {
energy_cost: u32,
base_damage: u32,
max_damage: u32,
scaled_damage: u32,
base_knockback: f32,
max_knockback: f32,
scaled_knockback: f32,
range: f32,
angle: f32,
energy_drain: u32,
@ -130,6 +130,7 @@ pub enum CharacterAbility {
energy_increase: u32,
speed_increase: f32,
max_speed_increase: f32,
scales_from_combo: u32,
is_interruptible: bool,
},
LeapMelee {
@ -163,9 +164,9 @@ pub enum CharacterAbility {
energy_cost: u32,
energy_drain: u32,
initial_damage: u32,
max_damage: u32,
scaled_damage: u32,
initial_knockback: f32,
max_knockback: f32,
scaled_knockback: f32,
range: f32,
max_angle: f32,
speed: f32,
@ -178,9 +179,9 @@ pub enum CharacterAbility {
energy_cost: u32,
energy_drain: u32,
initial_damage: u32,
max_damage: u32,
scaled_damage: u32,
initial_knockback: f32,
max_knockback: f32,
scaled_knockback: f32,
speed: f32,
buildup_duration: u64,
charge_duration: u64,
@ -189,7 +190,7 @@ pub enum CharacterAbility {
projectile_light: Option<LightEmitter>,
projectile_gravity: Option<Gravity>,
initial_projectile_speed: f32,
max_projectile_speed: f32,
scaled_projectile_speed: f32,
},
Shockwave {
energy_cost: u32,
@ -362,14 +363,14 @@ impl CharacterAbility {
},
DashMelee {
ref mut base_damage,
ref mut max_damage,
ref mut scaled_damage,
ref mut buildup_duration,
ref mut swing_duration,
ref mut recover_duration,
..
} => {
*base_damage = (*base_damage as f32 * power) as u32;
*max_damage = (*max_damage as f32 * power) as u32;
*scaled_damage = (*scaled_damage as f32 * power) as u32;
*buildup_duration = (*buildup_duration as f32 / speed) as u64;
*swing_duration = (*swing_duration as f32 / speed) as u64;
*recover_duration = (*recover_duration as f32 / speed) as u64;
@ -421,7 +422,7 @@ impl CharacterAbility {
},
ChargedMelee {
ref mut initial_damage,
ref mut max_damage,
ref mut scaled_damage,
speed: ref mut ability_speed,
ref mut charge_duration,
ref mut swing_duration,
@ -429,7 +430,7 @@ impl CharacterAbility {
..
} => {
*initial_damage = (*initial_damage as f32 * power) as u32;
*max_damage = (*max_damage as f32 * power) as u32;
*scaled_damage = (*scaled_damage as f32 * power) as u32;
*ability_speed *= speed;
*charge_duration = (*charge_duration as f32 / speed) as u64;
*swing_duration = (*swing_duration as f32 / speed) as u64;
@ -437,7 +438,7 @@ impl CharacterAbility {
},
ChargedRanged {
ref mut initial_damage,
ref mut max_damage,
ref mut scaled_damage,
speed: ref mut ability_speed,
ref mut buildup_duration,
ref mut charge_duration,
@ -445,7 +446,7 @@ impl CharacterAbility {
..
} => {
*initial_damage = (*initial_damage as f32 * power) as u32;
*max_damage = (*max_damage as f32 * power) as u32;
*scaled_damage = (*scaled_damage as f32 * power) as u32;
*ability_speed *= speed;
*buildup_duration = (*buildup_duration as f32 / speed) as u64;
*charge_duration = (*charge_duration as f32 / speed) as u64;
@ -654,9 +655,9 @@ impl From<(&CharacterAbility, AbilityKey)> for CharacterState {
CharacterAbility::DashMelee {
energy_cost: _,
base_damage,
max_damage,
scaled_damage,
base_knockback,
max_knockback,
scaled_knockback,
range,
angle,
energy_drain,
@ -670,9 +671,9 @@ impl From<(&CharacterAbility, AbilityKey)> for CharacterState {
} => CharacterState::DashMelee(dash_melee::Data {
static_data: dash_melee::StaticData {
base_damage: *base_damage,
max_damage: *max_damage,
scaled_damage: *scaled_damage,
base_knockback: *base_knockback,
max_knockback: *max_knockback,
scaled_knockback: *scaled_knockback,
range: *range,
angle: *angle,
energy_drain: *energy_drain,
@ -718,6 +719,7 @@ impl From<(&CharacterAbility, AbilityKey)> for CharacterState {
energy_increase,
speed_increase,
max_speed_increase,
scales_from_combo,
is_interruptible,
} => CharacterState::ComboMelee(combo_melee::Data {
static_data: combo_melee::StaticData {
@ -728,6 +730,7 @@ impl From<(&CharacterAbility, AbilityKey)> for CharacterState {
energy_increase: *energy_increase,
speed_increase: 1.0 - *speed_increase,
max_speed_increase: *max_speed_increase - 1.0,
scales_from_combo: *scales_from_combo,
is_interruptible: *is_interruptible,
ability_key: key,
},
@ -805,9 +808,9 @@ impl From<(&CharacterAbility, AbilityKey)> for CharacterState {
energy_cost,
energy_drain,
initial_damage,
max_damage,
scaled_damage,
initial_knockback,
max_knockback,
scaled_knockback,
speed,
charge_duration,
swing_duration,
@ -820,9 +823,9 @@ impl From<(&CharacterAbility, AbilityKey)> for CharacterState {
energy_cost: *energy_cost,
energy_drain: *energy_drain,
initial_damage: *initial_damage,
max_damage: *max_damage,
scaled_damage: *scaled_damage,
initial_knockback: *initial_knockback,
max_knockback: *max_knockback,
scaled_knockback: *scaled_knockback,
speed: *speed,
range: *range,
max_angle: *max_angle,
@ -841,9 +844,9 @@ impl From<(&CharacterAbility, AbilityKey)> for CharacterState {
energy_cost: _,
energy_drain,
initial_damage,
max_damage,
scaled_damage,
initial_knockback,
max_knockback,
scaled_knockback,
speed,
buildup_duration,
charge_duration,
@ -852,7 +855,7 @@ impl From<(&CharacterAbility, AbilityKey)> for CharacterState {
projectile_light,
projectile_gravity,
initial_projectile_speed,
max_projectile_speed,
scaled_projectile_speed,
} => CharacterState::ChargedRanged(charged_ranged::Data {
static_data: charged_ranged::StaticData {
buildup_duration: Duration::from_millis(*buildup_duration),
@ -860,15 +863,15 @@ impl From<(&CharacterAbility, AbilityKey)> for CharacterState {
recover_duration: Duration::from_millis(*recover_duration),
energy_drain: *energy_drain,
initial_damage: *initial_damage,
max_damage: *max_damage,
scaled_damage: *scaled_damage,
speed: *speed,
initial_knockback: *initial_knockback,
max_knockback: *max_knockback,
scaled_knockback: *scaled_knockback,
projectile_body: *projectile_body,
projectile_light: *projectile_light,
projectile_gravity: *projectile_gravity,
initial_projectile_speed: *initial_projectile_speed,
max_projectile_speed: *max_projectile_speed,
scaled_projectile_speed: *scaled_projectile_speed,
ability_key: key,
},
timer: Duration::default(),

View File

@ -18,12 +18,12 @@ pub struct StaticData {
pub energy_cost: u32,
/// How much damage is dealt with no charge
pub initial_damage: u32,
/// How much damage is dealt with max charge
pub max_damage: u32,
/// How much the damage is scaled by
pub scaled_damage: u32,
/// How much knockback there is with no charge
pub initial_knockback: f32,
/// How much knockback there is at max charge
pub max_knockback: f32,
/// How much the knockback is scaled by
pub scaled_knockback: f32,
/// Max range
pub range: f32,
/// Max angle (45.0 will give you a 90.0 angle window)
@ -148,17 +148,13 @@ impl CharacterBehavior for Data {
exhausted: true,
..*self
});
let mut damage = Damage {
let damage = Damage {
source: DamageSource::Melee,
value: self.static_data.max_damage as f32,
value: self.static_data.initial_damage as f32
+ self.charge_amount * self.static_data.scaled_damage as f32,
};
damage.interpolate_damage(
self.charge_amount,
self.static_data.initial_damage as f32,
);
let knockback = self.static_data.initial_knockback
+ (self.static_data.max_knockback - self.static_data.initial_knockback)
* self.charge_amount;
+ self.charge_amount * self.static_data.scaled_knockback;
// Hit attempt
data.updater.insert(data.entity, Attacking {

View File

@ -28,12 +28,12 @@ pub struct StaticData {
pub energy_drain: u32,
/// How much damage is dealt with no charge
pub initial_damage: u32,
/// How much damage is dealt with max charge
pub max_damage: u32,
/// How much the damage scales as it is charged
pub scaled_damage: u32,
/// How much knockback there is with no charge
pub initial_knockback: f32,
/// How much knockback there is at max charge
pub max_knockback: f32,
/// How much the knockback scales as it is charged
pub scaled_knockback: f32,
/// Speed stat of the weapon
pub speed: f32,
/// Projectile information
@ -41,7 +41,7 @@ pub struct StaticData {
pub projectile_light: Option<LightEmitter>,
pub projectile_gravity: Option<Gravity>,
pub initial_projectile_speed: f32,
pub max_projectile_speed: f32,
pub scaled_projectile_speed: f32,
/// What key is used to press ability
pub ability_key: AbilityKey,
}
@ -100,15 +100,13 @@ impl CharacterBehavior for Data {
let charge_frac = (self.timer.as_secs_f32()
/ self.static_data.charge_duration.as_secs_f32())
.min(1.0);
let mut damage = Damage {
let damage = Damage {
source: DamageSource::Projectile,
value: self.static_data.max_damage as f32,
value: self.static_data.initial_damage as f32
+ charge_frac * self.static_data.scaled_damage as f32,
};
damage.interpolate_damage(charge_frac, self.static_data.initial_damage as f32);
let knockback = self.static_data.initial_knockback as f32
+ (charge_frac
* (self.static_data.max_knockback - self.static_data.initial_knockback)
as f32);
let knockback = self.static_data.initial_knockback
+ charge_frac * self.static_data.scaled_knockback;
// Fire
let projectile = Projectile {
hit_solid: vec![projectile::Effect::Stick],
@ -140,9 +138,7 @@ impl CharacterBehavior for Data {
light: self.static_data.projectile_light,
gravity: self.static_data.projectile_gravity,
speed: self.static_data.initial_projectile_speed
+ charge_frac
* (self.static_data.max_projectile_speed
- self.static_data.initial_projectile_speed),
+ charge_frac * self.static_data.scaled_projectile_speed,
});
update.character = CharacterState::ChargedRanged(Data {

View File

@ -15,8 +15,6 @@ pub struct Stage<T> {
pub stage: u32,
/// Initial damage of stage
pub base_damage: u32,
/// Max damage of stage
pub max_damage: u32,
/// Damage scaling per combo
pub damage_increase: u32,
/// Knockback of stage
@ -41,7 +39,6 @@ impl Stage<u64> {
Stage::<Duration> {
stage: self.stage,
base_damage: self.base_damage,
max_damage: self.max_damage,
damage_increase: self.damage_increase,
knockback: self.knockback,
range: self.range,
@ -55,7 +52,6 @@ impl Stage<u64> {
pub fn adjusted_by_stats(mut self, power: f32, speed: f32) -> Self {
self.base_damage = (self.base_damage as f32 * power) as u32;
self.max_damage = (self.max_damage as f32 * power) as u32;
self.damage_increase = (self.damage_increase as f32 * power) as u32;
self.base_buildup_duration = (self.base_buildup_duration as f32 / speed) as u64;
self.base_swing_duration = (self.base_swing_duration as f32 / speed) as u64;
@ -82,6 +78,8 @@ pub struct StaticData {
pub speed_increase: f32,
/// (100% + max_speed_increase) is the max attack speed
pub max_speed_increase: f32,
/// Number of times damage scales with combo
pub scales_from_combo: u32,
/// Whether the state can be interrupted by other abilities
pub is_interruptible: bool,
/// What key is used to press ability
@ -153,11 +151,12 @@ impl CharacterBehavior for Data {
});
// Hit attempt
let damage = self.static_data.stage_data[stage_index].max_damage.min(
self.static_data.stage_data[stage_index].base_damage
+ self.combo / self.static_data.num_stages
* self.static_data.stage_data[stage_index].damage_increase,
);
let damage = self.static_data.stage_data[stage_index].base_damage
+ self
.static_data
.scales_from_combo
.min(self.combo / self.static_data.num_stages)
* self.static_data.stage_data[stage_index].damage_increase;
data.updater.insert(data.entity, Attacking {
damages: vec![(Some(GroupTarget::OutOfGroup), Damage {
source: DamageSource::Melee,

View File

@ -15,12 +15,12 @@ use vek::Vec3;
pub struct StaticData {
/// How much damage the attack initially does
pub base_damage: u32,
/// How much damage the attack does at max charge distance
pub max_damage: u32,
/// How much the attack scales in damage
pub scaled_damage: u32,
/// How much the attack knocks the target back initially
pub base_knockback: f32,
/// How much knockback happens at max charge distance
pub max_knockback: f32,
/// How much the attack scales in knockback
pub scaled_knockback: f32,
/// Range of the attack
pub range: f32,
/// Angle of the attack
@ -125,18 +125,13 @@ impl CharacterBehavior for Data {
if !self.exhausted {
// Hit attempt (also checks if player is moving)
if update.vel.0.distance_squared(Vec3::zero()) > 1.0 {
let mut damage = Damage {
let damage = Damage {
source: DamageSource::Melee,
value: self.static_data.max_damage as f32,
value: self.static_data.base_damage as f32
+ charge_frac * self.static_data.scaled_damage as f32,
};
damage.interpolate_damage(
charge_frac,
self.static_data.base_damage as f32,
);
let knockback = (self.static_data.max_knockback
- self.static_data.base_knockback)
* charge_frac
+ self.static_data.base_knockback;
let knockback = self.static_data.base_knockback
+ charge_frac * self.static_data.scaled_knockback;
data.updater.insert(data.entity, Attacking {
damages: vec![(Some(GroupTarget::OutOfGroup), damage)],
range: self.static_data.range,

View File

@ -126,7 +126,6 @@ fn matches_ability_stage() {
stage_data: vec![states::combo_melee::Stage {
stage: 1,
base_damage: 100,
max_damage: 120,
damage_increase: 10,
knockback: 10.0,
range: 4.0,
@ -141,6 +140,7 @@ fn matches_ability_stage() {
energy_increase: 20,
speed_increase: 0.05,
max_speed_increase: 1.8,
scales_from_combo: 2,
is_interruptible: true,
ability_key: states::utils::AbilityKey::Mouse1,
},
@ -187,7 +187,6 @@ fn ignores_different_ability_stage() {
stage_data: vec![states::combo_melee::Stage {
stage: 1,
base_damage: 100,
max_damage: 120,
damage_increase: 10,
knockback: 10.0,
range: 4.0,
@ -202,6 +201,7 @@ fn ignores_different_ability_stage() {
energy_increase: 20,
speed_increase: 0.05,
max_speed_increase: 1.8,
scales_from_combo: 2,
is_interruptible: true,
ability_key: states::utils::AbilityKey::Mouse1,
},