From f2dfaf02764f8b2d2b750e1d7767053573786d32 Mon Sep 17 00:00:00 2001 From: Sam Date: Thu, 23 Mar 2023 21:56:16 -0400 Subject: [PATCH] Fixed dullahan AI. Some number tweaks. --- .../abilities/sword/cleaving_sky_splitter.ron | 2 +- .../abilities/sword/cleaving_spiral_slash.ron | 2 +- server/agent/src/action_nodes.rs | 9 +++- server/agent/src/attack.rs | 51 +++++++++++++++++++ server/agent/src/data.rs | 2 + 5 files changed, 63 insertions(+), 3 deletions(-) diff --git a/assets/common/abilities/sword/cleaving_sky_splitter.ron b/assets/common/abilities/sword/cleaving_sky_splitter.ron index 56464d494a..a687577888 100644 --- a/assets/common/abilities/sword/cleaving_sky_splitter.ron +++ b/assets/common/abilities/sword/cleaving_sky_splitter.ron @@ -20,7 +20,7 @@ ComboMelee2( ori_modifier: 0.6, ), ], - energy_cost_per_strike: 40, + energy_cost_per_strike: 30, meta: ( requirements: (stance: Some(Sword(Cleaving))), ), diff --git a/assets/common/abilities/sword/cleaving_spiral_slash.ron b/assets/common/abilities/sword/cleaving_spiral_slash.ron index fb9886ea8c..413bac773f 100644 --- a/assets/common/abilities/sword/cleaving_spiral_slash.ron +++ b/assets/common/abilities/sword/cleaving_spiral_slash.ron @@ -9,7 +9,7 @@ ChargedMelee( energy_regen: 0, ), scaled: Some(Slash( - damage: 12, + damage: 10, poise: 10, knockback: 0, energy_regen: 10, diff --git a/server/agent/src/action_nodes.rs b/server/agent/src/action_nodes.rs index 1d9f792982..4c4cbb2c2a 100644 --- a/server/agent/src/action_nodes.rs +++ b/server/agent/src/action_nodes.rs @@ -829,7 +829,7 @@ impl<'a> AgentData<'a> { if let Some(ability_spec) = item.ability_spec() { match &*ability_spec { AbilitySpec::Custom(spec) => match spec.as_str() { - "Oni" | "Sword Simple" => Tactic::Sword, + "Oni" | "Sword Simple" => Tactic::SwordSimple, "Staff Simple" => Tactic::Staff, "Simple Flying Melee" => Tactic::SimpleFlyingMelee, "Bow Simple" | "Boreal Bow" => Tactic::Bow, @@ -1322,6 +1322,13 @@ impl<'a> AgentData<'a> { read_data, rng, ), + Tactic::SwordSimple => self.handle_sword_simple_attack( + agent, + controller, + &attack_data, + tgt_data, + read_data, + ), } } diff --git a/server/agent/src/attack.rs b/server/agent/src/attack.rs index edc38bd859..19ac2e1775 100644 --- a/server/agent/src/attack.rs +++ b/server/agent/src/attack.rs @@ -4212,4 +4212,55 @@ impl<'a> AgentData<'a> { None, ); } + + pub fn handle_sword_simple_attack( + &self, + agent: &mut Agent, + controller: &mut Controller, + attack_data: &AttackData, + tgt_data: &TargetData, + read_data: &ReadData, + ) { + const DASH_TIMER: usize = 0; + agent.action_state.timers[DASH_TIMER] += read_data.dt.0; + if matches!(self.char_state, CharacterState::DashMelee(s) if !matches!(s.stage_section, StageSection::Recover)) + { + controller.push_basic_input(InputKind::Secondary); + } else if attack_data.in_min_range() && attack_data.angle < 45.0 { + if agent.action_state.timers[DASH_TIMER] > 2.0 { + agent.action_state.timers[DASH_TIMER] = 0.0; + } + controller.push_basic_input(InputKind::Primary); + } else if attack_data.dist_sqrd < MAX_PATH_DIST.powi(2) + && self.path_toward_target( + agent, + controller, + tgt_data.pos.0, + read_data, + Path::Separate, + None, + ) + && entities_have_line_of_sight( + self.pos, + self.body, + tgt_data.pos, + tgt_data.body, + read_data, + ) + && agent.action_state.timers[DASH_TIMER] > 4.0 + && attack_data.angle < 45.0 + { + controller.push_basic_input(InputKind::Secondary); + agent.action_state.timers[DASH_TIMER] = 0.0; + } else { + self.path_toward_target( + agent, + controller, + tgt_data.pos.0, + read_data, + Path::Partial, + None, + ); + } + } } diff --git a/server/agent/src/data.rs b/server/agent/src/data.rs index 0ad1519429..0443413009 100644 --- a/server/agent/src/data.rs +++ b/server/agent/src/data.rs @@ -127,6 +127,8 @@ pub enum Tactic { Bow, Staff, Sceptre, + // TODO: Remove tactic and ability spec + SwordSimple, // Broad creature tactics CircleCharge { radius: u32, circle_time: u32 },