diff --git a/Cargo.lock b/Cargo.lock index 8f02d4147c..b0d9177941 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3119,11 +3119,11 @@ dependencies = [ [[package]] name = "proc-macro-error" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc175e9777c3116627248584e8f8b3e2987405cabe1c0adf7d1dd28f09dc7880" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" dependencies = [ - "proc-macro-error-attr 1.0.3", + "proc-macro-error-attr 1.0.4", "proc-macro2 1.0.18", "quote 1.0.7", "syn 1.0.33", @@ -3145,14 +3145,12 @@ dependencies = [ [[package]] name = "proc-macro-error-attr" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3cc9795ca17eb581285ec44936da7fc2335a3f34f2ddd13118b6f4d515435c50" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" dependencies = [ "proc-macro2 1.0.18", "quote 1.0.7", - "syn 1.0.33", - "syn-mid", "version_check 0.9.2", ] @@ -3995,9 +3993,9 @@ checksum = "6446ced80d6c486436db5c078dde11a9f73d42b57fb273121e160b84f63d894c" [[package]] name = "structopt" -version = "0.3.15" +version = "0.3.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de2f5e239ee807089b62adce73e48c625e0ed80df02c7ab3f068f5db5281065c" +checksum = "de5472fb24d7e80ae84a7801b7978f95a19ec32cb1876faea59ab711eb901976" dependencies = [ "clap", "lazy_static", @@ -4006,12 +4004,12 @@ dependencies = [ [[package]] name = "structopt-derive" -version = "0.4.8" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "510413f9de616762a4fbeab62509bf15c729603b72d7cd71280fbca431b1c118" +checksum = "1e0eb37335aeeebe51be42e2dc07f031163fbabfa6ac67d7ea68b5c2f68d5f99" dependencies = [ "heck", - "proc-macro-error 1.0.3", + "proc-macro-error 1.0.4", "proc-macro2 1.0.18", "quote 1.0.7", "syn 1.0.33", diff --git a/common/src/comp/body.rs b/common/src/comp/body.rs index 88c7de2893..b685d0bb99 100644 --- a/common/src/comp/body.rs +++ b/common/src/comp/body.rs @@ -112,7 +112,7 @@ impl Body { pub fn radius(&self) -> f32 { // TODO: Improve these values (some might be reliant on more info in inner type) match self { - Body::Humanoid(_) => 0.5, + Body::Humanoid(_) => 0.2, Body::QuadrupedSmall(_) => 0.3, Body::QuadrupedMedium(_) => 0.9, Body::Critter(_) => 0.2, @@ -128,8 +128,29 @@ impl Body { } } - // Note: currently assumes sphericality - pub fn height(&self) -> f32 { self.radius() * 2.0 } + pub fn height(&self) -> f32 { + match self { + Body::Humanoid(humanoid) => match humanoid.species { + humanoid::Species::Danari => 0.8, + humanoid::Species::Dwarf => 0.9, + humanoid::Species::Orc => 1.14, + humanoid::Species::Undead => 0.95, + _ => 1.0, + }, + Body::QuadrupedSmall(_) => 0.6, + Body::QuadrupedMedium(_) => 0.5, + Body::Critter(_) => 0.4, + Body::BirdMedium(_) => 1.2, + Body::FishMedium(_) => 1.0, + Body::Dragon(_) => 5.0, + Body::BirdSmall(_) => 0.4, + Body::FishSmall(_) => 0.4, + Body::BipedLarge(_) => 4.0, + Body::Golem(_) => 5.0, + Body::QuadrupedLow(_) => 0.5, + Body::Object(_) => 0.6, + } + } pub fn base_health(&self) -> u32 { match self { diff --git a/common/src/comp/inventory/item/tool.rs b/common/src/comp/inventory/item/tool.rs index 742709901e..401f9925c7 100644 --- a/common/src/comp/inventory/item/tool.rs +++ b/common/src/comp/inventory/item/tool.rs @@ -142,7 +142,7 @@ impl Tool { recover_duration: Duration::from_millis(300), base_healthchange: (-120.0 * self.base_power()) as i32, range: 3.5, - max_angle: 60.0, + max_angle: 20.0, }, LeapMelee { energy_cost: 800, @@ -157,8 +157,8 @@ impl Tool { buildup_duration: Duration::from_millis(700), recover_duration: Duration::from_millis(150), base_healthchange: (-50.0 * self.base_power()) as i32, - range: 3.0, - max_angle: 60.0, + range: 3.5, + max_angle: 20.0, }], Bow(_) => vec![ BasicRanged { @@ -171,7 +171,7 @@ impl Tool { hit_entity: vec![ projectile::Effect::Damage((-40.0 * self.base_power()) as i32), projectile::Effect::Knockback(10.0), - projectile::Effect::RewardEnergy(100), + projectile::Effect::RewardEnergy(50), projectile::Effect::Vanish, ], time_left: Duration::from_secs(15), @@ -202,7 +202,7 @@ impl Tool { recover_duration: Duration::from_millis(400), base_healthchange: (-50.0 * self.base_power()) as i32, range: 3.5, - max_angle: 60.0, + max_angle: 20.0, }, DashMelee { energy_cost: 700, @@ -219,8 +219,8 @@ impl Tool { buildup_duration: Duration::from_millis(0), recover_duration: Duration::from_millis(300), base_healthchange: (-10.0 * self.base_power()) as i32, - range: 10.0, - max_angle: 45.0, + range: 5.0, + max_angle: 20.0, }, BasicMelee { energy_cost: 350, @@ -238,8 +238,8 @@ impl Tool { buildup_duration: Duration::from_millis(100), recover_duration: Duration::from_millis(300), base_healthchange: (-40.0 * self.base_power()) as i32, - range: 10.0, - max_angle: 45.0, + range: 3.5, + max_angle: 20.0, }, BasicRanged { energy_cost: 0, @@ -261,7 +261,6 @@ impl Tool { col: (0.85, 0.5, 0.11).into(), ..Default::default() }), - projectile_gravity: None, }, BasicRanged { @@ -349,8 +348,8 @@ impl Tool { buildup_duration: Duration::from_millis(0), recover_duration: Duration::from_millis(1000), base_healthchange: -20, - range: 5.0, - max_angle: 60.0, + range: 3.5, + max_angle: 15.0, }], } } diff --git a/common/src/loadout_builder.rs b/common/src/loadout_builder.rs index 0fc3983039..441b493cd8 100644 --- a/common/src/loadout_builder.rs +++ b/common/src/loadout_builder.rs @@ -73,7 +73,7 @@ impl LoadoutBuilder { recover_duration: Duration::from_millis(100), base_healthchange: -(body.base_dmg() as i32), range: body.base_range(), - max_angle: 80.0, + max_angle: 20.0, }), ability2: None, ability3: None, diff --git a/common/src/states/basic_melee.rs b/common/src/states/basic_melee.rs index 3fe1bcf9e6..caead1a54c 100644 --- a/common/src/states/basic_melee.rs +++ b/common/src/states/basic_melee.rs @@ -85,7 +85,7 @@ impl CharacterBehavior for Data { if let Some(attack) = data.attacking { if attack.applied && attack.hit_count > 0 { data.updater.remove::(data.entity); - update.energy.change_by(100, EnergySource::HitEnemy); + update.energy.change_by(50, EnergySource::HitEnemy); } } diff --git a/common/src/states/dash_melee.rs b/common/src/states/dash_melee.rs index 75f9efded4..c8130c1bb5 100644 --- a/common/src/states/dash_melee.rs +++ b/common/src/states/dash_melee.rs @@ -1,5 +1,5 @@ use crate::{ - comp::{Attacking, CharacterState, EnergySource, StateUpdate}, + comp::{Attacking, CharacterState, StateUpdate}, states::utils::*, sys::character_behavior::*, }; @@ -57,7 +57,7 @@ impl CharacterBehavior for Data { data.updater.insert(data.entity, Attacking { base_healthchange: -(self.base_damage as i32), range: 3.5, - max_angle: 180_f32.to_radians(), + max_angle: 45_f32.to_radians(), applied: false, hit_count: 0, knockback: 0.0, @@ -90,14 +90,6 @@ impl CharacterBehavior for Data { data.updater.remove::(data.entity); } - // Grant energy on successful hit - if let Some(attack) = data.attacking { - if attack.applied && attack.hit_count > 0 { - data.updater.remove::(data.entity); - update.energy.change_by(100, EnergySource::HitEnemy); - } - } - update } } diff --git a/common/src/states/leap_melee.rs b/common/src/states/leap_melee.rs index d908952de4..91f2422f97 100644 --- a/common/src/states/leap_melee.rs +++ b/common/src/states/leap_melee.rs @@ -1,5 +1,5 @@ use crate::{ - comp::{Attacking, CharacterState, EnergySource, StateUpdate}, + comp::{Attacking, CharacterState, StateUpdate}, states::utils::*, sys::character_behavior::*, }; @@ -110,14 +110,6 @@ impl CharacterBehavior for Data { data.updater.remove::(data.entity); } - // Grant energy on successful hit - if let Some(attack) = data.attacking { - if attack.applied && attack.hit_count > 0 { - data.updater.remove::(data.entity); - update.energy.change_by(100, EnergySource::HitEnemy); - } - } - update } } diff --git a/common/src/states/spin_melee.rs b/common/src/states/spin_melee.rs index 55d00c14db..1bb1141fa2 100644 --- a/common/src/states/spin_melee.rs +++ b/common/src/states/spin_melee.rs @@ -133,14 +133,6 @@ impl CharacterBehavior for Data { data.updater.remove::(data.entity); } - // Grant energy on successful hit - if let Some(attack) = data.attacking { - if attack.applied && attack.hit_count > 0 { - data.updater.remove::(data.entity); - update.energy.change_by(10, EnergySource::HitEnemy); - } - } - update } } diff --git a/common/src/states/triple_strike.rs b/common/src/states/triple_strike.rs index a89e9a8756..fcb62f5846 100644 --- a/common/src/states/triple_strike.rs +++ b/common/src/states/triple_strike.rs @@ -70,6 +70,8 @@ impl CharacterBehavior for Data { fn behavior(&self, data: &JoinData) -> StateUpdate { let mut update = StateUpdate::from(data); + handle_move(data, &mut update, 0.3); + #[allow(clippy::or_fun_call)] // TODO: Pending review in #587 let stage_time_active = self .stage_time_active @@ -109,16 +111,6 @@ impl CharacterBehavior for Data { }, }; - // Handle hit applied - if let Some(attack) = data.attacking { - if attack.applied && attack.hit_count > 0 { - // Take energy on successful hit - update.energy.change_by(100, EnergySource::HitEnemy); - // Always remove component - data.updater.remove::(data.entity); - } - } - // Handling movement if stage_time_active < Duration::from_millis(STAGE_DURATION / 3) { let adjusted_accel = match (self.stage, data.physics.touch_entity.is_none()) { @@ -130,12 +122,7 @@ impl CharacterBehavior for Data { // Move player forward while in first third of each stage if update.vel.0.magnitude_squared() < BASE_SPEED.powf(2.0) { - update.vel.0 += data.dt.0 - * (if data.physics.on_ground { - Vec3::new(0.0, 0.0, 500.0) // Jump upwards if on ground - } else { - Vec3::one() - } + adjusted_accel * Vec3::from(data.ori.0.xy())); + update.vel.0 += data.dt.0 * (adjusted_accel * Vec3::from(data.ori.0.xy())); let mag2 = update.vel.0.magnitude_squared(); if mag2 > BASE_SPEED.powf(2.0) { update.vel.0 = update.vel.0.normalized() * BASE_SPEED; @@ -155,14 +142,16 @@ impl CharacterBehavior for Data { Stage::Third => (self.base_damage as f32 * 1.5) as u32, }; + update.vel.0 = Vec3::new(data.inputs.move_dir.x, data.inputs.move_dir.y, 0.0) * 5.0; + // Try to deal damage in second half of stage data.updater.insert(data.entity, Attacking { base_healthchange: -(dmg as i32), range: 3.5, - max_angle: 180_f32.to_radians(), + max_angle: 45_f32.to_radians(), applied: false, hit_count: 0, - knockback: 16.0, + knockback: 10.0, }); CharacterState::TripleStrike(Data { @@ -187,6 +176,8 @@ impl CharacterBehavior for Data { // Player messed up inputs, don't transition else { None }; + update.vel.0 = Vec3::new(data.inputs.move_dir.x, data.inputs.move_dir.y, 0.0) * 5.0; + if let Some(stage) = next_stage { CharacterState::TripleStrike(Data { base_damage: self.base_damage, @@ -220,7 +211,7 @@ impl CharacterBehavior for Data { if let Some(attack) = data.attacking { if attack.applied && attack.hit_count > 0 { data.updater.remove::(data.entity); - update.energy.change_by(100, EnergySource::HitEnemy); + update.energy.change_by(50, EnergySource::HitEnemy); } } diff --git a/common/src/sys/phys.rs b/common/src/sys/phys.rs index 29242556d4..c065a9621f 100644 --- a/common/src/sys/phys.rs +++ b/common/src/sys/phys.rs @@ -471,7 +471,7 @@ impl<'a> System<'a> for Sys { let diff = Vec2::::from(pos.0 - pos_other.0); - let collision_dist = 0.95 * (scale + scale_other); + let collision_dist = 0.55 * (scale + scale_other); if diff.magnitude_squared() > 0.0 && diff.magnitude_squared() < collision_dist.powf(2.0) diff --git a/server/src/sys/terrain.rs b/server/src/sys/terrain.rs index 9d2775e194..e37ceb1847 100644 --- a/server/src/sys/terrain.rs +++ b/server/src/sys/terrain.rs @@ -137,9 +137,9 @@ impl<'a> System<'a> for Sys { energy_cost: 0, buildup_duration: Duration::from_millis(0), recover_duration: Duration::from_millis(400), - base_healthchange: -60, - range: 5.0, - max_angle: 80.0, + base_healthchange: -40, + range: 3.5, + max_angle: 15.0, }), ability2: None, ability3: None,