From b22d383564bcf4a211fbaa5fcb7b1b283c277921 Mon Sep 17 00:00:00 2001 From: timokoesters Date: Thu, 26 Mar 2020 20:02:01 +0100 Subject: [PATCH] Better equip durations, fix roll bug, slow down while attacking, smoother gliding, stronger npcs, giants --- assets/common/items/weapons/hammer_1.ron | 2 +- assets/common/items/weapons/short_sword_0.ron | 2 +- assets/common/items/weapons/staff_1.ron | 2 +- assets/common/items/weapons/staff_nature.ron | 2 +- assets/common/items/weapons/starter_axe.ron | 2 +- assets/common/items/weapons/starter_bow.ron | 2 +- assets/common/items/weapons/starter_hammer.ron | 2 +- assets/common/items/weapons/starter_staff.ron | 2 +- assets/common/items/weapons/starter_sword.ron | 2 +- assets/common/items/weapons/wood_sword.ron | 2 +- .../common/items/weapons/zweihander_sword_0.ron | 2 +- common/src/comp/ability.rs | 1 + common/src/states/basic_block.rs | 2 +- common/src/states/basic_melee.rs | 2 +- common/src/states/basic_ranged.rs | 2 +- common/src/states/boost.rs | 2 +- common/src/states/dash_melee.rs | 2 +- common/src/states/equipping.rs | 2 +- common/src/states/glide.rs | 9 ++++++--- common/src/states/idle.rs | 2 +- common/src/states/utils.rs | 16 +++++++++------- common/src/states/wielding.rs | 2 +- common/src/util/mod.rs | 2 +- server/src/sys/terrain.rs | 4 ++-- 24 files changed, 38 insertions(+), 32 deletions(-) diff --git a/assets/common/items/weapons/hammer_1.ron b/assets/common/items/weapons/hammer_1.ron index d38e03d6ea..3907ed9aff 100644 --- a/assets/common/items/weapons/hammer_1.ron +++ b/assets/common/items/weapons/hammer_1.ron @@ -6,7 +6,7 @@ Item( kind: Tool( ToolData ( kind: Hammer(BasicHammer), - equip_time_millis: 600, + equip_time_millis: 500, ) ) ) diff --git a/assets/common/items/weapons/short_sword_0.ron b/assets/common/items/weapons/short_sword_0.ron index 4ee3ca4da2..1c8c91d308 100644 --- a/assets/common/items/weapons/short_sword_0.ron +++ b/assets/common/items/weapons/short_sword_0.ron @@ -5,7 +5,7 @@ Item( kind: Tool( ToolData ( kind: Sword(Short0), - equip_time_millis: 800, + equip_time_millis: 400, ) ), ) diff --git a/assets/common/items/weapons/staff_1.ron b/assets/common/items/weapons/staff_1.ron index 6ad09d6635..0287853a69 100644 --- a/assets/common/items/weapons/staff_1.ron +++ b/assets/common/items/weapons/staff_1.ron @@ -6,7 +6,7 @@ Item( kind: Tool( ToolData ( kind: Staff(BasicStaff), - equip_time_millis: 800, + equip_time_millis: 200, ) ), ) diff --git a/assets/common/items/weapons/staff_nature.ron b/assets/common/items/weapons/staff_nature.ron index d9961ef873..b9065cad11 100644 --- a/assets/common/items/weapons/staff_nature.ron +++ b/assets/common/items/weapons/staff_nature.ron @@ -5,7 +5,7 @@ Item( kind: Tool( ToolData ( kind: Staff(Sceptre), - equip_time_millis: 800, + equip_time_millis: 400, ) ), ) diff --git a/assets/common/items/weapons/starter_axe.ron b/assets/common/items/weapons/starter_axe.ron index b77ef73c7d..61d546fe80 100644 --- a/assets/common/items/weapons/starter_axe.ron +++ b/assets/common/items/weapons/starter_axe.ron @@ -6,7 +6,7 @@ Item( kind: Tool( ToolData ( kind: Axe(BasicAxe), - equip_time_millis: 700, + equip_time_millis: 400, ) ), ) diff --git a/assets/common/items/weapons/starter_bow.ron b/assets/common/items/weapons/starter_bow.ron index 33064b766b..735de375fb 100644 --- a/assets/common/items/weapons/starter_bow.ron +++ b/assets/common/items/weapons/starter_bow.ron @@ -6,7 +6,7 @@ Item( kind: Tool( ToolData ( kind: Bow(BasicBow), - equip_time_millis: 800, + equip_time_millis: 400, ) ), ) diff --git a/assets/common/items/weapons/starter_hammer.ron b/assets/common/items/weapons/starter_hammer.ron index 77d9ef6812..9d7e38f115 100644 --- a/assets/common/items/weapons/starter_hammer.ron +++ b/assets/common/items/weapons/starter_hammer.ron @@ -6,7 +6,7 @@ Item( kind: Tool( ToolData ( kind: Hammer(BasicHammer), - equip_time_millis: 600, + equip_time_millis: 500, ) ), ) diff --git a/assets/common/items/weapons/starter_staff.ron b/assets/common/items/weapons/starter_staff.ron index 16a1971dfa..ae6de21968 100644 --- a/assets/common/items/weapons/starter_staff.ron +++ b/assets/common/items/weapons/starter_staff.ron @@ -6,7 +6,7 @@ Item( kind: Tool( ToolData ( kind: Staff(BasicStaff), - equip_time_millis: 800, + equip_time_millis: 300, ) ), ) diff --git a/assets/common/items/weapons/starter_sword.ron b/assets/common/items/weapons/starter_sword.ron index c7094813ec..9b0eaae181 100644 --- a/assets/common/items/weapons/starter_sword.ron +++ b/assets/common/items/weapons/starter_sword.ron @@ -6,7 +6,7 @@ Item( kind: Tool( ToolData ( kind: Sword(BasicSword), - equip_time_millis: 800, + equip_time_millis: 300, ) ), ) diff --git a/assets/common/items/weapons/wood_sword.ron b/assets/common/items/weapons/wood_sword.ron index 26f0e33c93..ce1189d866 100644 --- a/assets/common/items/weapons/wood_sword.ron +++ b/assets/common/items/weapons/wood_sword.ron @@ -5,7 +5,7 @@ Item( kind: Tool( ToolData ( kind: Sword(WoodTraining), - equip_time_millis: 800, + equip_time_millis: 400, ) ), ) diff --git a/assets/common/items/weapons/zweihander_sword_0.ron b/assets/common/items/weapons/zweihander_sword_0.ron index 3703a16da1..be64c6f17b 100644 --- a/assets/common/items/weapons/zweihander_sword_0.ron +++ b/assets/common/items/weapons/zweihander_sword_0.ron @@ -5,7 +5,7 @@ Item( kind: Tool( ToolData ( kind: Sword(Zweihander0), - equip_time_millis: 800, + equip_time_millis: 500, ) ), ) diff --git a/common/src/comp/ability.rs b/common/src/comp/ability.rs index 0c6d3b7f63..e561bdbcbe 100644 --- a/common/src/comp/ability.rs +++ b/common/src/comp/ability.rs @@ -57,6 +57,7 @@ impl CharacterAbility { CharacterAbility::Roll => { data.physics.on_ground && data.body.is_humanoid() + && data.vel.0.xy().magnitude_squared() > 0.5 && update .energy .try_change_by(-150, EnergySource::Ability) diff --git a/common/src/states/basic_block.rs b/common/src/states/basic_block.rs index 06df786b6d..b60b7e548f 100644 --- a/common/src/states/basic_block.rs +++ b/common/src/states/basic_block.rs @@ -14,7 +14,7 @@ impl CharacterBehavior for Data { fn behavior(&self, data: &JoinData) -> StateUpdate { let mut update = StateUpdate::from(data); - handle_move(&data, &mut update); + handle_move(&data, &mut update, 0.4); if !data.physics.on_ground || !(data.inputs.secondary.is_pressed() || data.inputs.primary.is_pressed()) diff --git a/common/src/states/basic_melee.rs b/common/src/states/basic_melee.rs index c6e5af5a62..d67681cc0c 100644 --- a/common/src/states/basic_melee.rs +++ b/common/src/states/basic_melee.rs @@ -25,7 +25,7 @@ impl CharacterBehavior for Data { fn behavior(&self, data: &JoinData) -> StateUpdate { let mut update = StateUpdate::from(data); - handle_move(data, &mut update); + handle_move(data, &mut update, 0.7); handle_jump(data, &mut update); if self.buildup_duration != Duration::default() { diff --git a/common/src/states/basic_ranged.rs b/common/src/states/basic_ranged.rs index 25c965785d..9a73bd45ab 100644 --- a/common/src/states/basic_ranged.rs +++ b/common/src/states/basic_ranged.rs @@ -26,7 +26,7 @@ impl CharacterBehavior for Data { fn behavior(&self, data: &JoinData) -> StateUpdate { let mut update = StateUpdate::from(data); - handle_move(data, &mut update); + handle_move(data, &mut update, 0.5); handle_jump(data, &mut update); if self.prepare_timer < self.prepare_duration diff --git a/common/src/states/boost.rs b/common/src/states/boost.rs index c4b547eb17..20e5b53909 100644 --- a/common/src/states/boost.rs +++ b/common/src/states/boost.rs @@ -16,7 +16,7 @@ impl CharacterBehavior for Data { fn behavior(&self, data: &JoinData) -> StateUpdate { let mut update = StateUpdate::from(data); - handle_move(data, &mut update); + handle_move(data, &mut update, 1.0); // Still going if self.duration != Duration::default() { diff --git a/common/src/states/dash_melee.rs b/common/src/states/dash_melee.rs index b3d67a8256..06c513b5a8 100644 --- a/common/src/states/dash_melee.rs +++ b/common/src/states/dash_melee.rs @@ -72,7 +72,7 @@ impl CharacterBehavior for Data { }); } else if self.recover_duration != Duration::default() { // Recovery - handle_move(data, &mut update); + handle_move(data, &mut update, 0.7); update.character = CharacterState::DashMelee(Data { buildup_duration: self.buildup_duration, recover_duration: self diff --git a/common/src/states/equipping.rs b/common/src/states/equipping.rs index 6f8e16b54b..29cf1d8453 100644 --- a/common/src/states/equipping.rs +++ b/common/src/states/equipping.rs @@ -15,7 +15,7 @@ impl CharacterBehavior for Data { fn behavior(&self, data: &JoinData) -> StateUpdate { let mut update = StateUpdate::from(data); - handle_move(&data, &mut update); + handle_move(&data, &mut update, 1.0); handle_jump(&data, &mut update); if self.time_left == Duration::default() { diff --git a/common/src/states/glide.rs b/common/src/states/glide.rs index 497334ac8c..1c21ae9df9 100644 --- a/common/src/states/glide.rs +++ b/common/src/states/glide.rs @@ -19,12 +19,14 @@ impl CharacterBehavior for Data { // If glide button isn't held or player is on ground, end glide if !data.inputs.glide.is_pressed() || data.physics.on_ground { - update.character = CharacterState::Idle {}; + update.character = CharacterState::Idle; + return update; } // If there is a wall in front of character go to climb if let Some(_) = data.physics.on_wall { - update.character = CharacterState::Climb {}; + update.character = CharacterState::Climb; + return update; } // Move player according to movement direction vector @@ -38,7 +40,7 @@ impl CharacterBehavior for Data { // Determine orientation vector from movement direction vector let ori_dir = Vec2::from(update.vel.0); - update.ori.0 = safe_slerp(update.ori.0, ori_dir.into(), 2.0 * data.dt.0); + update.ori.0 = safe_slerp(update.ori.0, ori_dir.into(), 0.1); // Apply Glide antigrav lift if Vec2::::from(update.vel.0).magnitude_squared() < GLIDE_SPEED.powf(2.0) @@ -53,6 +55,7 @@ impl CharacterBehavior for Data { } // Otherwise keep gliding + update.character = CharacterState::Glide; update } } diff --git a/common/src/states/idle.rs b/common/src/states/idle.rs index 0355ddbe5a..eb58dccf55 100644 --- a/common/src/states/idle.rs +++ b/common/src/states/idle.rs @@ -10,7 +10,7 @@ impl CharacterBehavior for Data { fn behavior(&self, data: &JoinData) -> StateUpdate { let mut update = StateUpdate::from(data); - handle_move(data, &mut update); + handle_move(data, &mut update, 1.0); handle_jump(data, &mut update); handle_primary_wield(data, &mut update); handle_climb(data, &mut update); diff --git a/common/src/states/utils.rs b/common/src/states/utils.rs index 6af1a90168..f44b413b13 100644 --- a/common/src/states/utils.rs +++ b/common/src/states/utils.rs @@ -28,16 +28,16 @@ const BASE_HUMANOID_WATER_SPEED: f32 = 120.0; // const CLIMB_COST: i32 = 5; /// Handles updating `Components` to move player based on state of `JoinData` -pub fn handle_move(data: &JoinData, update: &mut StateUpdate) { +pub fn handle_move(data: &JoinData, update: &mut StateUpdate, efficiency: f32) { if data.physics.in_fluid { - swim_move(data, update); + swim_move(data, update, efficiency); } else { - basic_move(data, update); + basic_move(data, update, efficiency); } } /// Updates components to move player as if theyre on ground or in air -fn basic_move(data: &JoinData, update: &mut StateUpdate) { +fn basic_move(data: &JoinData, update: &mut StateUpdate, efficiency: f32) { let (accel, speed): (f32, f32) = if data.physics.on_ground { (BASE_HUMANOID_ACCEL, BASE_HUMANOID_SPEED) } else { @@ -46,7 +46,8 @@ fn basic_move(data: &JoinData, update: &mut StateUpdate) { // Move player according to move_dir if update.vel.0.magnitude_squared() < speed.powf(2.0) { - update.vel.0 = update.vel.0 + Vec2::broadcast(data.dt.0) * data.inputs.move_dir * accel; + update.vel.0 = + update.vel.0 + Vec2::broadcast(data.dt.0) * data.inputs.move_dir * accel * efficiency; let mag2 = update.vel.0.magnitude_squared(); if mag2 > speed.powf(2.0) { update.vel.0 = update.vel.0.normalized() * speed; @@ -69,7 +70,7 @@ pub fn handle_orientation(data: &JoinData, update: &mut StateUpdate, strength: f } /// Updates components to move player as if theyre swimming -fn swim_move(data: &JoinData, update: &mut StateUpdate) { +fn swim_move(data: &JoinData, update: &mut StateUpdate, efficiency: f32) { // Update velocity update.vel.0 += Vec2::broadcast(data.dt.0) * data.inputs.move_dir @@ -77,7 +78,8 @@ fn swim_move(data: &JoinData, update: &mut StateUpdate) { BASE_HUMANOID_WATER_ACCEL } else { 0.0 - }; + } + * efficiency; handle_orientation(data, update, if data.physics.on_ground { 9.0 } else { 2.0 }); diff --git a/common/src/states/wielding.rs b/common/src/states/wielding.rs index 74ca337cda..9381c185e5 100644 --- a/common/src/states/wielding.rs +++ b/common/src/states/wielding.rs @@ -10,7 +10,7 @@ impl CharacterBehavior for Data { fn behavior(&self, data: &JoinData) -> StateUpdate { let mut update = StateUpdate::from(data); - handle_move(&data, &mut update); + handle_move(&data, &mut update, 1.0); handle_jump(&data, &mut update); handle_climb(&data, &mut update); handle_glide(&data, &mut update); diff --git a/common/src/util/mod.rs b/common/src/util/mod.rs index 36ef3841e0..bb4d1be981 100644 --- a/common/src/util/mod.rs +++ b/common/src/util/mod.rs @@ -41,7 +41,7 @@ pub fn safe_slerp(from: vek::Vec3, to: vek::Vec3, factor: f32) -> vek: }; let dot = from.dot(to); - if dot > 0.999 { + if dot >= 1.0 - 1E-6 { // Close together, just use to return to; } diff --git a/server/src/sys/terrain.rs b/server/src/sys/terrain.rs index 16f863f776..83500188a5 100644 --- a/server/src/sys/terrain.rs +++ b/server/src/sys/terrain.rs @@ -282,7 +282,7 @@ impl<'a> System<'a> for Sys { // TODO: Remove this and implement scaling or level depending on stuff like // species instead - stats.level.set_level(rand::thread_rng().gen_range(1, 4)); + stats.level.set_level(rand::thread_rng().gen_range(1, 9)); // Replace stuff if it's a boss if let EntityKind::Boss = entity.kind { @@ -337,7 +337,7 @@ impl<'a> System<'a> for Sys { )), }; - stats.level.set_level(rand::thread_rng().gen_range(8, 15)); + stats.level.set_level(rand::thread_rng().gen_range(30, 35)); scale = 2.0 + rand::random::(); }