mirror of
https://gitlab.com/veloren/veloren.git
synced 2024-08-30 18:12:32 +00:00
Adlet abilities
This commit is contained in:
parent
715a0b7b20
commit
92e28f09fc
@ -745,4 +745,26 @@
|
|||||||
secondary: Simple(None, "common.abilities.empty.basic"),
|
secondary: Simple(None, "common.abilities.empty.basic"),
|
||||||
abilities: [],
|
abilities: [],
|
||||||
),
|
),
|
||||||
|
// Adlets
|
||||||
|
// TODO: Do we want to eventually convert these to simple variants of weapons?
|
||||||
|
Custom("Adlet Hunter"): (
|
||||||
|
primary: "common.abilities.adlet.hunter.stab",
|
||||||
|
secondary: "common.abilities.adlet.hunter.throw",
|
||||||
|
abilities: [],
|
||||||
|
),
|
||||||
|
Custom("Adlet Icepicker"): (
|
||||||
|
primary: "common.abilities.adlet.icepicker.spike",
|
||||||
|
secondary: "common.abilities.adlet.icepicker.leap",
|
||||||
|
abilities: [],
|
||||||
|
),
|
||||||
|
Custom("Adlet Tracker"): (
|
||||||
|
primary: "common.abilities.adlet.tracker.arrow",
|
||||||
|
secondary: "common.abilities.adlet.tracker.trap",
|
||||||
|
abilities: [],
|
||||||
|
),
|
||||||
|
// Custom("Adlet Alpha"): (
|
||||||
|
// primary: "common.abilities.adlet.alpha",
|
||||||
|
// secondary: "common.abilities.adlet.alpha",
|
||||||
|
// abilities: [],
|
||||||
|
// ),
|
||||||
})
|
})
|
||||||
|
17
assets/common/abilities/adlet/hunter/stab.ron
Normal file
17
assets/common/abilities/adlet/hunter/stab.ron
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
BasicMelee(
|
||||||
|
energy_cost: 0,
|
||||||
|
buildup_duration: 0.15,
|
||||||
|
swing_duration: 0.05,
|
||||||
|
recover_duration: 0.55,
|
||||||
|
melee_constructor: (
|
||||||
|
kind: Stab(
|
||||||
|
damage: 10,
|
||||||
|
poise: 5,
|
||||||
|
knockback: 0,
|
||||||
|
energy_regen: 0,
|
||||||
|
),
|
||||||
|
range: 5,
|
||||||
|
angle: 5,
|
||||||
|
),
|
||||||
|
ori_modifier: 1.0,
|
||||||
|
)
|
15
assets/common/abilities/adlet/hunter/throw.ron
Normal file
15
assets/common/abilities/adlet/hunter/throw.ron
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
BasicRanged(
|
||||||
|
energy_cost: 0,
|
||||||
|
buildup_duration: 0.8,
|
||||||
|
recover_duration: 0.8,
|
||||||
|
projectile: Arrow(
|
||||||
|
damage: 16,
|
||||||
|
knockback: 0,
|
||||||
|
energy_regen: 0,
|
||||||
|
),
|
||||||
|
projectile_body: Object(AdletSpear),
|
||||||
|
projectile_light: None,
|
||||||
|
projectile_speed: 40.0,
|
||||||
|
num_projectiles: 1,
|
||||||
|
projectile_spread: 0.0,
|
||||||
|
)
|
19
assets/common/abilities/adlet/icepicker/leap.ron
Normal file
19
assets/common/abilities/adlet/icepicker/leap.ron
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
LeapMelee(
|
||||||
|
energy_cost: 0.0,
|
||||||
|
buildup_duration: 0.6,
|
||||||
|
movement_duration: 0.2,
|
||||||
|
swing_duration: 0.1,
|
||||||
|
recover_duration: 0.3,
|
||||||
|
melee_constructor: (
|
||||||
|
kind: Stab(
|
||||||
|
damage: 20,
|
||||||
|
poise: 20,
|
||||||
|
knockback: 0,
|
||||||
|
energy_regen: 0,
|
||||||
|
),
|
||||||
|
range: 4,
|
||||||
|
angle: 30,
|
||||||
|
),
|
||||||
|
forward_leap_strength: 18,
|
||||||
|
vertical_leap_strength: 8,
|
||||||
|
)
|
17
assets/common/abilities/adlet/icepicker/spike.ron
Normal file
17
assets/common/abilities/adlet/icepicker/spike.ron
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
BasicMelee(
|
||||||
|
energy_cost: 0,
|
||||||
|
buildup_duration: 0.4,
|
||||||
|
swing_duration: 0.1,
|
||||||
|
recover_duration: 0.45,
|
||||||
|
melee_constructor: (
|
||||||
|
kind: Stab(
|
||||||
|
damage: 12,
|
||||||
|
poise: 10,
|
||||||
|
knockback: 0,
|
||||||
|
energy_regen: 0,
|
||||||
|
),
|
||||||
|
range: 3,
|
||||||
|
angle: 15,
|
||||||
|
),
|
||||||
|
ori_modifier: 1.0,
|
||||||
|
)
|
15
assets/common/abilities/adlet/tracker/arrow.ron
Normal file
15
assets/common/abilities/adlet/tracker/arrow.ron
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
BasicRanged(
|
||||||
|
energy_cost: 0,
|
||||||
|
buildup_duration: 0.6,
|
||||||
|
recover_duration: 0.4,
|
||||||
|
projectile: Arrow(
|
||||||
|
damage: 12,
|
||||||
|
knockback: 0,
|
||||||
|
energy_regen: 0,
|
||||||
|
),
|
||||||
|
projectile_body: Object(Arrow),
|
||||||
|
projectile_light: None,
|
||||||
|
projectile_speed: 100.0,
|
||||||
|
num_projectiles: 1,
|
||||||
|
projectile_spread: 0.0,
|
||||||
|
)
|
12
assets/common/abilities/adlet/tracker/trap.ron
Normal file
12
assets/common/abilities/adlet/tracker/trap.ron
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
BasicRanged(
|
||||||
|
energy_cost: 0,
|
||||||
|
buildup_duration: 0.75,
|
||||||
|
recover_duration: 0.75,
|
||||||
|
projectile: Trap(
|
||||||
|
damage: 25,
|
||||||
|
),
|
||||||
|
projectile_body: Object(Snowball),
|
||||||
|
projectile_speed: 10.0,
|
||||||
|
num_projectiles: 1,
|
||||||
|
projectile_spread: 0.0,
|
||||||
|
)
|
@ -5,11 +5,11 @@ ItemDef(
|
|||||||
kind: Spear,
|
kind: Spear,
|
||||||
hands: Two,
|
hands: Two,
|
||||||
stats: (
|
stats: (
|
||||||
equip_time_secs: 0.0,
|
equip_time_secs: 0.1,
|
||||||
power: 1.05,
|
power: 1.0,
|
||||||
effect_power: 1.0,
|
effect_power: 1.0,
|
||||||
speed: 0.75,
|
speed: 1.0,
|
||||||
crit_chance: 0.07589286,
|
crit_chance: 0.1,
|
||||||
range: 1.0,
|
range: 1.0,
|
||||||
energy_efficiency: 1.0,
|
energy_efficiency: 1.0,
|
||||||
buff_strength: 1.0,
|
buff_strength: 1.0,
|
||||||
@ -17,5 +17,5 @@ ItemDef(
|
|||||||
)),
|
)),
|
||||||
quality: Low,
|
quality: Low,
|
||||||
tags: [],
|
tags: [],
|
||||||
ability_spec: None,
|
ability_spec: Some(Custom("Adlet Hunter")),
|
||||||
)
|
)
|
@ -1,15 +1,15 @@
|
|||||||
ItemDef(
|
ItemDef(
|
||||||
name: "Icepicker Axe",
|
name: "Icepicker Pick",
|
||||||
description: "",
|
description: "",
|
||||||
kind: Tool((
|
kind: Tool((
|
||||||
kind: Axe,
|
kind: Pick,
|
||||||
hands: Two,
|
hands: Two,
|
||||||
stats: (
|
stats: (
|
||||||
equip_time_secs: 0.0,
|
equip_time_secs: 0.1,
|
||||||
power: 0.7,
|
power: 1.0,
|
||||||
effect_power: 0.8,
|
effect_power: 1.0,
|
||||||
speed: 0.7,
|
speed: 1.0,
|
||||||
crit_chance: 0.05059524,
|
crit_chance: 0.1,
|
||||||
range: 1.0,
|
range: 1.0,
|
||||||
energy_efficiency: 1.0,
|
energy_efficiency: 1.0,
|
||||||
buff_strength: 1.0,
|
buff_strength: 1.0,
|
||||||
@ -17,5 +17,5 @@ ItemDef(
|
|||||||
)),
|
)),
|
||||||
quality: Low,
|
quality: Low,
|
||||||
tags: [],
|
tags: [],
|
||||||
ability_spec: Some(Custom("Axe Simple")),
|
ability_spec: Some(Custom("Adlet Icepicker")),
|
||||||
)
|
)
|
@ -6,16 +6,16 @@ ItemDef(
|
|||||||
hands: Two,
|
hands: Two,
|
||||||
stats: (
|
stats: (
|
||||||
equip_time_secs: 0.0,
|
equip_time_secs: 0.0,
|
||||||
power: 1.05,
|
power: 1.0,
|
||||||
effect_power: 0.8,
|
effect_power: 1.0,
|
||||||
speed: 0.4,
|
speed: 1.0,
|
||||||
crit_chance: 0.08406594,
|
crit_chance: 0.1,
|
||||||
range: 1.0,
|
range: 1.0,
|
||||||
energy_efficiency: 1.0,
|
energy_efficiency: 1.0,
|
||||||
buff_strength: 1.0,
|
buff_strength: 1.0,
|
||||||
),
|
),
|
||||||
)),
|
)),
|
||||||
quality: Moderate,
|
quality: Low,
|
||||||
tags: [],
|
tags: [],
|
||||||
ability_spec: Some(Custom("Bow Simple")),
|
ability_spec: Some(Custom("Adlet Tracker")),
|
||||||
)
|
)
|
@ -919,4 +919,14 @@
|
|||||||
central: ("armor.empty"),
|
central: ("armor.empty"),
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
|
AdletSpear: (
|
||||||
|
bone0: (
|
||||||
|
offset: (-12.5, -12.5, 0.0),
|
||||||
|
central: ("weapon.projectile.adlet-spear"),
|
||||||
|
),
|
||||||
|
bone1: (
|
||||||
|
offset: (0.0, 0.0, 0.0),
|
||||||
|
central: ("armor.empty"),
|
||||||
|
)
|
||||||
|
),
|
||||||
})
|
})
|
||||||
|
BIN
assets/voxygen/voxel/weapon/projectile/adlet-spear.vox
(Stored with Git LFS)
Normal file
BIN
assets/voxygen/voxel/weapon/projectile/adlet-spear.vox
(Stored with Git LFS)
Normal file
Binary file not shown.
@ -104,6 +104,7 @@ make_case_elim!(
|
|||||||
SpectralSwordSmall = 89,
|
SpectralSwordSmall = 89,
|
||||||
SpectralSwordLarge = 90,
|
SpectralSwordLarge = 90,
|
||||||
LaserBeam = 91,
|
LaserBeam = 91,
|
||||||
|
AdletSpear = 92,
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -114,7 +115,7 @@ impl Body {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub const ALL_OBJECTS: [Body; 92] = [
|
pub const ALL_OBJECTS: [Body; 93] = [
|
||||||
Body::Arrow,
|
Body::Arrow,
|
||||||
Body::Bomb,
|
Body::Bomb,
|
||||||
Body::Scarecrow,
|
Body::Scarecrow,
|
||||||
@ -207,6 +208,7 @@ pub const ALL_OBJECTS: [Body; 92] = [
|
|||||||
Body::BarrelOrgan,
|
Body::BarrelOrgan,
|
||||||
Body::IceBomb,
|
Body::IceBomb,
|
||||||
Body::LaserBeam,
|
Body::LaserBeam,
|
||||||
|
Body::AdletSpear,
|
||||||
];
|
];
|
||||||
|
|
||||||
impl From<Body> for super::Body {
|
impl From<Body> for super::Body {
|
||||||
@ -308,6 +310,7 @@ impl Body {
|
|||||||
Body::SpectralSwordSmall => "spectral_sword_small",
|
Body::SpectralSwordSmall => "spectral_sword_small",
|
||||||
Body::SpectralSwordLarge => "spectral_sword_large",
|
Body::SpectralSwordLarge => "spectral_sword_large",
|
||||||
Body::LaserBeam => "laser_beam",
|
Body::LaserBeam => "laser_beam",
|
||||||
|
Body::AdletSpear => "adlet_spear",
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -332,7 +335,8 @@ impl Body {
|
|||||||
| Body::Dart
|
| Body::Dart
|
||||||
| Body::DagonBomb
|
| Body::DagonBomb
|
||||||
| Body::SpectralSwordSmall
|
| Body::SpectralSwordSmall
|
||||||
| Body::SpectralSwordLarge => 500.0,
|
| Body::SpectralSwordLarge
|
||||||
|
| Body::AdletSpear => 500.0,
|
||||||
Body::Bomb => 2000.0, // I have no idea what it's supposed to be
|
Body::Bomb => 2000.0, // I have no idea what it's supposed to be
|
||||||
Body::Crate => 300.0, // let's say it's a lot of wood and maybe some contents
|
Body::Crate => 300.0, // let's say it's a lot of wood and maybe some contents
|
||||||
Body::Scarecrow => 900.0,
|
Body::Scarecrow => 900.0,
|
||||||
@ -427,6 +431,7 @@ impl Body {
|
|||||||
Body::GnarlingTotemRed | Body::GnarlingTotemGreen | Body::GnarlingTotemWhite => 100.0,
|
Body::GnarlingTotemRed | Body::GnarlingTotemGreen | Body::GnarlingTotemWhite => 100.0,
|
||||||
Body::IceBomb => 12298.0, // 2.5 m diamter but ice
|
Body::IceBomb => 12298.0, // 2.5 m diamter but ice
|
||||||
Body::LaserBeam => 80000.0,
|
Body::LaserBeam => 80000.0,
|
||||||
|
Body::AdletSpear => 1.5,
|
||||||
};
|
};
|
||||||
|
|
||||||
Mass(m)
|
Mass(m)
|
||||||
@ -434,9 +439,12 @@ impl Body {
|
|||||||
|
|
||||||
pub fn dimensions(&self) -> Vec3<f32> {
|
pub fn dimensions(&self) -> Vec3<f32> {
|
||||||
match self {
|
match self {
|
||||||
Body::Arrow | Body::ArrowSnake | Body::MultiArrow | Body::ArrowTurret | Body::Dart => {
|
Body::Arrow
|
||||||
Vec3::new(0.01, 0.8, 0.01)
|
| Body::ArrowSnake
|
||||||
},
|
| Body::MultiArrow
|
||||||
|
| Body::ArrowTurret
|
||||||
|
| Body::Dart
|
||||||
|
| Body::AdletSpear => Vec3::new(0.01, 0.8, 0.01),
|
||||||
Body::BoltFire => Vec3::new(0.1, 0.1, 0.1),
|
Body::BoltFire => Vec3::new(0.1, 0.1, 0.1),
|
||||||
Body::SpectralSwordSmall => Vec3::new(0.2, 0.9, 0.1),
|
Body::SpectralSwordSmall => Vec3::new(0.2, 0.9, 0.1),
|
||||||
Body::SpectralSwordLarge => Vec3::new(0.2, 1.5, 0.1),
|
Body::SpectralSwordLarge => Vec3::new(0.2, 1.5, 0.1),
|
||||||
|
@ -125,6 +125,9 @@ pub enum ProjectileConstructor {
|
|||||||
knockback: f32,
|
knockback: f32,
|
||||||
min_falloff: f32,
|
min_falloff: f32,
|
||||||
},
|
},
|
||||||
|
Trap {
|
||||||
|
damage: f32,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ProjectileConstructor {
|
impl ProjectileConstructor {
|
||||||
@ -790,6 +793,29 @@ impl ProjectileConstructor {
|
|||||||
is_point: true,
|
is_point: true,
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
Trap { damage } => {
|
||||||
|
let damage = AttackDamage::new(
|
||||||
|
Damage {
|
||||||
|
source: DamageSource::Explosion,
|
||||||
|
kind: DamageKind::Piercing,
|
||||||
|
value: damage,
|
||||||
|
},
|
||||||
|
Some(GroupTarget::OutOfGroup),
|
||||||
|
instance,
|
||||||
|
);
|
||||||
|
let attack = Attack::default()
|
||||||
|
.with_damage(damage)
|
||||||
|
.with_crit(crit_chance, crit_mult);
|
||||||
|
Projectile {
|
||||||
|
hit_solid: vec![],
|
||||||
|
hit_entity: vec![Effect::Attack(attack), Effect::Vanish],
|
||||||
|
time_left: Duration::from_secs(300),
|
||||||
|
owner,
|
||||||
|
ignore_group: true,
|
||||||
|
is_sticky: true,
|
||||||
|
is_point: false,
|
||||||
|
}
|
||||||
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -913,6 +939,9 @@ impl ProjectileConstructor {
|
|||||||
*damage *= power;
|
*damage *= power;
|
||||||
*radius *= range;
|
*radius *= range;
|
||||||
},
|
},
|
||||||
|
Trap { ref mut damage } => {
|
||||||
|
*damage *= power;
|
||||||
|
},
|
||||||
}
|
}
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
@ -935,6 +964,7 @@ impl ProjectileConstructor {
|
|||||||
WindBomb { .. } => true,
|
WindBomb { .. } => true,
|
||||||
IceBomb { .. } => true,
|
IceBomb { .. } => true,
|
||||||
LaserBeam { .. } => true,
|
LaserBeam { .. } => true,
|
||||||
|
Trap { .. } => false,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -212,6 +212,9 @@ impl<'a> System<'a> for Sys {
|
|||||||
BuffData::new(20.0, None, None),
|
BuffData::new(20.0, None, None),
|
||||||
Vec::new(),
|
Vec::new(),
|
||||||
BuffSource::World,
|
BuffSource::World,
|
||||||
|
*read_data.time,
|
||||||
|
Some(&stat),
|
||||||
|
Some(health),
|
||||||
)),
|
)),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -27,7 +27,10 @@ impl Site {
|
|||||||
| SiteKind::DesertCity(_)
|
| SiteKind::DesertCity(_)
|
||||||
| SiteKind::SavannahPit(_) => Some(true),
|
| SiteKind::SavannahPit(_) => Some(true),
|
||||||
// Evil
|
// Evil
|
||||||
SiteKind::Dungeon(_) | SiteKind::ChapelSite(_) | SiteKind::Gnarling(_) => Some(false),
|
SiteKind::Dungeon(_)
|
||||||
|
| SiteKind::ChapelSite(_)
|
||||||
|
| SiteKind::Gnarling(_)
|
||||||
|
| SiteKind::Adlet(_) => Some(false),
|
||||||
// Neutral
|
// Neutral
|
||||||
SiteKind::Settlement(_)
|
SiteKind::Settlement(_)
|
||||||
| SiteKind::Castle(_)
|
| SiteKind::Castle(_)
|
||||||
|
@ -73,7 +73,8 @@ fn path_in_site(start: Vec2<i32>, end: Vec2<i32>, site: &site2::Site) -> PathRes
|
|||||||
| TileKind::Tower(_)
|
| TileKind::Tower(_)
|
||||||
| TileKind::Keep(_)
|
| TileKind::Keep(_)
|
||||||
| TileKind::Gate
|
| TileKind::Gate
|
||||||
| TileKind::GnarlingFortification => 5.0,
|
| TileKind::GnarlingFortification
|
||||||
|
| TileKind::AdletStronghold => 5.0,
|
||||||
};
|
};
|
||||||
let is_door_tile = |plot: Id<site2::Plot>, tile: Vec2<i32>| match site.plot(plot).kind() {
|
let is_door_tile = |plot: Id<site2::Plot>, tile: Vec2<i32>| match site.plot(plot).kind() {
|
||||||
site2::PlotKind::House(house) => house.door_tile == tile,
|
site2::PlotKind::House(house) => house.door_tile == tile,
|
||||||
|
@ -336,6 +336,7 @@ impl Site {
|
|||||||
SiteKind::GiantTree(site2) => Some(site2),
|
SiteKind::GiantTree(site2) => Some(site2),
|
||||||
SiteKind::Gnarling(site2) => Some(site2),
|
SiteKind::Gnarling(site2) => Some(site2),
|
||||||
SiteKind::Bridge(site2) => Some(site2),
|
SiteKind::Bridge(site2) => Some(site2),
|
||||||
|
SiteKind::Adlet(site2) => Some(site2),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user