diff --git a/assets/common/abilities/ability_set_manifest.ron b/assets/common/abilities/ability_set_manifest.ron index 4a089589b7..41b0c565d9 100644 --- a/assets/common/abilities/ability_set_manifest.ron +++ b/assets/common/abilities/ability_set_manifest.ron @@ -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", diff --git a/assets/common/abilities/custom/husk_brute/chargedmelee.ron b/assets/common/abilities/custom/husk_brute/chargedmelee.ron new file mode 100644 index 0000000000..e4006d5949 --- /dev/null +++ b/assets/common/abilities/custom/husk_brute/chargedmelee.ron @@ -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, +) diff --git a/assets/common/abilities/custom/husk_brute/singlestrike.ron b/assets/common/abilities/custom/husk_brute/singlestrike.ron new file mode 100644 index 0000000000..d64184bfa8 --- /dev/null +++ b/assets/common/abilities/custom/husk_brute/singlestrike.ron @@ -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, +) diff --git a/assets/common/entity/dungeon/tier-5/husk_brute.ron b/assets/common/entity/dungeon/tier-5/husk_brute.ron new file mode 100644 index 0000000000..fc2592fb47 --- /dev/null +++ b/assets/common/entity/dungeon/tier-5/husk_brute.ron @@ -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, +) diff --git a/assets/common/items/npc_weapons/unique/husk_brute.ron b/assets/common/items/npc_weapons/unique/husk_brute.ron new file mode 100644 index 0000000000..c2389e824c --- /dev/null +++ b/assets/common/items/npc_weapons/unique/husk_brute.ron @@ -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")), +) \ No newline at end of file diff --git a/assets/common/loot_tables/creature/quad_medium/wool.ron b/assets/common/loot_tables/creature/quad_medium/wool.ron new file mode 100644 index 0000000000..3b3fa3f62d --- /dev/null +++ b/assets/common/loot_tables/creature/quad_medium/wool.ron @@ -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)), +] \ No newline at end of file diff --git a/assets/common/loot_tables/creature/quad_small/sheep.ron b/assets/common/loot_tables/creature/quad_small/wool.ron similarity index 100% rename from assets/common/loot_tables/creature/quad_small/sheep.ron rename to assets/common/loot_tables/creature/quad_small/wool.ron diff --git a/assets/voxygen/voxel/biped_weapon_manifest.ron b/assets/voxygen/voxel/biped_weapon_manifest.ron index f2210787e1..93ea6dc59f 100644 --- a/assets/voxygen/voxel/biped_weapon_manifest.ron +++ b/assets/voxygen/voxel/biped_weapon_manifest.ron @@ -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 diff --git a/assets/voxygen/voxel/npc/husk_brute/male/foot_l.vox b/assets/voxygen/voxel/npc/husk_brute/male/foot_l.vox index 73112faae9..781e93ba16 100644 --- a/assets/voxygen/voxel/npc/husk_brute/male/foot_l.vox +++ b/assets/voxygen/voxel/npc/husk_brute/male/foot_l.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3a85347ae6106c2dc616ef80280b81d5c713a314d3b6effb1960ebfad8473ed7 +oid sha256:def1166360040579420940df95e73f33e21425d0f3bb493be53f7a98bb98f32e size 1660 diff --git a/assets/voxygen/voxel/npc/husk_brute/male/foot_r.vox b/assets/voxygen/voxel/npc/husk_brute/male/foot_r.vox index f549c46f3f..73112faae9 100644 --- a/assets/voxygen/voxel/npc/husk_brute/male/foot_r.vox +++ b/assets/voxygen/voxel/npc/husk_brute/male/foot_r.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:023987c725b7092a0f8d81eff8c2b9f05f74848f46f6fb84127bc66cdb00aac1 +oid sha256:3a85347ae6106c2dc616ef80280b81d5c713a314d3b6effb1960ebfad8473ed7 size 1660 diff --git a/assets/voxygen/voxel/npc/husk_brute/male/leg_r.vox b/assets/voxygen/voxel/npc/husk_brute/male/leg_r.vox index 5fb1be5c86..30b089643c 100644 --- a/assets/voxygen/voxel/npc/husk_brute/male/leg_r.vox +++ b/assets/voxygen/voxel/npc/husk_brute/male/leg_r.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6d84c5521dfe543640114541c9cc7c6fda31c0e416dc077786da631f29866fb0 +oid sha256:7f4e335af3e38b0f2700c9e79e84839d91ed03d2ce9cd70d1f27add95d329a6c size 1504 diff --git a/assets/voxygen/voxel/npc/llama/male/torso_back.vox b/assets/voxygen/voxel/npc/llama/male/torso_back.vox index 61d600f9a0..39ae1405c7 100644 --- a/assets/voxygen/voxel/npc/llama/male/torso_back.vox +++ b/assets/voxygen/voxel/npc/llama/male/torso_back.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:aed403d3a29983553fad51efc06b372f623101948871a351d1de2613b386d430 -size 4208 +oid sha256:cbd269e4736b47909d50871dfcb9994c16da4539b78f3d1cb35478e2f323a0a7 +size 4232 diff --git a/common/src/comp/agent.rs b/common/src/comp/agent.rs index 6b8059cedc..f7262502a7 100644 --- a/common/src/comp/agent.rs +++ b/common/src/comp/agent.rs @@ -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 { diff --git a/common/src/comp/body.rs b/common/src/comp/body.rs index 661f9639a3..6755a2bb18 100644 --- a/common/src/comp/body.rs +++ b/common/src/comp/body.rs @@ -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 { diff --git a/common/src/comp/inventory/loadout_builder.rs b/common/src/comp/inventory/loadout_builder.rs index d9fea9965b..69a85e3402 100644 --- a/common/src/comp/inventory/loadout_builder.rs +++ b/common/src/comp/inventory/loadout_builder.rs @@ -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( diff --git a/common/src/states/utils.rs b/common/src/states/utils.rs index 10968783d6..102260b501 100644 --- a/common/src/states/utils.rs +++ b/common/src/states/utils.rs @@ -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, diff --git a/server/src/events/entity_manipulation.rs b/server/src/events/entity_manipulation.rs index 983dc3e1f6..35ac92b0a5 100644 --- a/server/src/events/entity_manipulation.rs +++ b/server/src/events/entity_manipulation.rs @@ -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" diff --git a/voxygen/anim/src/biped_large/alpha.rs b/voxygen/anim/src/biped_large/alpha.rs index 0d3e7c61aa..7f2ac702ed 100644 --- a/voxygen/anim/src/biped_large/alpha.rs +++ b/voxygen/anim/src/biped_large/alpha.rs @@ -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); + } + }, _ => {}, } } diff --git a/voxygen/anim/src/biped_large/chargemelee.rs b/voxygen/anim/src/biped_large/chargemelee.rs index 16e25c148b..74162d0691 100644 --- a/voxygen/anim/src/biped_large/chargemelee.rs +++ b/voxygen/anim/src/biped_large/chargemelee.rs @@ -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); + }, _ => {}, } } diff --git a/voxygen/anim/src/biped_large/mod.rs b/voxygen/anim/src/biped_large/mod.rs index 9754e4370c..998777d2e3 100644 --- a/voxygen/anim/src/biped_large/mod.rs +++ b/voxygen/anim/src/biped_large/mod.rs @@ -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) { diff --git a/voxygen/anim/src/biped_large/wield.rs b/voxygen/anim/src/biped_large/wield.rs index c3d985fd71..ef94cd66e8 100644 --- a/voxygen/anim/src/biped_large/wield.rs +++ b/voxygen/anim/src/biped_large/wield.rs @@ -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); + } + }, _ => {}, } } diff --git a/world/src/layer/wildlife.rs b/world/src/layer/wildlife.rs index 362fcf2fed..d09e3412d5 100644 --- a/world/src/layer/wildlife.rs +++ b/world/src/layer/wildlife.rs @@ -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 diff --git a/world/src/site/dungeon/mod.rs b/world/src/site/dungeon/mod.rs index fa228fa181..750119baaa 100644 --- a/world/src/site/dungeon/mod.rs +++ b/world/src/site/dungeon/mod.rs @@ -1093,7 +1093,7 @@ fn mini_boss_4(tile_wcenter: Vec3) -> Vec { fn mini_boss_5(dynamic_rng: &mut impl Rng, tile_wcenter: Vec3) -> Vec { 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) -> Vec { + 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))