Merge branch 'knightresspaladin/fix-circle-charge' into 'master'

Fixed CircleCharge and buffed Rugged Hide droppers

See merge request veloren/veloren!2613
This commit is contained in:
Samuel Keiffer 2021-07-23 14:56:36 +00:00
commit 85b9f70469
7 changed files with 81 additions and 81 deletions

View File

@ -213,7 +213,7 @@
abilities: [],
),
Custom("Theropod Charge"): (
primary: "common.abilities.custom.theropodbird.triplestrike",
primary: "common.abilities.custom.theropodbasic.triplestrike",
secondary: "common.abilities.custom.theropodbasic.dash",
abilities: [],
),

View File

@ -1,7 +1,7 @@
DashMelee(
energy_cost: 0,
base_damage: 50,
scaled_damage: 150,
base_damage: 70,
scaled_damage: 280,
base_poise_damage: 28,
scaled_poise_damage: 40,
base_knockback: 8.0,

View File

@ -2,7 +2,7 @@ ComboMelee(
stage_data: [
(
stage: 1,
base_damage: 75,
base_damage: 250,
damage_increase: 0,
base_poise_damage: 22,
poise_damage_increase: 0,
@ -18,7 +18,7 @@ ComboMelee(
),
(
stage: 2,
base_damage: 75,
base_damage: 370,
damage_increase: 0,
base_poise_damage: 0,
poise_damage_increase: 22,

View File

@ -1,7 +1,7 @@
DashMelee(
energy_cost: 0,
base_damage: 150,
scaled_damage: 40,
base_damage: 120,
scaled_damage: 160,
base_poise_damage: 0,
scaled_poise_damage: 0,
base_knockback: 8.0,

View File

@ -7,12 +7,12 @@ SpawnEntry (
// Casual
(100, (1, 1, "common.entity.wild.aggressive.bonerattler")),
(100, (1, 1, "common.entity.wild.aggressive.sand_raptor")),
(100, (1, 1, "common.entity.wild.aggressive.ngoubou")),
(100, (1, 1, "common.entity.wild.aggressive.sandshark")),
// Rare
(20, (1, 1, "common.entity.wild.aggressive.lavadrake")),
(20, (1, 1, "common.entity.wild.aggressive.ntouka")),
(20, (1, 1, "common.entity.wild.aggressive.archaeos")),
(20, (1, 1, "common.entity.wild.aggressive.ngoubou")),
// Ultra_rare
(1, (1, 1, "common.entity.wild.aggressive.roshwalr_boss")),
],

View File

@ -492,9 +492,9 @@ impl Body {
quadruped_medium::Species::Panda => 900,
quadruped_medium::Species::Bear => 900,
quadruped_medium::Species::Moose => 800,
quadruped_medium::Species::Dreadhorn => 1300,
quadruped_medium::Species::Dreadhorn => 3700,
quadruped_medium::Species::Mammoth => 2500,
quadruped_medium::Species::Ngoubou => 1800,
quadruped_medium::Species::Ngoubou => 2900,
_ => 700,
},
Body::BirdMedium(bird_medium) => match bird_medium.species {
@ -553,6 +553,7 @@ impl Body {
},
Body::Theropod(theropod) => match theropod.species {
theropod::Species::Archaeos => 3500,
theropod::Species::Yale => 2800,
theropod::Species::Odonto => 3000,
theropod::Species::Ntouka => 3000,
_ => 1100,
@ -614,13 +615,13 @@ impl Body {
quadruped_medium::Species::Barghest => 50,
quadruped_medium::Species::Cattle => 30,
quadruped_medium::Species::Highland => 30,
quadruped_medium::Species::Yak => 30,
quadruped_medium::Species::Yak => 50,
quadruped_medium::Species::Panda => 40,
quadruped_medium::Species::Bear => 40,
quadruped_medium::Species::Moose => 30,
quadruped_medium::Species::Dreadhorn => 50,
quadruped_medium::Species::Dreadhorn => 60,
quadruped_medium::Species::Mammoth => 80,
quadruped_medium::Species::Ngoubou => 60,
quadruped_medium::Species::Ngoubou => 70,
_ => 20,
},
Body::BirdMedium(bird_medium) => match bird_medium.species {

View File

@ -2665,79 +2665,78 @@ impl<'a> AgentData<'a> {
radius: u32,
circle_time: u32,
) {
if attack_data.in_min_range() && thread_rng().gen_bool(0.5) {
controller.inputs.move_dir = Vec2::zero();
if agent.action_state.counter >= circle_time as f32 {
// if circle charge is in progress and time hasn't expired, continue charging
controller
.actions
.push(ControlAction::basic_input(InputKind::Primary));
} else if attack_data.dist_sqrd < (radius as f32 * attack_data.min_attack_dist).powi(2) {
controller.inputs.move_dir = (self.pos.0 - tgt_data.pos.0)
.xy()
.try_normalized()
.unwrap_or_else(Vec2::unit_y);
} else if attack_data.dist_sqrd
< ((radius as f32 + 1.0) * attack_data.min_attack_dist).powi(2)
&& attack_data.dist_sqrd > (radius as f32 * attack_data.min_attack_dist).powi(2)
{
if agent.action_state.timer < circle_time as f32 {
let move_dir = (tgt_data.pos.0 - self.pos.0)
.xy()
.rotated_z(0.47 * PI)
.try_normalized()
.unwrap_or_else(Vec2::unit_y);
let obstacle_left = read_data
.terrain
.ray(
self.pos.0 + Vec3::unit_z(),
self.pos.0 + move_dir.with_z(0.0) * 2.0 + Vec3::unit_z(),
)
.until(Block::is_solid)
.cast()
.1
.map_or(true, |b| b.is_some());
if obstacle_left {
agent.action_state.timer = circle_time as f32;
}
controller.inputs.move_dir = move_dir;
agent.action_state.timer += read_data.dt.0;
} else if agent.action_state.timer < circle_time as f32 + 0.5 {
controller
.actions
.push(ControlAction::basic_input(InputKind::Secondary));
agent.action_state.timer += read_data.dt.0;
} else if agent.action_state.timer < 2.0 * circle_time as f32 + 0.5 {
let move_dir = (tgt_data.pos.0 - self.pos.0)
.xy()
.rotated_z(-0.47 * PI)
.try_normalized()
.unwrap_or_else(Vec2::unit_y);
let obstacle_right = read_data
.terrain
.ray(
self.pos.0 + Vec3::unit_z(),
self.pos.0 + move_dir.with_z(0.0) * 2.0 + Vec3::unit_z(),
)
.until(Block::is_solid)
.cast()
.1
.map_or(true, |b| b.is_some());
if obstacle_right {
agent.action_state.timer = 2.0 * circle_time as f32 + 0.5;
}
controller.inputs.move_dir = move_dir;
agent.action_state.timer += read_data.dt.0;
} else if agent.action_state.timer < 2.0 * circle_time as f32 + 1.0 {
if agent.action_state.timer < 2.0 * circle_time as f32 {
agent.action_state.timer = 2.0 * circle_time as f32;
}
controller
.actions
.push(ControlAction::basic_input(InputKind::Secondary));
agent.action_state.timer += read_data.dt.0;
.push(ControlAction::basic_input(InputKind::Secondary));
}
if attack_data.in_min_range() {
if agent.action_state.counter > 0.0 {
// set timer and rotation counter to zero if in minimum range
agent.action_state.counter = 0.0;
agent.action_state.int_counter = 0;
} else {
agent.action_state.timer = 0.0;
// melee attack
controller
.actions
.push(ControlAction::basic_input(InputKind::Primary));
controller.inputs.move_dir = Vec2::zero();
}
} else if attack_data.dist_sqrd < (radius as f32 + attack_data.min_attack_dist).powi(2) {
// if in range to charge, circle, then charge
if agent.action_state.int_counter == 0 {
// if you haven't chosen a direction to go in, choose now
agent.action_state.int_counter = 1 + thread_rng().gen_bool(0.5) as u8;
}
if agent.action_state.counter < circle_time as f32 {
// circle if circle timer not ready
let move_dir = match agent.action_state.int_counter {
1 =>
// circle left if counter is 1
{
(tgt_data.pos.0 - self.pos.0)
.xy()
.rotated_z(0.47 * PI)
.try_normalized()
.unwrap_or_else(Vec2::unit_y)
},
2 =>
// circle right if counter is 2
{
(tgt_data.pos.0 - self.pos.0)
.xy()
.rotated_z(-0.47 * PI)
.try_normalized()
.unwrap_or_else(Vec2::unit_y)
},
_ =>
// if some illegal value slipped in, get zero vector
{
vek::Vec2::zero()
},
};
let obstacle = read_data
.terrain
.ray(
self.pos.0 + Vec3::unit_z(),
self.pos.0 + move_dir.with_z(0.0) * 2.0 + Vec3::unit_z(),
)
.until(Block::is_solid)
.cast()
.1
.map_or(true, |b| b.is_some());
if obstacle {
// if obstacle detected, stop circling
agent.action_state.counter = circle_time as f32;
}
controller.inputs.move_dir = move_dir;
// use counter as timer since timer may be modified in other parts of the code
agent.action_state.counter += read_data.dt.0;
}
// activating charge once circle timer expires is handled above
} else if attack_data.dist_sqrd < MAX_PATH_DIST.powi(2) {
// if too far away from target, move towards them
self.path_toward_target(agent, controller, tgt_data, read_data, true, false, None);
} else {
self.path_toward_target(agent, controller, tgt_data, read_data, false, false, None);