more gnarling weapons

This commit is contained in:
jshipsey 2021-12-21 02:10:39 -05:00
parent 7f928d0bc0
commit 1fac6359de
32 changed files with 430 additions and 96 deletions

View File

@ -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",

View File

@ -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,
)

View 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,
)

View 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,
)

View 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,
)

View File

@ -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"),

View File

@ -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"),

View File

@ -17,5 +17,5 @@ ItemDef(
)),
quality: Low,
tags: [],
ability_spec: Some(Custom("Axe Simple")),
ability_spec: Some(Custom("Oni")),
)

View File

@ -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,
)

View File

@ -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")),
)

View File

@ -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")),
)

View File

@ -820,6 +820,10 @@
keyword: "parrot",
generic: "Parrot"
),
penguin: (
keyword: "penguin",
generic: "Penguin"
),
)
),
biped_large: (

View File

@ -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": (

View File

@ -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"),
)
),
})

View File

@ -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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

View File

@ -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,

View File

@ -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> {

View File

@ -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,

View File

@ -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,

View File

@ -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);
},
_ => {},
}

View File

@ -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),

View File

@ -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);
},
_ => {},
}

View File

@ -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,
},
}

View File

@ -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 {