mirror of
https://gitlab.com/veloren/veloren.git
synced 2024-08-30 18:12:32 +00:00
more gnarling weapons
This commit is contained in:
parent
7f928d0bc0
commit
1fac6359de
@ -65,7 +65,12 @@
|
||||
),
|
||||
Custom("Axe Simple"): (
|
||||
primary: "common.abilities.axesimple.doublestrike",
|
||||
secondary: "common.abilities.axesimple.dash",
|
||||
secondary: "common.abilities.axesimple.doublestrike",
|
||||
abilities: [],
|
||||
),
|
||||
Custom("Dagger Simple"): (
|
||||
primary: "common.abilities.daggersimple.singlestrike",
|
||||
secondary: "common.abilities.daggersimple.singlestrike",
|
||||
abilities: [],
|
||||
),
|
||||
Custom("Sword Simple"): (
|
||||
@ -84,6 +89,12 @@
|
||||
abilities: [
|
||||
],
|
||||
),
|
||||
Tool(Blowgun): (
|
||||
primary: "common.abilities.blowgun.basic",
|
||||
secondary: "common.abilities.blowgun.basic",
|
||||
abilities: [
|
||||
],
|
||||
),
|
||||
Tool(Dagger): (
|
||||
primary: "common.abilities.dagger.tempbasic",
|
||||
secondary: "common.abilities.dagger.tempbasic",
|
||||
@ -268,6 +279,11 @@
|
||||
(None, "common.abilities.custom.harvester.explodingpumpkin"),
|
||||
],
|
||||
),
|
||||
Custom("Oni"): (
|
||||
primary: "common.abilities.custom.oni.dash",
|
||||
secondary: "common.abilities.custom.oni.doublestrike",
|
||||
abilities: [],
|
||||
),
|
||||
Custom("Bird Large Breathe"): (
|
||||
primary: "common.abilities.custom.birdlargebreathe.firebomb",
|
||||
secondary: "common.abilities.custom.birdlargebreathe.triplestrike",
|
||||
|
@ -2,18 +2,18 @@ ComboMelee(
|
||||
stage_data: [
|
||||
(
|
||||
stage: 1,
|
||||
base_damage: 9.0,
|
||||
base_damage: 8.0,
|
||||
damage_increase: 1.0,
|
||||
base_poise_damage: 0,
|
||||
base_poise_damage: 15,
|
||||
poise_damage_increase: 0,
|
||||
knockback: 4.0,
|
||||
knockback: 8.0,
|
||||
range: 3.5,
|
||||
angle: 50.0,
|
||||
base_buildup_duration: 0.6,
|
||||
base_swing_duration: 0.12,
|
||||
base_buildup_duration: 0.4,
|
||||
base_swing_duration: 0.08,
|
||||
hit_timing: 0.5,
|
||||
base_recover_duration: 0.6,
|
||||
forward_movement: 3.5,
|
||||
base_recover_duration: 0.5,
|
||||
forward_movement: 2.5,
|
||||
damage_kind: Slashing,
|
||||
damage_effect: Some(Buff((
|
||||
kind: Bleeding,
|
||||
@ -24,18 +24,18 @@ ComboMelee(
|
||||
),
|
||||
(
|
||||
stage: 2,
|
||||
base_damage: 13.0,
|
||||
base_damage: 10.0,
|
||||
damage_increase: 1.5,
|
||||
base_poise_damage: 0,
|
||||
base_poise_damage: 20,
|
||||
poise_damage_increase: 0,
|
||||
knockback: 16.0,
|
||||
range: 5.5,
|
||||
angle: 15.0,
|
||||
base_buildup_duration: 0.5,
|
||||
base_swing_duration: 0.15,
|
||||
knockback: 12.0,
|
||||
range: 3.5,
|
||||
angle: 30.0,
|
||||
base_buildup_duration: 0.7,
|
||||
base_swing_duration: 0.1,
|
||||
hit_timing: 0.5,
|
||||
base_recover_duration: 1.2,
|
||||
forward_movement: 4.5,
|
||||
base_recover_duration: 0.7,
|
||||
forward_movement: 2.0,
|
||||
damage_kind: Slashing,
|
||||
damage_effect: Some(Buff((
|
||||
kind: Bleeding,
|
||||
@ -52,5 +52,5 @@ ComboMelee(
|
||||
max_speed_increase: 0.0,
|
||||
scales_from_combo: 0,
|
||||
is_interruptible: false,
|
||||
ori_modifier: 0.6,
|
||||
ori_modifier: 0.7,
|
||||
)
|
||||
|
15
assets/common/abilities/blowgun/basic.ron
Normal file
15
assets/common/abilities/blowgun/basic.ron
Normal file
@ -0,0 +1,15 @@
|
||||
BasicRanged(
|
||||
energy_cost: 0,
|
||||
buildup_duration: 0.5,
|
||||
recover_duration: 0.3,
|
||||
projectile: Arrow(
|
||||
damage: 3.5,
|
||||
knockback: 5.0,
|
||||
energy_regen: 4.0,
|
||||
),
|
||||
projectile_body: Object(Arrow),
|
||||
projectile_light: None,
|
||||
projectile_speed: 100.0,
|
||||
num_projectiles: 1,
|
||||
projectile_spread: 0.0,
|
||||
)
|
56
assets/common/abilities/custom/oni/doublestrike.ron
Normal file
56
assets/common/abilities/custom/oni/doublestrike.ron
Normal file
@ -0,0 +1,56 @@
|
||||
ComboMelee(
|
||||
stage_data: [
|
||||
(
|
||||
stage: 1,
|
||||
base_damage: 9.0,
|
||||
damage_increase: 1.0,
|
||||
base_poise_damage: 0,
|
||||
poise_damage_increase: 0,
|
||||
knockback: 4.0,
|
||||
range: 3.5,
|
||||
angle: 50.0,
|
||||
base_buildup_duration: 0.6,
|
||||
base_swing_duration: 0.12,
|
||||
hit_timing: 0.5,
|
||||
base_recover_duration: 0.6,
|
||||
forward_movement: 3.5,
|
||||
damage_kind: Slashing,
|
||||
damage_effect: Some(Buff((
|
||||
kind: Bleeding,
|
||||
dur_secs: 10.0,
|
||||
strength: DamageFraction(0.1),
|
||||
chance: 0.1,
|
||||
))),
|
||||
),
|
||||
(
|
||||
stage: 2,
|
||||
base_damage: 13.0,
|
||||
damage_increase: 1.5,
|
||||
base_poise_damage: 0,
|
||||
poise_damage_increase: 0,
|
||||
knockback: 16.0,
|
||||
range: 5.5,
|
||||
angle: 15.0,
|
||||
base_buildup_duration: 0.5,
|
||||
base_swing_duration: 0.15,
|
||||
hit_timing: 0.5,
|
||||
base_recover_duration: 1.2,
|
||||
forward_movement: 4.5,
|
||||
damage_kind: Slashing,
|
||||
damage_effect: Some(Buff((
|
||||
kind: Bleeding,
|
||||
dur_secs: 10.0,
|
||||
strength: DamageFraction(0.1),
|
||||
chance: 0.1,
|
||||
))),
|
||||
),
|
||||
],
|
||||
initial_energy_gain: 0,
|
||||
max_energy_gain: 0,
|
||||
energy_increase: 0,
|
||||
speed_increase: 0.0,
|
||||
max_speed_increase: 0.0,
|
||||
scales_from_combo: 0,
|
||||
is_interruptible: false,
|
||||
ori_modifier: 0.6,
|
||||
)
|
34
assets/common/abilities/daggersimple/singlestrike.ron
Normal file
34
assets/common/abilities/daggersimple/singlestrike.ron
Normal file
@ -0,0 +1,34 @@
|
||||
ComboMelee(
|
||||
stage_data: [
|
||||
(
|
||||
stage: 1,
|
||||
base_damage: 2.0,
|
||||
damage_increase: 1.0,
|
||||
base_poise_damage: 8,
|
||||
poise_damage_increase: 0,
|
||||
knockback: 8.0,
|
||||
range: 3.5,
|
||||
angle: 50.0,
|
||||
base_buildup_duration: 0.1,
|
||||
base_swing_duration: 0.05,
|
||||
hit_timing: 0.5,
|
||||
base_recover_duration: 0.05,
|
||||
forward_movement: 1.0,
|
||||
damage_kind: Slashing,
|
||||
damage_effect: Some(Buff((
|
||||
kind: Bleeding,
|
||||
dur_secs: 10.0,
|
||||
strength: DamageFraction(0.1),
|
||||
chance: 0.1,
|
||||
))),
|
||||
),
|
||||
],
|
||||
initial_energy_gain: 0,
|
||||
max_energy_gain: 0,
|
||||
energy_increase: 0,
|
||||
speed_increase: 0.0,
|
||||
max_speed_increase: 0.0,
|
||||
scales_from_combo: 0,
|
||||
is_interruptible: false,
|
||||
ori_modifier: 0.7,
|
||||
)
|
@ -5,7 +5,7 @@ EntityConfig (
|
||||
|
||||
loot: LootTable("common.loot_tables.dungeon.tier-0.enemy"),
|
||||
|
||||
hands: TwoHanded(Item("common.items.npc_weapons.biped_small.gnarling.adlet_bow")),
|
||||
hands: TwoHanded(Item("common.items.npc_weapons.biped_small.gnarling.axe")),
|
||||
|
||||
meta: [
|
||||
LoadoutAsset("common.loadout.dungeon.tier-0.logger"),
|
||||
|
@ -5,7 +5,7 @@ EntityConfig (
|
||||
|
||||
loot: LootTable("common.loot_tables.dungeon.tier-0.enemy"),
|
||||
|
||||
hands: TwoHanded(Item("common.items.npc_weapons.biped_small.gnarling.wooden_spear")),
|
||||
hands: TwoHanded(Item("common.items.npc_weapons.biped_small.gnarling.dagger")),
|
||||
|
||||
meta: [
|
||||
LoadoutAsset("common.loadout.dungeon.tier-0.mugger"),
|
||||
|
@ -17,5 +17,5 @@ ItemDef(
|
||||
)),
|
||||
quality: Low,
|
||||
tags: [],
|
||||
ability_spec: Some(Custom("Axe Simple")),
|
||||
ability_spec: Some(Custom("Oni")),
|
||||
)
|
@ -1,21 +0,0 @@
|
||||
ItemDef(
|
||||
name: "Adlet Bow",
|
||||
description: "Strips of leather are wrapped around the handle.",
|
||||
kind: Tool((
|
||||
kind: Bow,
|
||||
hands: Two,
|
||||
stats: Direct((
|
||||
equip_time_secs: 0.0,
|
||||
power: 0.3,
|
||||
effect_power: 0.8,
|
||||
speed: 0.5,
|
||||
crit_chance: 0.13541667,
|
||||
range: 1.0,
|
||||
energy_efficiency: 1.0,
|
||||
buff_strength: 1.0,
|
||||
)),
|
||||
)),
|
||||
quality: Moderate,
|
||||
tags: [],
|
||||
ability_spec: None,
|
||||
)
|
@ -1,8 +1,8 @@
|
||||
ItemDef(
|
||||
name: "Wooden Spear",
|
||||
name: "Gnarling Logger Axe",
|
||||
description: "Testing",
|
||||
kind: Tool((
|
||||
kind: Spear,
|
||||
kind: Axe,
|
||||
hands: Two,
|
||||
stats: Direct((
|
||||
equip_time_secs: 0.0,
|
||||
@ -17,5 +17,5 @@ ItemDef(
|
||||
)),
|
||||
quality: Low,
|
||||
tags: [],
|
||||
ability_spec: None,
|
||||
ability_spec: Some(Custom("Axe Simple")),
|
||||
)
|
@ -1,15 +1,15 @@
|
||||
ItemDef(
|
||||
name: "Gnoll Staff",
|
||||
description: "eekum bokum",
|
||||
name: "Gnarling Mugger Dagger",
|
||||
description: "Testing",
|
||||
kind: Tool((
|
||||
kind: Staff,
|
||||
kind: Dagger,
|
||||
hands: Two,
|
||||
stats: Direct((
|
||||
equip_time_secs: 0.0,
|
||||
power: 0.3,
|
||||
effect_power: 0.8,
|
||||
speed: 0.6,
|
||||
crit_chance: 0.26764706,
|
||||
effect_power: 1.0,
|
||||
speed: 1.0,
|
||||
crit_chance: 0.12037037,
|
||||
range: 1.0,
|
||||
energy_efficiency: 1.0,
|
||||
buff_strength: 1.0,
|
||||
@ -17,5 +17,5 @@ ItemDef(
|
||||
)),
|
||||
quality: Low,
|
||||
tags: [],
|
||||
ability_spec: Some(Custom("Staff Simple")),
|
||||
ability_spec: Some(Custom("Dagger Simple")),
|
||||
)
|
@ -820,6 +820,10 @@
|
||||
keyword: "parrot",
|
||||
generic: "Parrot"
|
||||
),
|
||||
penguin: (
|
||||
keyword: "penguin",
|
||||
generic: "Penguin"
|
||||
),
|
||||
)
|
||||
),
|
||||
biped_large: (
|
||||
|
@ -1112,7 +1112,15 @@
|
||||
color: None
|
||||
),
|
||||
"common.items.npc_weapons.biped_small.gnarling.blowgun": (
|
||||
vox_spec: ("weapon.biped_small.blowgun", (-2.5, -2.5, -4.0)),
|
||||
vox_spec: ("weapon.biped_small.blowgun", (-2.5, -2.5, -1.5)),
|
||||
color: None
|
||||
),
|
||||
"common.items.npc_weapons.biped_small.gnarling.axe": (
|
||||
vox_spec: ("weapon.biped_small.axe.axe", (-0.5, -3.0, -4.0)),
|
||||
color: None
|
||||
),
|
||||
"common.items.npc_weapons.biped_small.gnarling.dagger": (
|
||||
vox_spec: ("weapon.biped_small.dagger", (-0.5, -4.5, -0.0)),
|
||||
color: None
|
||||
),
|
||||
"common.items.npc_weapons.biped_small.adlet.gnoll_staff": (
|
||||
|
@ -191,8 +191,36 @@
|
||||
central: ("npc.parrot.male.torso"),
|
||||
),
|
||||
tail: (
|
||||
offset: (-1.5, -4.5, -1.5),
|
||||
offset: (-2.5, -4.5, -1.5),
|
||||
central: ("npc.parrot.male.tail"),
|
||||
)
|
||||
),
|
||||
(Penguin, Male): (
|
||||
head: (
|
||||
offset: (-1.5, -2.0, -2.0),
|
||||
central: ("npc.penguin.male.head"),
|
||||
),
|
||||
torso: (
|
||||
offset: (-3.5, -4.0, -5.5),
|
||||
central: ("npc.penguin.male.torso"),
|
||||
),
|
||||
tail: (
|
||||
offset: (-2.5, -4.5, -1.5),
|
||||
central: ("npc.penguin.male.tail"),
|
||||
)
|
||||
),
|
||||
(Penguin, Female): (
|
||||
head: (
|
||||
offset: (-1.5, -2.0, -2.0),
|
||||
central: ("npc.penguin.male.head"),
|
||||
),
|
||||
torso: (
|
||||
offset: (-3.5, -4.0, -5.5),
|
||||
central: ("npc.penguin.male.torso"),
|
||||
),
|
||||
tail: (
|
||||
offset: (-2.5, -4.5, -1.5),
|
||||
central: ("npc.penguin.male.tail"),
|
||||
)
|
||||
),
|
||||
})
|
@ -251,4 +251,40 @@
|
||||
lateral: ("npc.parrot.male.leg_r"),
|
||||
)
|
||||
),
|
||||
(Penguin, Male): (
|
||||
wing_l: (
|
||||
offset: (-0.5, -1.5, -8.0),
|
||||
lateral: ("npc.penguin.male.wing"),
|
||||
),
|
||||
wing_r: (
|
||||
offset: (-0.5, -1.5, -8.0),
|
||||
lateral: ("npc.penguin.male.wing"),
|
||||
),
|
||||
foot_l: (
|
||||
offset: (-2.5, 0.0, -6.0),
|
||||
lateral: ("npc.penguin.male.leg_r"),
|
||||
),
|
||||
foot_r: (
|
||||
offset: (-2.5, 0.0, -6.0),
|
||||
lateral: ("npc.penguin.male.leg_r"),
|
||||
)
|
||||
),
|
||||
(Penguin, Female): (
|
||||
wing_l: (
|
||||
offset: (-0.5, -1.5, -8.0),
|
||||
lateral: ("npc.penguin.male.wing"),
|
||||
),
|
||||
wing_r: (
|
||||
offset: (-0.5, -1.5, -8.0),
|
||||
lateral: ("npc.penguin.male.wing"),
|
||||
),
|
||||
foot_l: (
|
||||
offset: (-2.5, 0.0, -6.0),
|
||||
lateral: ("npc.penguin.male.leg_r"),
|
||||
),
|
||||
foot_r: (
|
||||
offset: (-2.5, 0.0, -6.0),
|
||||
lateral: ("npc.penguin.male.leg_r"),
|
||||
)
|
||||
),
|
||||
})
|
BIN
assets/voxygen/voxel/npc/penguin/male/head.vox
(Stored with Git LFS)
Normal file
BIN
assets/voxygen/voxel/npc/penguin/male/head.vox
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
assets/voxygen/voxel/npc/penguin/male/leg_r.vox
(Stored with Git LFS)
Normal file
BIN
assets/voxygen/voxel/npc/penguin/male/leg_r.vox
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
assets/voxygen/voxel/npc/penguin/male/tail.vox
(Stored with Git LFS)
Normal file
BIN
assets/voxygen/voxel/npc/penguin/male/tail.vox
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
assets/voxygen/voxel/npc/penguin/male/torso.vox
(Stored with Git LFS)
Normal file
BIN
assets/voxygen/voxel/npc/penguin/male/torso.vox
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
assets/voxygen/voxel/npc/penguin/male/wing.vox
(Stored with Git LFS)
Normal file
BIN
assets/voxygen/voxel/npc/penguin/male/wing.vox
(Stored with Git LFS)
Normal file
Binary file not shown.
@ -198,6 +198,7 @@ impl Body {
|
||||
bird_medium::Species::Goose => 3.5, // ~✅ Swan geese are 2.8-3.5 kg
|
||||
bird_medium::Species::Owl => 2.0,
|
||||
bird_medium::Species::Parrot => 2.0,
|
||||
bird_medium::Species::Penguin => 8.0,
|
||||
bird_medium::Species::Peacock => 5.0,
|
||||
},
|
||||
Body::BirdLarge(_) => 100.0,
|
||||
@ -692,6 +693,7 @@ impl Body {
|
||||
bird_medium::Species::Duck => 1,
|
||||
bird_medium::Species::Goose => 1,
|
||||
bird_medium::Species::Parrot => 1,
|
||||
bird_medium::Species::Penguin => 1,
|
||||
bird_medium::Species::Peacock => 1,
|
||||
bird_medium::Species::Eagle => 1,
|
||||
_ => 2,
|
||||
|
@ -41,6 +41,7 @@ make_case_elim!(
|
||||
Eagle = 4,
|
||||
Owl = 5,
|
||||
Parrot = 6,
|
||||
Penguin = 7,
|
||||
}
|
||||
);
|
||||
|
||||
@ -56,6 +57,7 @@ pub struct AllSpecies<SpeciesMeta> {
|
||||
pub eagle: SpeciesMeta,
|
||||
pub owl: SpeciesMeta,
|
||||
pub parrot: SpeciesMeta,
|
||||
pub penguin: SpeciesMeta,
|
||||
}
|
||||
|
||||
impl<'a, SpeciesMeta> core::ops::Index<&'a Species> for AllSpecies<SpeciesMeta> {
|
||||
@ -71,11 +73,12 @@ impl<'a, SpeciesMeta> core::ops::Index<&'a Species> for AllSpecies<SpeciesMeta>
|
||||
Species::Eagle => &self.eagle,
|
||||
Species::Owl => &self.owl,
|
||||
Species::Parrot => &self.parrot,
|
||||
Species::Penguin => &self.penguin,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub const ALL_SPECIES: [Species; 7] = [
|
||||
pub const ALL_SPECIES: [Species; 8] = [
|
||||
Species::Duck,
|
||||
Species::Chicken,
|
||||
Species::Goose,
|
||||
@ -83,6 +86,7 @@ pub const ALL_SPECIES: [Species; 7] = [
|
||||
Species::Eagle,
|
||||
Species::Owl,
|
||||
Species::Parrot,
|
||||
Species::Penguin,
|
||||
];
|
||||
|
||||
impl<'a, SpeciesMeta: 'a> IntoIterator for &'a AllSpecies<SpeciesMeta> {
|
||||
|
@ -34,6 +34,14 @@ pub enum RtSimEntityKind {
|
||||
Merchant,
|
||||
}
|
||||
|
||||
const BIRD_MEDIUM_ROSTER: &[comp::bird_medium::Species] = &[
|
||||
// Disallows flightless birds
|
||||
comp::bird_medium::Species::Duck,
|
||||
comp::bird_medium::Species::Goose,
|
||||
comp::bird_medium::Species::Parrot,
|
||||
comp::bird_medium::Species::Eagle,
|
||||
];
|
||||
|
||||
const BIRD_LARGE_ROSTER: &[comp::bird_large::Species] = &[
|
||||
// Flame Wyvern not incuded until proper introduction
|
||||
comp::bird_large::Species::Phoenix,
|
||||
@ -60,7 +68,7 @@ impl Entity {
|
||||
// we want 5% airships, 45% birds, 50% humans
|
||||
x if x < 0.05 => comp::ship::Body::random_with(&mut self.rng(PERM_BODY)).into(),
|
||||
x if x < 0.45 => {
|
||||
let species = *(&comp::bird_medium::ALL_SPECIES)
|
||||
let species = *BIRD_MEDIUM_ROSTER
|
||||
.choose(&mut self.rng(PERM_SPECIES))
|
||||
.unwrap();
|
||||
comp::bird_medium::Body::random_with(&mut self.rng(PERM_BODY), &species)
|
||||
@ -782,6 +790,7 @@ fn bird_medium_config(body: comp::bird_medium::Body) -> &'static str {
|
||||
comp::bird_medium::Species::Eagle => "common.entity.wild.peaceful.eagle",
|
||||
comp::bird_medium::Species::Owl => "common.entity.wild.peaceful.owl",
|
||||
comp::bird_medium::Species::Parrot => "common.entity.wild.peaceful.parrot",
|
||||
_ => unimplemented!(),
|
||||
}
|
||||
}
|
||||
|
||||
@ -826,7 +835,7 @@ mod tests {
|
||||
std::mem::drop(EntityInfo::at(dummy_pos).with_asset_expect(male_config));
|
||||
}
|
||||
// Bird Medium test
|
||||
for bird_med_species in comp::bird_medium::ALL_SPECIES {
|
||||
for bird_med_species in BIRD_MEDIUM_ROSTER {
|
||||
let female_body = comp::bird_medium::Body {
|
||||
species: bird_med_species,
|
||||
body_type: comp::bird_medium::BodyType::Female,
|
||||
|
@ -1743,7 +1743,7 @@ impl<'a> AgentData<'a> {
|
||||
if let Some(ability_spec) = item.ability_spec() {
|
||||
match ability_spec {
|
||||
AbilitySpec::Custom(spec) => match spec.as_str() {
|
||||
"Axe Simple" | "Sword Simple" => Tactic::Sword,
|
||||
"Axe Simple" | "Oni" | "Sword Simple" => Tactic::Sword,
|
||||
"Staff Simple" => Tactic::Staff,
|
||||
"Bow Simple" => Tactic::Bow,
|
||||
"Stone Golem" => Tactic::StoneGolem,
|
||||
|
@ -64,10 +64,15 @@ impl Animation for AlphaAnimation {
|
||||
let subtract = global_time - timer;
|
||||
let check = subtract - subtract.trunc();
|
||||
let mirror = (check - 0.5).signum();
|
||||
let move1 = move1base * pullback * mirror;
|
||||
let move2 = move2base * pullback * mirror;
|
||||
let _move1 = move1base * pullback * mirror;
|
||||
let move1abs = move1base * pullback;
|
||||
let move2abs = move2base * pullback;
|
||||
next.hand_l.position = Vec3::new(s_a.grip.0 * 4.0, 0.0, s_a.grip.2);
|
||||
next.hand_r.position = Vec3::new(-s_a.grip.0 * 4.0, 0.0, s_a.grip.2);
|
||||
next.main.position = Vec3::new(0.0, 0.0, 0.0);
|
||||
next.main.orientation = Quaternion::rotation_x(0.0);
|
||||
next.hand_l.orientation = Quaternion::rotation_x(0.0);
|
||||
next.hand_r.orientation = Quaternion::rotation_x(0.0);
|
||||
match active_tool_kind {
|
||||
Some(ToolKind::Spear) => {
|
||||
next.head.position = Vec3::new(0.0, s_a.head.0, s_a.head.1);
|
||||
@ -82,15 +87,6 @@ impl Animation for AlphaAnimation {
|
||||
next.pants.orientation = Quaternion::rotation_x(move1abs * 0.2 + move2abs * -0.3)
|
||||
* Quaternion::rotation_z(move1abs * -0.2 + move2abs * 0.2);
|
||||
|
||||
next.main.position = Vec3::new(0.0, 0.0, 0.0);
|
||||
next.main.orientation = Quaternion::rotation_x(0.0);
|
||||
|
||||
next.hand_l.position = Vec3::new(s_a.grip.0 * 4.0, 0.0, s_a.grip.2);
|
||||
next.hand_r.position = Vec3::new(-s_a.grip.0 * 4.0, 0.0, s_a.grip.2);
|
||||
|
||||
next.hand_l.orientation = Quaternion::rotation_x(0.0);
|
||||
next.hand_r.orientation = Quaternion::rotation_x(0.0);
|
||||
|
||||
next.control_l.position = Vec3::new(1.0 - s_a.grip.0 * 2.0, 2.0, -2.0);
|
||||
next.control_r.position = Vec3::new(-1.0 + s_a.grip.0 * 2.0, 2.0, 2.0);
|
||||
|
||||
@ -116,24 +112,60 @@ impl Animation for AlphaAnimation {
|
||||
next.tail.orientation = Quaternion::rotation_x(0.05 * fastalt * speednormcancel)
|
||||
* Quaternion::rotation_z(fast * 0.15 * speednormcancel);
|
||||
},
|
||||
Some(ToolKind::Natural) => {
|
||||
next.hand_l.position = Vec3::new(
|
||||
-s_a.hand.0,
|
||||
s_a.hand.1 + move1abs * 3.0 + move2abs * 3.0,
|
||||
s_a.hand.2 + move1abs * 1.5,
|
||||
);
|
||||
next.hand_r.position = Vec3::new(
|
||||
s_a.hand.0,
|
||||
s_a.hand.1 + move1abs * 3.0 + move2abs * 3.0,
|
||||
s_a.hand.2 + move1abs * 1.5,
|
||||
Some(ToolKind::Axe) => {
|
||||
next.head.orientation = Quaternion::rotation_z(move1abs * 0.3 + move2abs * -0.6);
|
||||
next.control_l.position = Vec3::new(2.0 - s_a.grip.0 * 2.0, 1.0, 3.0);
|
||||
next.control_r.position = Vec3::new(
|
||||
9.0 + move1abs * -10.0 + s_a.grip.0 * 2.0,
|
||||
-1.0 + move1abs * 2.0,
|
||||
move1abs * 3.0 - 2.0,
|
||||
);
|
||||
|
||||
next.hand_l.orientation = Quaternion::rotation_x(1.7 + move1 * 1.3 + move2 * -2.4)
|
||||
* Quaternion::rotation_y(-0.3 + move1abs * -0.35 + move2abs * 0.6);
|
||||
next.hand_r.orientation = Quaternion::rotation_x(1.7 - move1 * 1.3 + move2 * 2.4)
|
||||
* Quaternion::rotation_y(0.3 + move1abs * -0.35 + move2abs * 0.6);
|
||||
next.head.orientation = Quaternion::rotation_x(move1abs * 0.1 + move2abs * -0.2)
|
||||
* Quaternion::rotation_y(move1 * 0.3 + move2 * -0.4);
|
||||
next.control.position = Vec3::new(
|
||||
-5.0 + move1abs * 5.0,
|
||||
-1.0 + s_a.grip.2,
|
||||
-1.0 + move1abs * 3.0 + -s_a.grip.2 / 2.5 + s_a.grip.0 * -2.0,
|
||||
);
|
||||
|
||||
next.control_l.orientation = Quaternion::rotation_x(PI / 2.0 + move2abs * 1.0)
|
||||
* Quaternion::rotation_y(-0.0)
|
||||
* Quaternion::rotation_z(-0.0);
|
||||
next.control_r.orientation =
|
||||
Quaternion::rotation_x(0.5 + move1abs * 1.5 + s_a.grip.0 * 0.2)
|
||||
* Quaternion::rotation_y(0.2 + s_a.grip.0 * 0.2)
|
||||
* Quaternion::rotation_z(-0.0);
|
||||
|
||||
next.control.orientation = Quaternion::rotation_x(-0.3 + move2abs * -1.0)
|
||||
* Quaternion::rotation_y(move1abs * -0.9 + move2abs * 2.0)
|
||||
* Quaternion::rotation_z(-0.3);
|
||||
},
|
||||
Some(ToolKind::Dagger) => {
|
||||
next.head.orientation = Quaternion::rotation_x(move1abs * 0.15 + move2abs * -0.15)
|
||||
* Quaternion::rotation_z(move1abs * 0.15 + move2abs * -0.3);
|
||||
next.control_l.position = Vec3::new(2.0 - s_a.grip.0 * 2.0, 1.0, 3.0);
|
||||
next.control_r.position = Vec3::new(
|
||||
9.0 + move1abs * -7.0 + s_a.grip.0 * 2.0,
|
||||
-1.0 + move1abs * 6.0,
|
||||
-2.0,
|
||||
);
|
||||
|
||||
next.control.position = Vec3::new(
|
||||
-5.0 + move1abs * 5.0 + move2abs * 9.0,
|
||||
-1.0 + move2abs * -3.0 + s_a.grip.2,
|
||||
-1.0 + move1abs * 3.0 + -s_a.grip.2 / 2.5 + s_a.grip.0 * -2.0,
|
||||
);
|
||||
|
||||
next.control_l.orientation = Quaternion::rotation_x(PI / 2.0)
|
||||
* Quaternion::rotation_y(-0.0)
|
||||
* Quaternion::rotation_z(-0.0);
|
||||
next.control_r.orientation =
|
||||
Quaternion::rotation_x(0.5 + move1abs * 1.5 + s_a.grip.0 * 0.2)
|
||||
* Quaternion::rotation_y(0.2 + s_a.grip.0 * 0.2)
|
||||
* Quaternion::rotation_z(-0.0);
|
||||
|
||||
next.control.orientation = Quaternion::rotation_x(-0.3 + move2abs * -1.0)
|
||||
* Quaternion::rotation_y(move1abs * -0.4 + move2abs * 1.0)
|
||||
* Quaternion::rotation_z(-0.3 + move2abs * -2.2);
|
||||
},
|
||||
_ => {},
|
||||
}
|
||||
|
@ -110,6 +110,37 @@ impl Animation for ShootAnimation {
|
||||
next.control.orientation = Quaternion::rotation_x(-0.3 + move1abs * 0.4)
|
||||
* Quaternion::rotation_y(0.5 * speednorm);
|
||||
},
|
||||
Some(ToolKind::Blowgun) => {
|
||||
let (move1base, move2base, move3) = match stage_section {
|
||||
Some(StageSection::Buildup) => (anim_time, 0.0, 0.0),
|
||||
Some(StageSection::Action) => (1.0, anim_time.powf(0.25), 0.0),
|
||||
Some(StageSection::Recover) => (1.0, 1.0, anim_time),
|
||||
_ => (0.0, 0.0, 0.0),
|
||||
};
|
||||
let pullback = 1.0 - move3;
|
||||
let move1abs = move1base * pullback;
|
||||
let move2abs = move2base * pullback;
|
||||
next.head.orientation = Quaternion::rotation_x(move1abs * 0.5 + move2abs * -0.7);
|
||||
next.control_l.position = Vec3::new(1.0 - s_a.grip.0 * 2.0, 0.0, 3.0);
|
||||
next.control_r.position = Vec3::new(-1.0 + s_a.grip.0 * 2.0, 0.0, 4.0);
|
||||
|
||||
next.control.position = Vec3::new(
|
||||
0.0,
|
||||
move1abs * -2.0 + move2abs * 1.0 + s_a.grip.2,
|
||||
move1abs * 3.5 + move2abs * -2.0 + 4.0 - s_a.grip.2 / 2.5 + s_a.grip.0 * -2.0,
|
||||
);
|
||||
|
||||
next.control_l.orientation =
|
||||
Quaternion::rotation_x(3.8 + move1abs * 0.4 + move2abs * -0.5)
|
||||
* Quaternion::rotation_y(-0.3);
|
||||
next.control_r.orientation = Quaternion::rotation_x(
|
||||
3.5 + move1abs * 0.4 + move2abs * -0.5 + s_a.grip.0 * 0.2,
|
||||
) * Quaternion::rotation_y(0.5 + s_a.grip.0 * 0.2);
|
||||
|
||||
next.control.orientation = Quaternion::rotation_x(
|
||||
-2.2 + move1abs * 0.7 + move2abs * -0.2 + 0.5 * speednorm,
|
||||
);
|
||||
},
|
||||
Some(ToolKind::Staff) => {
|
||||
let (move1base, _move2base, move3) = match stage_section {
|
||||
Some(StageSection::Buildup) => (anim_time.powf(0.25), 0.0, 0.0),
|
||||
|
@ -60,7 +60,7 @@ impl Animation for WieldAnimation {
|
||||
* Quaternion::rotation_z(fast * 0.15 * speednormcancel);
|
||||
|
||||
next.main.position = Vec3::new(0.0, 0.0, 0.0);
|
||||
next.main.orientation = Quaternion::rotation_x(0.0);
|
||||
next.main.orientation = Quaternion::rotation_z(0.0);
|
||||
|
||||
next.hand_l.position = Vec3::new(s_a.grip.0 * 4.0, 0.0, s_a.grip.2);
|
||||
next.hand_r.position = Vec3::new(-s_a.grip.0 * 4.0, 0.0, s_a.grip.2);
|
||||
@ -95,7 +95,28 @@ impl Animation for WieldAnimation {
|
||||
|
||||
next.control.orientation = Quaternion::rotation_x(-1.35 + 0.5 * speednorm);
|
||||
},
|
||||
Some(ToolKind::Blowgun) => {
|
||||
next.control_l.position = Vec3::new(1.0 - s_a.grip.0 * 2.0, 0.0, 3.0);
|
||||
next.control_r.position = Vec3::new(-1.0 + s_a.grip.0 * 2.0, 0.0, 4.0);
|
||||
|
||||
next.control.position = Vec3::new(
|
||||
0.0,
|
||||
s_a.grip.2,
|
||||
4.0 - s_a.grip.2 / 2.5
|
||||
+ s_a.grip.0 * -2.0
|
||||
+ fastacc * 0.5
|
||||
+ fastalt * 0.1 * speednormcancel
|
||||
+ speednorm * 4.0,
|
||||
);
|
||||
|
||||
next.control_l.orientation =
|
||||
Quaternion::rotation_x(3.8 + slow * 0.1) * Quaternion::rotation_y(-0.3);
|
||||
next.control_r.orientation =
|
||||
Quaternion::rotation_x(3.5 + slow * 0.1 + s_a.grip.0 * 0.2)
|
||||
* Quaternion::rotation_y(0.5 + slow * 0.0 + s_a.grip.0 * 0.2);
|
||||
|
||||
next.control.orientation = Quaternion::rotation_x(-2.2 + 0.5 * speednorm);
|
||||
},
|
||||
Some(ToolKind::Bow) => {
|
||||
next.control_l.position = Vec3::new(1.0 - s_a.grip.0 * 2.0, 0.0, 0.0);
|
||||
next.control_r.position = Vec3::new(-1.0 + s_a.grip.0 * 2.0, 6.0, -2.0);
|
||||
@ -146,13 +167,51 @@ impl Animation for WieldAnimation {
|
||||
* Quaternion::rotation_y(-0.2 * speednorm)
|
||||
* Quaternion::rotation_z(0.5);
|
||||
},
|
||||
Some(ToolKind::Natural) => {
|
||||
next.hand_l.position = Vec3::new(-s_a.hand.0, s_a.hand.1, s_a.hand.2);
|
||||
next.hand_r.position = Vec3::new(s_a.hand.0, s_a.hand.1, s_a.hand.2);
|
||||
Some(ToolKind::Axe) => {
|
||||
next.control_l.position = Vec3::new(2.0 - s_a.grip.0 * 2.0, 1.0, 3.0);
|
||||
next.control_r.position =
|
||||
Vec3::new(9.0 + s_a.grip.0 * 2.0, -1.0, -2.0 + speednorm * -3.0);
|
||||
|
||||
next.hand_l.orientation =
|
||||
Quaternion::rotation_x(1.7) * Quaternion::rotation_y(-0.3);
|
||||
next.hand_r.orientation = Quaternion::rotation_x(1.7) * Quaternion::rotation_y(0.3);
|
||||
next.control.position = Vec3::new(
|
||||
-5.0,
|
||||
-1.0 + s_a.grip.2,
|
||||
-1.0 + -s_a.grip.2 / 2.5 + s_a.grip.0 * -2.0 + speednorm * 2.0,
|
||||
);
|
||||
|
||||
next.control_l.orientation = Quaternion::rotation_x(PI / 2.0 + slow * 0.1)
|
||||
* Quaternion::rotation_y(-0.0)
|
||||
* Quaternion::rotation_z(-0.0);
|
||||
next.control_r.orientation =
|
||||
Quaternion::rotation_x(0.5 + slow * 0.1 + s_a.grip.0 * 0.2)
|
||||
* Quaternion::rotation_y(0.2 + slow * 0.0 + s_a.grip.0 * 0.2)
|
||||
* Quaternion::rotation_z(-0.0);
|
||||
|
||||
next.control.orientation = Quaternion::rotation_x(-0.3 + 0.2 * speednorm)
|
||||
* Quaternion::rotation_y(-0.2 * speednorm)
|
||||
* Quaternion::rotation_z(-0.3);
|
||||
},
|
||||
Some(ToolKind::Dagger) => {
|
||||
next.control_l.position = Vec3::new(2.0 - s_a.grip.0 * 2.0, 1.0, 3.0);
|
||||
next.control_r.position =
|
||||
Vec3::new(9.0 + s_a.grip.0 * 2.0, -1.0, -2.0 + speednorm * -3.0);
|
||||
|
||||
next.control.position = Vec3::new(
|
||||
-5.0,
|
||||
-1.0 + s_a.grip.2,
|
||||
-1.0 + -s_a.grip.2 / 2.5 + s_a.grip.0 * -2.0 + speednorm * 2.0,
|
||||
);
|
||||
|
||||
next.control_l.orientation = Quaternion::rotation_x(PI / 2.0 + slow * 0.1)
|
||||
* Quaternion::rotation_y(-0.0)
|
||||
* Quaternion::rotation_z(-0.0);
|
||||
next.control_r.orientation =
|
||||
Quaternion::rotation_x(0.5 + slow * 0.1 + s_a.grip.0 * 0.2)
|
||||
* Quaternion::rotation_y(0.2 + slow * 0.0 + s_a.grip.0 * 0.2)
|
||||
* Quaternion::rotation_z(-0.0);
|
||||
|
||||
next.control.orientation = Quaternion::rotation_x(-0.3 + 0.2 * speednorm)
|
||||
* Quaternion::rotation_y(-0.2 * speednorm)
|
||||
* Quaternion::rotation_z(-0.3);
|
||||
},
|
||||
_ => {},
|
||||
}
|
||||
|
@ -111,6 +111,7 @@ impl<'a> From<&'a Body> for SkeletonAttr {
|
||||
(Owl, Male) => (2.5, 5.0),
|
||||
(Owl, Female) => (2.5, 7.0),
|
||||
(Parrot, _) => (0.5, 4.5),
|
||||
(Penguin, _) => (1.5, 6.0),
|
||||
},
|
||||
chest: match (body.species, body.body_type) {
|
||||
(Duck, _) => (0.0, 6.0),
|
||||
@ -122,6 +123,7 @@ impl<'a> From<&'a Body> for SkeletonAttr {
|
||||
(Owl, Male) => (0.0, 4.5),
|
||||
(Owl, Female) => (0.0, 4.5),
|
||||
(Parrot, _) => (0.0, 5.0),
|
||||
(Penguin, _) => (0.0, 8.0),
|
||||
},
|
||||
tail: match (body.species, body.body_type) {
|
||||
(Duck, _) => (-5.0, 1.0),
|
||||
@ -133,6 +135,7 @@ impl<'a> From<&'a Body> for SkeletonAttr {
|
||||
(Owl, Male) => (-6.0, -2.0),
|
||||
(Owl, Female) => (-6.0, -2.5),
|
||||
(Parrot, _) => (-8.0, -2.0),
|
||||
(Penguin, _) => (-3.0, -4.0),
|
||||
},
|
||||
wing: match (body.species, body.body_type) {
|
||||
(Duck, _) => (3.5, -0.5, 2.0),
|
||||
@ -144,6 +147,7 @@ impl<'a> From<&'a Body> for SkeletonAttr {
|
||||
(Owl, Male) => (3.5, -5.5, 4.0),
|
||||
(Owl, Female) => (3.5, -6.0, 3.5),
|
||||
(Parrot, _) => (2.0, -4.5, 3.0),
|
||||
(Penguin, _) => (4.0, 0.5, 1.0),
|
||||
},
|
||||
foot: match (body.species, body.body_type) {
|
||||
(Duck, _) => (2.5, -2.0, 4.0),
|
||||
@ -155,6 +159,7 @@ impl<'a> From<&'a Body> for SkeletonAttr {
|
||||
(Owl, Male) => (1.5, -2.5, 7.0),
|
||||
(Owl, Female) => (1.5, -3.0, 6.5),
|
||||
(Parrot, _) => (1.5, -3.0, 3.0),
|
||||
(Penguin, _) => (2.5, -2.0, 6.0),
|
||||
},
|
||||
feed: match (body.species, body.body_type) {
|
||||
(Chicken, _) => 1.2,
|
||||
@ -162,6 +167,7 @@ impl<'a> From<&'a Body> for SkeletonAttr {
|
||||
(Peacock, _) => 1.6,
|
||||
(Eagle, _) => 1.2,
|
||||
(Parrot, _) => 1.2,
|
||||
(Penguin, _) => 1.2,
|
||||
_ => 1.0,
|
||||
},
|
||||
}
|
||||
|
@ -474,10 +474,10 @@ pub fn apply_spots_to(canvas: &mut Canvas, _dynamic_rng: &mut impl Rng) {
|
||||
base_structures: Some("spots_grasslands.gnarling_totem"),
|
||||
entity_radius: 30.0,
|
||||
entities: &[
|
||||
(15..20, "common.entity.dungeon.tier-0.mugger"),
|
||||
(15..20, "common.entity.dungeon.tier-0.stalker"),
|
||||
(15..20, "common.entity.dungeon.tier-0.logger"),
|
||||
(15..20, "common.entity.dungeon.tier-0.chieftain"),
|
||||
(2..4, "common.entity.dungeon.tier-0.mugger"),
|
||||
(2..4, "common.entity.dungeon.tier-0.stalker"),
|
||||
(2..4, "common.entity.dungeon.tier-0.logger"),
|
||||
(1..2, "common.entity.dungeon.tier-0.chieftain"),
|
||||
],
|
||||
},
|
||||
Spot::GnarlingTree => SpotConfig {
|
||||
|
Loading…
Reference in New Issue
Block a user