Husk brute animations

This commit is contained in:
Snowram 2021-06-23 01:43:18 +02:00
parent 58b95d12d4
commit 8760b69345
23 changed files with 310 additions and 29 deletions

View File

@ -34,6 +34,11 @@
secondary: "common.abilities.custom.husk.triplestrike",
abilities: [],
),
Custom("Husk Brute"): (
primary: "common.abilities.custom.husk_brute.singlestrike",
secondary: "common.abilities.custom.husk_brute.chargedmelee",
abilities: [],
),
Tool(Spear): (
primary: "common.abilities.spear.doublestrike",
secondary: "common.abilities.spear.dash",

View File

@ -0,0 +1,18 @@
ChargedMelee(
energy_cost: 0,
energy_drain: 0,
initial_damage: 0,
scaled_damage: 500,
initial_poise_damage: 50,
scaled_poise_damage: 150,
initial_knockback: 0.0,
scaled_knockback: 0.0,
range: 5.0,
max_angle: 45.0,
speed: 1.0,
charge_duration: 1.5,
swing_duration: 0.1,
hit_timing: 0.8,
recover_duration: 0.5,
damage_kind: Crushing,
)

View File

@ -0,0 +1,28 @@
ComboMelee(
stage_data: [
(
stage: 1,
base_damage: 160,
damage_increase: 0,
base_poise_damage: 12,
poise_damage_increase: 0,
knockback: 5.0,
range: 2.5,
angle: 60.0,
base_buildup_duration: 0.25,
base_swing_duration: 0.07,
hit_timing: 0.5,
base_recover_duration: 0.25,
forward_movement: 0.5,
damage_kind: Crushing,
),
],
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,12 @@
EntityConfig (
name: Some("Husk Brute"),
body: Some(RandomWith("husk_brute")),
loot: Some(LootTable("common.loot_tables.dungeon.tier-5.minion")),
main_tool: None,
second_tool: None,
loadout_asset: None,
skillset_asset: None,
)

View File

@ -0,0 +1,18 @@
ItemDef(
name: "Husk Brute",
description: "testing123",
kind: Tool((
kind: Natural,
hands: Two,
stats: Direct((
equip_time_secs: 0.0,
power: 1.0,
poise_strength: 1.0,
speed: 1.0,
crit_chance: 0.0625,
)),
)),
quality: Low,
tags: [],
ability_spec: Some(Custom("Husk Brute")),
)

View File

@ -0,0 +1,6 @@
[
(1.5, Item("common.items.food.meat.beast_small_raw")),
(0.5, Item("common.items.food.meat.beast_large_raw")),
(1.0, Item("common.items.crafting_ing.hide.animal_hide")),
(5.0, ItemQuantity("common.items.crafting_ing.cloth.wool", 2, 5)),
]

View File

@ -1050,6 +1050,10 @@
vox_spec: ("armor.empty", (0.0, 0.0, 0.0)),
color: None
),
"common.items.npc_weapons.unique.husk_brute": (
vox_spec: ("armor.empty", (0.0, 0.0, 0.0)),
color: None
),
"common.items.npc_weapons.axe.minotaur_axe": (
vox_spec: ("weapon.axe.2haxe_minotaur", (-2.5, -9.0, -8.0)),
color: None

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -218,6 +218,8 @@ impl<'a> From<&'a Body> for Psyche {
quadruped_medium::Species::Darkhound => 0.9,
quadruped_medium::Species::Dreadhorn => 0.8,
quadruped_medium::Species::Snowleopard => 0.7,
quadruped_medium::Species::Llama => 0.6,
quadruped_medium::Species::Alpaca => 0.6,
_ => 0.5,
},
Body::QuadrupedLow(quadruped_low) => match quadruped_low.species {

View File

@ -180,6 +180,9 @@ impl Body {
biped_large::Species::Mightysaurok => 400.0,
biped_large::Species::Mindflayer => 420.0,
biped_large::Species::Minotaur => 500.0,
biped_large::Species::Cavetroll => 600.0,
biped_large::Species::Mountaintroll => 600.0,
biped_large::Species::Swamptroll => 600.0,
_ => 400.0,
},
Body::BipedSmall(_) => 50.0,
@ -308,6 +311,7 @@ impl Body {
biped_large::Species::Harvester => Vec3::new(4.6, 3.0, 5.4),
biped_large::Species::Cultistwarlord => Vec3::new(3.0, 3.0, 4.5),
biped_large::Species::Cultistwarlock => Vec3::new(3.0, 3.0, 4.5),
biped_large::Species::Huskbrute => Vec3::new(4.6, 3.0, 5.0),
_ => Vec3::new(4.6, 3.0, 6.0),
},
Body::BipedSmall(body) => match body.species {
@ -359,8 +363,10 @@ impl Body {
quadruped_medium::Species::Saber => Vec3::new(2.0, 3.0, 2.0),
quadruped_medium::Species::Tarasque => Vec3::new(2.0, 4.0, 2.6),
quadruped_medium::Species::Yak => Vec3::new(2.0, 3.6, 3.0),
quadruped_medium::Species::Mammoth => Vec3::new(5.0, 7.0, 8.0),
quadruped_medium::Species::Mammoth => Vec3::new(2.0, 7.0, 8.0),
quadruped_medium::Species::Ngoubou => Vec3::new(2.0, 3.2, 2.4),
quadruped_medium::Species::Llama => Vec3::new(2.0, 2.5, 2.6),
quadruped_medium::Species::Alpaca => Vec3::new(2.0, 2.0, 2.0),
_ => Vec3::new(2.0, 3.0, 2.0),
},
Body::QuadrupedSmall(body) => match body.species {

View File

@ -175,7 +175,9 @@ fn default_main_tool(body: &Body) -> Item {
| quadruped_medium::Species::Kelpie
| quadruped_medium::Species::Hirdrasil
| quadruped_medium::Species::Deer
| quadruped_medium::Species::Antelope => Some(Item::new_from_asset_expect(
| quadruped_medium::Species::Antelope
| quadruped_medium::Species::Llama
| quadruped_medium::Species::Alpaca => Some(Item::new_from_asset_expect(
"common.items.npc_weapons.unique.quadmedhoof",
)),
quadruped_medium::Species::Saber => Some(Item::new_from_asset_expect(
@ -267,9 +269,9 @@ fn default_main_tool(body: &Body) -> Item {
(biped_large::Species::Wendigo, _) => Some(Item::new_from_asset_expect(
"common.items.npc_weapons.unique.wendigo_magic",
)),
(biped_large::Species::Werewolf | biped_large::Species::Huskbrute, _) => Some(
Item::new_from_asset_expect("common.items.npc_weapons.unique.beast_claws"),
),
(biped_large::Species::Werewolf, _) => Some(Item::new_from_asset_expect(
"common.items.npc_weapons.unique.beast_claws",
)),
(biped_large::Species::Cyclops, _) => Some(Item::new_from_asset_expect(
"common.items.npc_weapons.hammer.cyclops_hammer",
)),
@ -303,6 +305,9 @@ fn default_main_tool(body: &Body) -> Item {
(biped_large::Species::Cultistwarlock, _) => Some(Item::new_from_asset_expect(
"common.items.weapons.staff.bipedlarge-cultist_staff",
)),
(biped_large::Species::Huskbrute, _) => Some(Item::new_from_asset_expect(
"common.items.npc_weapons.unique.husk_brute",
)),
},
Body::Object(body) => match body {
object::Body::Crossbow => Some(Item::new_from_asset_expect(

View File

@ -70,8 +70,8 @@ impl Body {
quadruped_medium::Species::Snowleopard => 160.0,
quadruped_medium::Species::Mammoth => 180.0,
quadruped_medium::Species::Ngoubou => 170.0,
quadruped_medium::Species::Llama => 130.0,
quadruped_medium::Species::Alpaca => 120.0,
quadruped_medium::Species::Llama => 120.0,
quadruped_medium::Species::Alpaca => 110.0,
},
Body::BipedLarge(body) => match body.species {
biped_large::Species::Slysaurok => 100.0,

View File

@ -369,7 +369,7 @@ pub fn handle_destroy(server: &mut Server, entity: EcsEntity, cause: HealthSourc
"common.loot_tables.creature.quad_small.mushroom"
},
quadruped_small::Species::Sheep => {
"common.loot_tables.creature.quad_small.sheep"
"common.loot_tables.creature.quad_small.wool"
},
quadruped_small::Species::Skunk
| quadruped_small::Species::Quokka
@ -407,8 +407,7 @@ pub fn handle_destroy(server: &mut Server, entity: EcsEntity, cause: HealthSourc
quadruped_medium::Species::Dreadhorn => {
"common.loot_tables.creature.quad_medium.dreadhorn"
},
quadruped_medium::Species::Mouflon
| quadruped_medium::Species::Camel
quadruped_medium::Species::Camel
| quadruped_medium::Species::Deer
| quadruped_medium::Species::Hirdrasil
| quadruped_medium::Species::Horse
@ -418,10 +417,13 @@ pub fn handle_destroy(server: &mut Server, entity: EcsEntity, cause: HealthSourc
| quadruped_medium::Species::Antelope
| quadruped_medium::Species::Kelpie
| quadruped_medium::Species::Cattle
| quadruped_medium::Species::Yak
| quadruped_medium::Species::Yak => {
"common.loot_tables.creature.quad_medium.gentle"
},
quadruped_medium::Species::Mouflon
| quadruped_medium::Species::Llama
| quadruped_medium::Species::Alpaca => {
"common.loot_tables.creature.quad_medium.gentle"
"common.loot_tables.creature.quad_medium.wool"
},
quadruped_medium::Species::Ngoubou => {
"common.loot_tables.creature.quad_medium.horned"

View File

@ -384,6 +384,48 @@ impl Animation for AlphaAnimation {
* Quaternion::rotation_y(-2.8 + move1 * 3.0 + move2 * -3.0)
* Quaternion::rotation_z(move1 * -1.5);
},
"Husk Brute" => {
next.shoulder_l.position =
Vec3::new(-s_a.shoulder.0, s_a.shoulder.1, s_a.shoulder.2);
next.shoulder_r.position =
Vec3::new(s_a.shoulder.0, s_a.shoulder.1, s_a.shoulder.2);
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);
if mirror > 0.0 {
next.shoulder_l.orientation = Quaternion::rotation_x(move1 * 1.0)
* Quaternion::rotation_y(move1 * 1.0 + move2 * -2.0);
next.shoulder_r.orientation = Quaternion::rotation_x(move1 * -0.6);
next.upper_torso.orientation =
Quaternion::rotation_z(move1 * 0.4 + move2 * -1.1);
next.lower_torso.orientation =
Quaternion::rotation_z(move1 * -0.2 + move2 * 0.6);
next.hand_l.orientation = Quaternion::rotation_x(move1 * 1.2)
* Quaternion::rotation_y(move1 * 1.0 + move2 * -2.0);
next.hand_r.orientation = Quaternion::rotation_z(move1 * 1.0)
* Quaternion::rotation_y(move1 * 0.8 + move2 * -1.2);
} else {
next.shoulder_r.orientation = Quaternion::rotation_x(move1 * 1.0)
* Quaternion::rotation_y(move1 * -1.0 + move2 * 2.0);
next.shoulder_l.orientation = Quaternion::rotation_x(move1 * 0.6);
next.upper_torso.orientation =
Quaternion::rotation_z(move1 * -0.4 + move2 * 1.1);
next.lower_torso.orientation =
Quaternion::rotation_z(move1 * 0.2 + move2 * -0.6);
next.hand_r.orientation = Quaternion::rotation_x(move1 * 1.2)
* Quaternion::rotation_y(move1 * -1.0 + move2 * 2.0);
next.hand_l.orientation = Quaternion::rotation_z(move1 * 1.0)
* Quaternion::rotation_y(move1 * -0.8 + move2 * 1.2);
}
},
_ => {},
}
}

View File

@ -148,6 +148,66 @@ impl Animation for ChargeMeleeAnimation {
next.shoulder_r.orientation =
Quaternion::rotation_x(-0.3 + move1 * 1.0);
},
"Husk Brute" => {
next.second.scale = Vec3::one() * 0.0;
next.head.orientation =
Quaternion::rotation_x(move1 * 0.3 + move2 * -0.6);
next.jaw.position = Vec3::new(0.0, s_a.jaw.0, s_a.jaw.1);
next.jaw.orientation = Quaternion::rotation_x(move2 * -0.3);
next.control_l.position = Vec3::new(-0.5, 4.0, 1.0);
next.control_r.position = Vec3::new(-0.5, 4.0, 1.0);
next.control_l.orientation = Quaternion::rotation_x(1.57);
next.control_r.orientation = Quaternion::rotation_x(1.57);
next.weapon_l.position =
Vec3::new(-12.0 + (move1 * 10.0).min(6.0), -1.0, -15.0);
next.weapon_r.position =
Vec3::new(12.0 + (move1 * -10.0).max(-6.0), -1.0, -15.0);
next.weapon_l.orientation = Quaternion::rotation_x(-1.57 - 0.1)
* Quaternion::rotation_z(move1 * -0.8);
next.weapon_r.orientation = Quaternion::rotation_x(-1.57 - 0.1)
* Quaternion::rotation_z(move1 * 0.8);
next.shoulder_l.orientation =
Quaternion::rotation_x(-0.3 + move1 * 2.8 + move2 * -2.8);
next.shoulder_r.orientation =
Quaternion::rotation_x(-0.3 + move1 * 2.8 + move2 * -2.8);
next.control.orientation =
Quaternion::rotation_x(move1 * 2.5 + move2 * -2.0);
next.upper_torso.position =
Vec3::new(0.0, s_a.upper_torso.0, s_a.upper_torso.1);
next.upper_torso.orientation =
Quaternion::rotation_x(move1 * 0.2 + move2 * -0.6);
next.lower_torso.orientation =
Quaternion::rotation_x(move1 * -0.2 + move2 * 0.6);
if speed < 0.1 {
next.foot_l.position = Vec3::new(
-s_a.foot.0,
s_a.foot.1 + move1 * -7.0 + move2 * 7.0,
s_a.foot.2,
);
next.foot_l.orientation =
Quaternion::rotation_x(move1 * -0.8 + move2 * 0.8)
* Quaternion::rotation_z(move1 * 0.3 + move2 * -0.3);
next.foot_r.position = Vec3::new(
s_a.foot.0,
s_a.foot.1 + move1 * 5.0 + move2 * -5.0,
s_a.foot.2,
);
next.foot_r.orientation =
Quaternion::rotation_y(move1 * -0.3 + move2 * 0.3)
* Quaternion::rotation_z(move1 * 0.4 + move2 * -0.4);
}
next.main.orientation =
Quaternion::rotation_y(move1 * 0.4 + move2 * -0.6)
* Quaternion::rotation_x(move2 * -0.4);
},
_ => {},
}
}

View File

@ -230,7 +230,7 @@ impl<'a> From<&'a Body> for SkeletonAttr {
(Blueoni, _) => (10.5, -3.0),
(Redoni, _) => (10.5, -3.0),
(Cultistwarlord, _) => (0.5, 14.5),
(Cultistwarlock, _) => (0.5, 14.5),
(Cultistwarlock, _) => (0.5, 11.0),
(Huskbrute, _) => (8.5, 4.0),
},
jaw: match (body.species, body.body_type) {
@ -301,8 +301,8 @@ impl<'a> From<&'a Body> for SkeletonAttr {
(Blueoni, _) => (0.0, -8.5),
(Redoni, _) => (0.0, -8.5),
(Cultistwarlord, _) => (0.0, -1.5),
(Cultistwarlock, _) => (0.0, -1.5),
(Huskbrute, _) => (0.0, -6.5),
(Cultistwarlock, _) => (1.0, -3.5),
(Huskbrute, _) => (-0.5, -7.0),
},
tail: match (body.species, body.body_type) {
(Werewolf, _) => (-5.5, -2.0),
@ -333,8 +333,8 @@ impl<'a> From<&'a Body> for SkeletonAttr {
(Blueoni, _) => (11.0, 2.0, -5.5),
(Redoni, _) => (11.0, 2.0, -5.5),
(Cultistwarlord, _) => (11.5, -1.0, 4.5),
(Cultistwarlock, _) => (11.5, -1.0, 4.5),
(Huskbrute, _) => (10.5, 1.0, -2.5),
(Cultistwarlock, _) => (8.0, 0.0, 3.5),
(Huskbrute, _) => (10.5, 0.0, -1.5),
},
hand: match (body.species, body.body_type) {
(Ogre, Male) => (14.5, 0.0, -4.0),
@ -357,8 +357,8 @@ impl<'a> From<&'a Body> for SkeletonAttr {
(Blueoni, _) => (13.5, 0.5, -8.0),
(Redoni, _) => (13.5, 0.5, -8.0),
(Cultistwarlord, _) => (11.5, -1.0, -1.0),
(Cultistwarlock, _) => (11.5, -1.0, -1.0),
(Huskbrute, _) => (12.0, 1.5, -6.0),
(Cultistwarlock, _) => (9.5, -1.0, 1.0),
(Huskbrute, _) => (13.0, 0.5, -4.0),
},
leg: match (body.species, body.body_type) {
(Ogre, Male) => (0.0, 0.0, -4.0),
@ -382,7 +382,7 @@ impl<'a> From<&'a Body> for SkeletonAttr {
(Redoni, _) => (4.5, 2.0, -5.5),
(Cultistwarlord, _) => (3.5, -1.0, -8.5),
(Cultistwarlock, _) => (3.5, -1.0, -8.5),
(Huskbrute, _) => (4.0, 0.0, -5.5),
(Huskbrute, _) => (4.0, 0.0, -7.5),
},
foot: match (body.species, body.body_type) {
(Ogre, Male) => (4.0, 1.0, -12.0),
@ -405,7 +405,7 @@ impl<'a> From<&'a Body> for SkeletonAttr {
(Blueoni, _) => (5.0, 5.0, -12.5),
(Redoni, _) => (5.0, 5.0, -12.5),
(Cultistwarlord, _) => (3.5, 0.0, -12.5),
(Cultistwarlock, _) => (3.5, 0.0, -12.5),
(Cultistwarlock, _) => (3.5, 0.0, -10.5),
(Huskbrute, _) => (4.5, 0.5, -12.5),
},
scaler: match (body.species, body.body_type) {

View File

@ -498,6 +498,63 @@ impl Animation for WieldAnimation {
next.shoulder_r.orientation =
Quaternion::rotation_y(0.4) * Quaternion::rotation_x(0.4);
},
"Husk Brute" => {
if speed > 0.1 {
next.hand_l.position =
Vec3::new(-s_a.hand.0, s_a.hand.1, s_a.hand.2);
next.hand_l.orientation =
Quaternion::rotation_x(1.4 + slow * 0.1)
* Quaternion::rotation_z(-PI / 2.0);
next.hand_r.position =
Vec3::new(s_a.hand.0, s_a.hand.1, s_a.hand.2);
next.hand_r.orientation =
Quaternion::rotation_x(1.4 - slow * 0.1)
* Quaternion::rotation_z(PI / 2.0);
next.shoulder_l.position =
Vec3::new(-s_a.shoulder.0, s_a.shoulder.1, s_a.shoulder.2);
next.shoulder_l.orientation =
Quaternion::rotation_x(1.1 + slow * 0.1);
next.shoulder_r.position =
Vec3::new(s_a.shoulder.0, s_a.shoulder.1, s_a.shoulder.2);
next.shoulder_r.orientation =
Quaternion::rotation_x(1.1 - slow * 0.1);
} else {
next.shoulder_l.position =
Vec3::new(-s_a.shoulder.0, s_a.shoulder.1, s_a.shoulder.2);
next.shoulder_l.orientation = Quaternion::rotation_x(breathe);
next.shoulder_r.position =
Vec3::new(s_a.shoulder.0, s_a.shoulder.1, s_a.shoulder.2);
next.shoulder_r.orientation = Quaternion::rotation_x(breathe);
next.hand_l.position = Vec3::new(
-s_a.hand.0,
s_a.hand.1,
s_a.hand.2 + torso * -0.1,
);
next.hand_r.position = Vec3::new(
s_a.hand.0,
s_a.hand.1,
s_a.hand.2 + torso * -0.1,
);
next.leg_l.position =
Vec3::new(-s_a.leg.0, s_a.leg.1, s_a.leg.2 + torso * -0.2);
next.leg_r.position =
Vec3::new(s_a.leg.0, s_a.leg.1, s_a.leg.2 + torso * -0.2);
next.foot_l.position =
Vec3::new(-s_a.foot.0, s_a.foot.1, s_a.foot.2);
next.foot_r.position =
Vec3::new(s_a.foot.0, s_a.foot.1, s_a.foot.2);
}
},
_ => {},
}
}

View File

@ -195,7 +195,7 @@ pub fn apply_wildlife_supplement<'a, R: Rng>(
Entry {
make_entity: |pos, rng| {
EntityInfo::at(pos)
.with_body(match rng.gen_range(0..3) {
.with_body(match rng.gen_range(0..5) {
0 => quadruped_medium::Body::random_with(
rng,
&quadruped_medium::Species::Mouflon,
@ -206,6 +206,16 @@ pub fn apply_wildlife_supplement<'a, R: Rng>(
&quadruped_medium::Species::Yak,
)
.into(),
2 => quadruped_medium::Body::random_with(
rng,
&quadruped_medium::Species::Llama,
)
.into(),
3 => quadruped_medium::Body::random_with(
rng,
&quadruped_medium::Species::Alpaca,
)
.into(),
_ => quadruped_medium::Body::random_with(
rng,
&quadruped_medium::Species::Highland,
@ -916,7 +926,7 @@ pub fn apply_wildlife_supplement<'a, R: Rng>(
close(c.temp, CONFIG.desert_temp + 0.2, 0.3)
* close(c.humidity, CONFIG.desert_hum, 0.5)
* BASE_DENSITY
* 0.01
* 0.005
},
},
// Desert solitary wild

View File

@ -1093,7 +1093,7 @@ fn mini_boss_4(tile_wcenter: Vec3<i32>) -> Vec<EntityInfo> {
fn mini_boss_5(dynamic_rng: &mut impl Rng, tile_wcenter: Vec3<i32>) -> Vec<EntityInfo> {
let mut entities = Vec::new();
match dynamic_rng.gen_range(0..2) {
match dynamic_rng.gen_range(0..3) {
0 => {
entities.push(
EntityInfo::at(tile_wcenter.map(|e| e as f32))
@ -1104,6 +1104,12 @@ fn mini_boss_5(dynamic_rng: &mut impl Rng, tile_wcenter: Vec3<i32>) -> Vec<Entit
.with_asset_expect("common.entity.dungeon.tier-5.hound")
});
},
1 => {
entities.resize_with(2, || {
EntityInfo::at(tile_wcenter.map(|e| e as f32))
.with_asset_expect("common.entity.dungeon.tier-5.husk_brute")
});
},
_ => {
entities.resize_with(10, || {
EntityInfo::at(tile_wcenter.map(|e| e as f32))