From 16d58c6b4e8388f47e70267e4a41bae9261497a3 Mon Sep 17 00:00:00 2001 From: flo Date: Sat, 3 Jun 2023 13:59:52 +0000 Subject: [PATCH] plant creatures --- .../common/abilities/ability_set_manifest.ron | 30 +++++ .../common/abilities/custom/bushly/dash.ron | 27 ++++ .../abilities/custom/bushly/singlestrike.ron | 26 ++++ .../common/abilities/custom/driggle/bite.ron | 26 ++++ .../abilities/custom/driggle/flamethrower.ron | 19 +++ .../common/abilities/custom/emberfly/leap.ron | 20 +++ .../abilities/custom/irrwurz/magicball.ron | 16 +++ .../abilities/custom/irrwurz/singlestrike.ron | 26 ++++ .../abilities/custom/mossy_snail/hastened.ron | 9 ++ .../abilities/custom/mossy_snail/headbutt.ron | 26 ++++ .../custom/treant_sapling/shockwave.ron | 18 +++ .../common/entity/wild/aggressive/bushly.ron | 12 ++ .../common/entity/wild/aggressive/driggle.ron | 11 ++ .../entity/wild/aggressive/emberfly.ron | 11 ++ .../common/entity/wild/aggressive/irrwurz.ron | 12 ++ .../entity/wild/aggressive/lavadrake.ron | 2 +- .../entity/wild/aggressive/mossy_snail.ron | 11 ++ .../entity/wild/aggressive/treant_sapling.ron | 11 ++ .../entity/wild/peaceful/crawler_molten.ron | 2 +- .../items/crafting_ing/living_embers.ron | 10 ++ .../biped_small/bushly/chest/bushly.ron | 16 +++ .../biped_small/bushly/foot/bushly.ron | 16 +++ .../biped_small/bushly/hand/bushly.ron | 16 +++ .../biped_small/bushly/pants/bushly.ron | 16 +++ .../biped_small/irrwurz/chest/irrwurz.ron | 16 +++ .../biped_small/irrwurz/foot/irrwurz.ron | 16 +++ .../biped_small/irrwurz/hand/irrwurz.ron | 16 +++ .../biped_small/irrwurz/pants/irrwurz.ron | 16 +++ .../items/npc_weapons/unique/bushly.ron | 21 ++++ .../items/npc_weapons/unique/driggle.ron | 21 ++++ .../items/npc_weapons/unique/emberfly.ron | 21 ++++ .../items/npc_weapons/unique/irrwurz.ron | 21 ++++ .../items/npc_weapons/unique/mossysnail.ron | 21 ++++ .../npc_weapons/unique/treantsapling.ron | 21 ++++ assets/common/loadout/world/bushly/bushly.ron | 8 ++ .../common/loadout/world/irrwurz/irrwurz.ron | 8 ++ .../creature/arthropod/crawler_molten.ron | 6 + .../creature/arthropod/emberfly.ron | 4 + .../creature/biped_small/bushly.ron | 3 + .../creature/biped_small/irrwurz.ron | 3 + .../loot_tables/creature/quad_low/driggle.ron | 4 + .../creature/quad_low/lavadrake.ron | 5 + .../creature/quad_low/salamander.ron | 1 + .../creature/quad_small/mossy_snail.ron | 4 + .../creature/quad_small/treant_sapling.ron | 5 + assets/common/npc_names.ron | 24 ++++ assets/common/recipe_book.ron | 16 ++- assets/voxygen/item_image_manifest.ron | 4 + .../voxel/arthropod_central_manifest.ron | 20 +++ .../voxel/arthropod_lateral_manifest.ron | 116 ++++++++++++++++++ .../biped_small_armor_chest_manifest.ron | 6 + .../voxel/biped_small_armor_foot_manifest.ron | 18 ++- .../voxel/biped_small_armor_hand_manifest.ron | 18 ++- .../biped_small_armor_pants_manifest.ron | 8 +- .../voxygen/voxel/biped_weapon_manifest.ron | 8 ++ assets/voxygen/voxel/item_drop_manifest.ron | 1 + .../voxygen/voxel/npc/bushly/male/chest.vox | 3 + .../voxygen/voxel/npc/bushly/male/foot_r.vox | 3 + .../voxygen/voxel/npc/bushly/male/hand_r.vox | 3 + .../voxygen/voxel/npc/bushly/male/pants.vox | 3 + .../voxygen/voxel/npc/driggle/male/chest.vox | 3 + .../voxel/npc/driggle/male/foot_br.vox | 3 + .../voxel/npc/driggle/male/foot_fr.vox | 3 + .../voxel/npc/driggle/male/head_lower.vox | 3 + .../voxel/npc/driggle/male/head_upper.vox | 3 + assets/voxygen/voxel/npc/driggle/male/jaw.vox | 3 + .../voxel/npc/driggle/male/tail_front.vox | 3 + .../voxel/npc/driggle/male/tail_rear.vox | 3 + .../voxygen/voxel/npc/emberfly/male/chest.vox | 3 + .../voxygen/voxel/npc/emberfly/male/head.vox | 3 + .../voxel/npc/emberfly/male/leg_bcr.vox | 3 + .../voxel/npc/emberfly/male/leg_fcr.vox | 3 + .../voxel/npc/emberfly/male/leg_fr.vox | 3 + .../voxel/npc/emberfly/male/wing_fr.vox | 3 + .../voxygen/voxel/npc/irrwurz/male/chest.vox | 3 + .../voxygen/voxel/npc/irrwurz/male/foot_r.vox | 3 + .../voxygen/voxel/npc/irrwurz/male/hand_r.vox | 3 + .../voxygen/voxel/npc/irrwurz/male/pants.vox | 3 + .../voxel/npc/mossy_snail/male/chest.vox | 3 + .../voxel/npc/mossy_snail/male/head.vox | 3 + .../voxel/npc/treant_sapling/male/chest.vox | 3 + .../voxel/npc/treant_sapling/male/foot_br.vox | 3 + .../voxel/npc/treant_sapling/male/foot_fr.vox | 3 + .../voxel/quadruped_low_central_manifest.ron | 52 ++++++++ .../voxel/quadruped_low_lateral_manifest.ron | 36 ++++++ .../quadruped_small_central_manifest.ron | 56 +++++++++ .../quadruped_small_lateral_manifest.ron | 72 +++++++++++ .../sprite/crafting_ing/living_embers.vox | 3 + .../wildlife/spawn/taiga/core_forest.ron | 11 +- assets/world/wildlife/spawn/taiga/forest.ron | 11 +- .../wildlife/spawn/temperate/rainforest.ron | 4 + .../world/wildlife/spawn/temperate/rare.ron | 16 ++- .../world/wildlife/spawn/temperate/wood.ron | 3 + common/src/comp/agent.rs | 1 + common/src/comp/body.rs | 13 +- common/src/comp/body/arthropod.rs | 6 +- common/src/comp/body/biped_small.rs | 10 +- common/src/comp/body/quadruped_low.rs | 6 +- common/src/comp/body/quadruped_small.rs | 10 +- common/src/comp/inventory/loadout_builder.rs | 29 ++++- common/src/comp/projectile.rs | 62 ++++++++++ common/src/states/utils.rs | 2 + server/agent/src/action_nodes.rs | 10 ++ server/agent/src/attack.rs | 38 ++++++ server/agent/src/data.rs | 1 + voxygen/anim/src/arthropod/alpha.rs | 2 +- voxygen/anim/src/arthropod/dash.rs | 2 +- voxygen/anim/src/arthropod/idle.rs | 2 +- voxygen/anim/src/arthropod/jump.rs | 2 +- voxygen/anim/src/arthropod/leapmelee.rs | 2 +- voxygen/anim/src/arthropod/leapshockwave.rs | 6 +- voxygen/anim/src/arthropod/mod.rs | 28 +++-- voxygen/anim/src/arthropod/run.rs | 2 +- voxygen/anim/src/arthropod/shoot.rs | 2 +- voxygen/anim/src/arthropod/stunned.rs | 2 +- voxygen/anim/src/arthropod/summon.rs | 2 +- voxygen/anim/src/biped_small/combomelee.rs | 85 +++++++++++++ voxygen/anim/src/biped_small/mod.rs | 25 +++- voxygen/anim/src/biped_small/shoot.rs | 59 +++++++++ voxygen/anim/src/quadruped_low/combomelee.rs | 3 +- voxygen/anim/src/quadruped_low/mod.rs | 9 ++ .../anim/src/quadruped_small/combomelee.rs | 81 ++++++++++++ voxygen/anim/src/quadruped_small/mod.rs | 24 +++- voxygen/anim/src/quadruped_small/shockwave.rs | 46 +++++++ voxygen/src/hud/diary.rs | 4 +- voxygen/src/scene/figure/mod.rs | 91 ++++++++++++++ 126 files changed, 1829 insertions(+), 52 deletions(-) create mode 100644 assets/common/abilities/custom/bushly/dash.ron create mode 100644 assets/common/abilities/custom/bushly/singlestrike.ron create mode 100644 assets/common/abilities/custom/driggle/bite.ron create mode 100644 assets/common/abilities/custom/driggle/flamethrower.ron create mode 100644 assets/common/abilities/custom/emberfly/leap.ron create mode 100644 assets/common/abilities/custom/irrwurz/magicball.ron create mode 100644 assets/common/abilities/custom/irrwurz/singlestrike.ron create mode 100644 assets/common/abilities/custom/mossy_snail/hastened.ron create mode 100644 assets/common/abilities/custom/mossy_snail/headbutt.ron create mode 100644 assets/common/abilities/custom/treant_sapling/shockwave.ron create mode 100644 assets/common/entity/wild/aggressive/bushly.ron create mode 100644 assets/common/entity/wild/aggressive/driggle.ron create mode 100644 assets/common/entity/wild/aggressive/emberfly.ron create mode 100644 assets/common/entity/wild/aggressive/irrwurz.ron create mode 100644 assets/common/entity/wild/aggressive/mossy_snail.ron create mode 100644 assets/common/entity/wild/aggressive/treant_sapling.ron create mode 100644 assets/common/items/crafting_ing/living_embers.ron create mode 100644 assets/common/items/npc_armor/biped_small/bushly/chest/bushly.ron create mode 100644 assets/common/items/npc_armor/biped_small/bushly/foot/bushly.ron create mode 100644 assets/common/items/npc_armor/biped_small/bushly/hand/bushly.ron create mode 100644 assets/common/items/npc_armor/biped_small/bushly/pants/bushly.ron create mode 100644 assets/common/items/npc_armor/biped_small/irrwurz/chest/irrwurz.ron create mode 100644 assets/common/items/npc_armor/biped_small/irrwurz/foot/irrwurz.ron create mode 100644 assets/common/items/npc_armor/biped_small/irrwurz/hand/irrwurz.ron create mode 100644 assets/common/items/npc_armor/biped_small/irrwurz/pants/irrwurz.ron create mode 100644 assets/common/items/npc_weapons/unique/bushly.ron create mode 100644 assets/common/items/npc_weapons/unique/driggle.ron create mode 100644 assets/common/items/npc_weapons/unique/emberfly.ron create mode 100644 assets/common/items/npc_weapons/unique/irrwurz.ron create mode 100644 assets/common/items/npc_weapons/unique/mossysnail.ron create mode 100644 assets/common/items/npc_weapons/unique/treantsapling.ron create mode 100644 assets/common/loadout/world/bushly/bushly.ron create mode 100644 assets/common/loadout/world/irrwurz/irrwurz.ron create mode 100644 assets/common/loot_tables/creature/arthropod/crawler_molten.ron create mode 100644 assets/common/loot_tables/creature/arthropod/emberfly.ron create mode 100644 assets/common/loot_tables/creature/biped_small/bushly.ron create mode 100644 assets/common/loot_tables/creature/biped_small/irrwurz.ron create mode 100644 assets/common/loot_tables/creature/quad_low/driggle.ron create mode 100644 assets/common/loot_tables/creature/quad_low/lavadrake.ron create mode 100644 assets/common/loot_tables/creature/quad_small/mossy_snail.ron create mode 100644 assets/common/loot_tables/creature/quad_small/treant_sapling.ron create mode 100644 assets/voxygen/voxel/npc/bushly/male/chest.vox create mode 100644 assets/voxygen/voxel/npc/bushly/male/foot_r.vox create mode 100644 assets/voxygen/voxel/npc/bushly/male/hand_r.vox create mode 100644 assets/voxygen/voxel/npc/bushly/male/pants.vox create mode 100644 assets/voxygen/voxel/npc/driggle/male/chest.vox create mode 100644 assets/voxygen/voxel/npc/driggle/male/foot_br.vox create mode 100644 assets/voxygen/voxel/npc/driggle/male/foot_fr.vox create mode 100644 assets/voxygen/voxel/npc/driggle/male/head_lower.vox create mode 100644 assets/voxygen/voxel/npc/driggle/male/head_upper.vox create mode 100644 assets/voxygen/voxel/npc/driggle/male/jaw.vox create mode 100644 assets/voxygen/voxel/npc/driggle/male/tail_front.vox create mode 100644 assets/voxygen/voxel/npc/driggle/male/tail_rear.vox create mode 100644 assets/voxygen/voxel/npc/emberfly/male/chest.vox create mode 100644 assets/voxygen/voxel/npc/emberfly/male/head.vox create mode 100644 assets/voxygen/voxel/npc/emberfly/male/leg_bcr.vox create mode 100644 assets/voxygen/voxel/npc/emberfly/male/leg_fcr.vox create mode 100644 assets/voxygen/voxel/npc/emberfly/male/leg_fr.vox create mode 100644 assets/voxygen/voxel/npc/emberfly/male/wing_fr.vox create mode 100644 assets/voxygen/voxel/npc/irrwurz/male/chest.vox create mode 100644 assets/voxygen/voxel/npc/irrwurz/male/foot_r.vox create mode 100644 assets/voxygen/voxel/npc/irrwurz/male/hand_r.vox create mode 100644 assets/voxygen/voxel/npc/irrwurz/male/pants.vox create mode 100644 assets/voxygen/voxel/npc/mossy_snail/male/chest.vox create mode 100644 assets/voxygen/voxel/npc/mossy_snail/male/head.vox create mode 100644 assets/voxygen/voxel/npc/treant_sapling/male/chest.vox create mode 100644 assets/voxygen/voxel/npc/treant_sapling/male/foot_br.vox create mode 100644 assets/voxygen/voxel/npc/treant_sapling/male/foot_fr.vox create mode 100644 assets/voxygen/voxel/sprite/crafting_ing/living_embers.vox create mode 100644 voxygen/anim/src/biped_small/combomelee.rs create mode 100644 voxygen/anim/src/quadruped_small/combomelee.rs create mode 100644 voxygen/anim/src/quadruped_small/shockwave.rs diff --git a/assets/common/abilities/ability_set_manifest.ron b/assets/common/abilities/ability_set_manifest.ron index c6965e109d..ffd13ade01 100644 --- a/assets/common/abilities/ability_set_manifest.ron +++ b/assets/common/abilities/ability_set_manifest.ron @@ -180,6 +180,16 @@ secondary: Simple(None, "common.abilities.custom.husk_brute.chargedmelee"), abilities: [], ), + Custom("Bushly"): ( + primary: Simple(None, "common.abilities.custom.bushly.singlestrike"), + secondary: Simple(None, "common.abilities.custom.bushly.dash"), + abilities: [], + ), + Custom("Irrwurz"): ( + primary: Simple(None, "common.abilities.custom.irrwurz.singlestrike"), + secondary: Simple(None, "common.abilities.custom.irrwurz.magicball"), + abilities: [], + ), Tool(Spear): ( primary: Simple(None, "common.abilities.spear.doublestrike"), secondary: Simple(None, "common.abilities.spear.dash"), @@ -424,6 +434,21 @@ secondary: Simple(None, "common.abilities.custom.quadsmallbasic.singlestrike"), abilities: [], ), + Custom("Driggle"): ( + primary: Simple(None, "common.abilities.custom.driggle.bite"), + secondary: Simple(None, "common.abilities.custom.driggle.flamethrower"), + abilities: [], + ), + Custom("Mossy Snail"): ( + primary: Simple(None, "common.abilities.custom.mossy_snail.headbutt"), + secondary: Simple(None, "common.abilities.custom.mossy_snail.hastened"), + abilities: [], + ), + Custom("Treant Sapling"): ( + primary: Simple(None, "common.abilities.custom.treant_sapling.shockwave"), + secondary: Simple(None, "common.abilities.custom.treant_sapling.shockwave"), + abilities: [], + ), Custom("Theropod Basic"): ( primary: Simple(None, "common.abilities.custom.theropodbasic.triplestrike"), secondary: Simple(None, "common.abilities.custom.theropodbasic.triplestrike"), @@ -464,6 +489,11 @@ Simple(None, "common.abilities.custom.arthropods.hornbeetle.leap"), ], ), + Custom("Emberfly"): ( + primary: Simple(None, "common.abilities.custom.emberfly.leap"), + secondary: Simple(None, "common.abilities.custom.emberfly.leap"), + abilities: [], + ), Custom("Tarantula"): ( primary: Simple(None, "common.abilities.custom.arthropods.tarantula.singlestrike"), secondary: Simple(None, "common.abilities.custom.arthropods.tarantula.ensnaringwebs"), diff --git a/assets/common/abilities/custom/bushly/dash.ron b/assets/common/abilities/custom/bushly/dash.ron new file mode 100644 index 0000000000..0ec3fc8110 --- /dev/null +++ b/assets/common/abilities/custom/bushly/dash.ron @@ -0,0 +1,27 @@ +DashMelee( + energy_cost: 0, + melee_constructor: ( + kind: Bash( + damage: 3.0, + poise: 10.0, + knockback: 4.0, + energy_regen: 0.0, + ), + scaled: Some(Bash( + damage: 6.0, + poise: 20.0, + knockback: 6.0, + energy_regen: 0.0, + )), + range: 4, + angle: 45.0, + ), + energy_drain: 0, + forward_speed: 8, + buildup_duration: 1.0, + charge_duration: 2.0, + swing_duration: 0.1, + recover_duration: 2.0, + ori_modifier: 0.1, + charge_through: true, +) diff --git a/assets/common/abilities/custom/bushly/singlestrike.ron b/assets/common/abilities/custom/bushly/singlestrike.ron new file mode 100644 index 0000000000..7dfb07bee7 --- /dev/null +++ b/assets/common/abilities/custom/bushly/singlestrike.ron @@ -0,0 +1,26 @@ +ComboMelee2( + strikes: [ + ( + melee_constructor: ( + kind: Bash( + damage: 1, + poise: 0, + knockback: 0, + energy_regen: 0, + ), + range: 2.5, + angle: 150.0, + ), + buildup_duration: 0.6, + swing_duration: 0.5, + hit_timing: 0.5, + recover_duration: 0.8, + movement: ( + swing: None, + ), + ori_modifier: 0.6, + ), + ], + energy_cost_per_strike: 0, + auto_progress: true, +) diff --git a/assets/common/abilities/custom/driggle/bite.ron b/assets/common/abilities/custom/driggle/bite.ron new file mode 100644 index 0000000000..84c1e42d19 --- /dev/null +++ b/assets/common/abilities/custom/driggle/bite.ron @@ -0,0 +1,26 @@ +ComboMelee2( + strikes: [ + ( + melee_constructor: ( + kind: Bash( + damage: 4.0, + poise: 5, + knockback: 3.0, + energy_regen: 0, + ), + range: 2.5, + angle: 40.0, + ), + buildup_duration: 0.3, + swing_duration: 0.2, + hit_timing: 0.4, + recover_duration: 0.3, + movement: ( + swing: Some(Forward(0.5)), + ), + ori_modifier: 0.6, + ), + ], + energy_cost_per_strike: 0, + auto_progress: true, +) diff --git a/assets/common/abilities/custom/driggle/flamethrower.ron b/assets/common/abilities/custom/driggle/flamethrower.ron new file mode 100644 index 0000000000..397f85714c --- /dev/null +++ b/assets/common/abilities/custom/driggle/flamethrower.ron @@ -0,0 +1,19 @@ +BasicBeam( + buildup_duration: 0.8, + recover_duration: 0.5, + beam_duration: 0.5, + damage: 0.5, + tick_rate: 3.0, + range: 6.0, + max_angle: 25.0, + damage_effect: Some(Buff(( + kind: Burning, + dur_secs: 4.0, + strength: DamageFraction(0.1), + chance: 0.25, + ))), + energy_regen: 0, + energy_drain: 0, + ori_rate: 0.3, + specifier: Flamethrower, +) \ No newline at end of file diff --git a/assets/common/abilities/custom/emberfly/leap.ron b/assets/common/abilities/custom/emberfly/leap.ron new file mode 100644 index 0000000000..405ead3587 --- /dev/null +++ b/assets/common/abilities/custom/emberfly/leap.ron @@ -0,0 +1,20 @@ +LeapMelee( + energy_cost: 0, + buildup_duration: 0.4, + movement_duration: 0.4, + swing_duration: 0.05, + recover_duration: 0.4, + melee_constructor: ( + kind: Bash( + damage: 6.0, + poise: 20.0, + knockback: 5.0, + energy_regen: 0.0, + ), + range: 4.0, + angle: 180.0, + multi_target: Some(Normal), + ), + forward_leap_strength: 40.0, + vertical_leap_strength: 8.0, +) \ No newline at end of file diff --git a/assets/common/abilities/custom/irrwurz/magicball.ron b/assets/common/abilities/custom/irrwurz/magicball.ron new file mode 100644 index 0000000000..036ddff397 --- /dev/null +++ b/assets/common/abilities/custom/irrwurz/magicball.ron @@ -0,0 +1,16 @@ +BasicRanged( + energy_cost: 0, + buildup_duration: 1.5, + recover_duration: 1.0, + projectile: Magicball( + damage: 8.0, + radius: 3.0, + energy_regen: 0, + min_falloff: 0.5, + ), + projectile_body: Object(FireworkGreen), + projectile_speed: 25.0, + num_projectiles: 1, + projectile_spread: 0.0, + move_efficiency: 0.3, +) diff --git a/assets/common/abilities/custom/irrwurz/singlestrike.ron b/assets/common/abilities/custom/irrwurz/singlestrike.ron new file mode 100644 index 0000000000..94079d80dd --- /dev/null +++ b/assets/common/abilities/custom/irrwurz/singlestrike.ron @@ -0,0 +1,26 @@ +ComboMelee2( + strikes: [ + ( + melee_constructor: ( + kind: Bash( + damage: 4.0, + poise: 5, + knockback: 3.0, + energy_regen: 0, + ), + range: 2.5, + angle: 40.0, + ), + buildup_duration: 1.5, + swing_duration: 0.4, + hit_timing: 0.4, + recover_duration: 1.0, + movement: ( + swing: Some(Forward(0.5)), + ), + ori_modifier: 0.7, + ), + ], + energy_cost_per_strike: 0, + auto_progress: true, +) diff --git a/assets/common/abilities/custom/mossy_snail/hastened.ron b/assets/common/abilities/custom/mossy_snail/hastened.ron new file mode 100644 index 0000000000..59997f8ba1 --- /dev/null +++ b/assets/common/abilities/custom/mossy_snail/hastened.ron @@ -0,0 +1,9 @@ +SelfBuff( + buildup_duration: 0.1, + cast_duration: 0.1, + recover_duration: 0.4, + buff_kind: Hastened, + buff_strength: 0.8, + buff_duration: Some(6.0), + energy_cost: 0, +) \ No newline at end of file diff --git a/assets/common/abilities/custom/mossy_snail/headbutt.ron b/assets/common/abilities/custom/mossy_snail/headbutt.ron new file mode 100644 index 0000000000..8db16c7513 --- /dev/null +++ b/assets/common/abilities/custom/mossy_snail/headbutt.ron @@ -0,0 +1,26 @@ +ComboMelee2( + strikes: [ + ( + melee_constructor: ( + kind: Bash( + damage: 3.0, + poise: 5, + knockback: 1.0, + energy_regen: 0, + ), + range: 5.0, + angle: 60.0, + ), + buildup_duration: 0.6, + swing_duration: 0.4, + hit_timing: 0.5, + recover_duration: 0.8, + movement: ( + swing: Some(Forward(0.5)), + ), + ori_modifier: 0.7, + ), + ], + energy_cost_per_strike: 0, + auto_progress: true, +) \ No newline at end of file diff --git a/assets/common/abilities/custom/treant_sapling/shockwave.ron b/assets/common/abilities/custom/treant_sapling/shockwave.ron new file mode 100644 index 0000000000..f2d70d1e5d --- /dev/null +++ b/assets/common/abilities/custom/treant_sapling/shockwave.ron @@ -0,0 +1,18 @@ +Shockwave( + energy_cost: 0.0, + buildup_duration: 4.0, + swing_duration: 0.1, + recover_duration: 0.1, + damage: 15.0, + poise_damage: 0, + knockback: ( strength: 5.0, direction: Away), + shockwave_angle: 360.0, + shockwave_vertical_angle: 90.0, + shockwave_speed: 20.0, + shockwave_duration: 0.5, + requires_ground: true, + move_efficiency: 0.1, + damage_kind: Crushing, + specifier: Ground, + ori_rate: 1.0, +) diff --git a/assets/common/entity/wild/aggressive/bushly.ron b/assets/common/entity/wild/aggressive/bushly.ron new file mode 100644 index 0000000000..bb781c8a68 --- /dev/null +++ b/assets/common/entity/wild/aggressive/bushly.ron @@ -0,0 +1,12 @@ +#![enable(implicit_some)] +( + name: Name("Bushly"), + body: RandomWith("bushly"), + alignment: Alignment(Enemy), + loot: LootTable("common.loot_tables.creature.biped_small.bushly"), + inventory: ( + loadout: Inline(( + inherit: Asset("common.loadout.world.bushly.bushly"), + )), ), + meta: [], +) \ No newline at end of file diff --git a/assets/common/entity/wild/aggressive/driggle.ron b/assets/common/entity/wild/aggressive/driggle.ron new file mode 100644 index 0000000000..94eb660ef0 --- /dev/null +++ b/assets/common/entity/wild/aggressive/driggle.ron @@ -0,0 +1,11 @@ +#![enable(implicit_some)] +( + name: Name("Driggle"), + body: RandomWith("driggle"), + alignment: Alignment(Enemy), + loot: LootTable("common.loot_tables.creature.quad_low.driggle"), + inventory: ( + loadout: FromBody, + ), + meta: [], +) \ No newline at end of file diff --git a/assets/common/entity/wild/aggressive/emberfly.ron b/assets/common/entity/wild/aggressive/emberfly.ron new file mode 100644 index 0000000000..21206b9dbc --- /dev/null +++ b/assets/common/entity/wild/aggressive/emberfly.ron @@ -0,0 +1,11 @@ +#![enable(implicit_some)] +( + name: Name("Emberfly"), + body: RandomWith("emberfly"), + alignment: Alignment(Enemy), + loot: LootTable("common.loot_tables.creature.arthropod.emberfly"), + inventory: ( + loadout: FromBody, + ), + meta: [], +) \ No newline at end of file diff --git a/assets/common/entity/wild/aggressive/irrwurz.ron b/assets/common/entity/wild/aggressive/irrwurz.ron new file mode 100644 index 0000000000..f00e2b1c39 --- /dev/null +++ b/assets/common/entity/wild/aggressive/irrwurz.ron @@ -0,0 +1,12 @@ +#![enable(implicit_some)] +( + name: Name("Irrwurz"), + body: RandomWith("irrwurz"), + alignment: Alignment(Enemy), + loot: LootTable("common.loot_tables.creature.biped_small.irrwurz"), + inventory: ( + loadout: Inline(( + inherit: Asset("common.loadout.world.irrwurz.irrwurz"), + )), ), + meta: [], +) diff --git a/assets/common/entity/wild/aggressive/lavadrake.ron b/assets/common/entity/wild/aggressive/lavadrake.ron index 0f514de637..8ba9f948e1 100644 --- a/assets/common/entity/wild/aggressive/lavadrake.ron +++ b/assets/common/entity/wild/aggressive/lavadrake.ron @@ -3,7 +3,7 @@ name: Automatic, body: RandomWith("lavadrake"), alignment: Alignment(Enemy), - loot: LootTable("common.loot_tables.creature.quad_low.carapace"), + loot: LootTable("common.loot_tables.creature.quad_low.lavadrake"), inventory: ( loadout: FromBody, ), diff --git a/assets/common/entity/wild/aggressive/mossy_snail.ron b/assets/common/entity/wild/aggressive/mossy_snail.ron new file mode 100644 index 0000000000..bfd3b337b9 --- /dev/null +++ b/assets/common/entity/wild/aggressive/mossy_snail.ron @@ -0,0 +1,11 @@ +#![enable(implicit_some)] +( + name: Name("Mossy Snail"), + body: RandomWith("mossy_snail"), + alignment: Alignment(Enemy), + loot: LootTable("common.loot_tables.creature.quad_small.mossy_snail"), + inventory: ( + loadout: FromBody, + ), + meta: [], +) \ No newline at end of file diff --git a/assets/common/entity/wild/aggressive/treant_sapling.ron b/assets/common/entity/wild/aggressive/treant_sapling.ron new file mode 100644 index 0000000000..9fed371fc5 --- /dev/null +++ b/assets/common/entity/wild/aggressive/treant_sapling.ron @@ -0,0 +1,11 @@ +#![enable(implicit_some)] +( + name: Name("TreantSapling"), + body: RandomWith("treant_sapling"), + alignment: Alignment(Enemy), + loot: LootTable("common.loot_tables.creature.quad_small.treant_sapling"), + inventory: ( + loadout: FromBody, + ), + meta: [], +) \ No newline at end of file diff --git a/assets/common/entity/wild/peaceful/crawler_molten.ron b/assets/common/entity/wild/peaceful/crawler_molten.ron index 7097e8900d..45daf46615 100644 --- a/assets/common/entity/wild/peaceful/crawler_molten.ron +++ b/assets/common/entity/wild/peaceful/crawler_molten.ron @@ -3,7 +3,7 @@ name: Automatic, body: RandomWith("crawler_molten"), alignment: Alignment(Wild), - loot: LootTable("common.loot_tables.creature.arthropod.ooze"), + loot: LootTable("common.loot_tables.creature.arthropod.crawler_molten"), inventory: ( loadout: FromBody, ), diff --git a/assets/common/items/crafting_ing/living_embers.ron b/assets/common/items/crafting_ing/living_embers.ron new file mode 100644 index 0000000000..77c64536e5 --- /dev/null +++ b/assets/common/items/crafting_ing/living_embers.ron @@ -0,0 +1,10 @@ +ItemDef( + name: "Living Embers", + description: "Forest creatures often carry them.", + kind: Ingredient( + // Descriptor not needed + descriptor: "", + ), + quality: Common, + tags: [], +) diff --git a/assets/common/items/npc_armor/biped_small/bushly/chest/bushly.ron b/assets/common/items/npc_armor/biped_small/bushly/chest/bushly.ron new file mode 100644 index 0000000000..10af836e01 --- /dev/null +++ b/assets/common/items/npc_armor/biped_small/bushly/chest/bushly.ron @@ -0,0 +1,16 @@ +ItemDef( + name: "Bushly", + description: "Plant Creature", + kind: Armor(( + kind: Chest, + stats: Direct(( + protection: Some(Normal(4.0)), + poise_resilience: Some(Normal(4.0)), + energy_max: Some(3.4), + energy_reward: Some(0.81), + crit_power: Some(0.075), + )), + )), + quality: Low, + tags: [], +) diff --git a/assets/common/items/npc_armor/biped_small/bushly/foot/bushly.ron b/assets/common/items/npc_armor/biped_small/bushly/foot/bushly.ron new file mode 100644 index 0000000000..dfb4a32f50 --- /dev/null +++ b/assets/common/items/npc_armor/biped_small/bushly/foot/bushly.ron @@ -0,0 +1,16 @@ +ItemDef( + name: "Bushly", + description: "Plant Creature", + kind: Armor(( + kind: Foot, + stats: Direct(( + protection: Some(Normal(1.0)), + poise_resilience: Some(Normal(4.0)), + energy_max: Some(3.4), + energy_reward: Some(0.81), + crit_power: Some(0.075), + )), + )), + quality: Low, + tags: [], +) diff --git a/assets/common/items/npc_armor/biped_small/bushly/hand/bushly.ron b/assets/common/items/npc_armor/biped_small/bushly/hand/bushly.ron new file mode 100644 index 0000000000..cbc2bc8783 --- /dev/null +++ b/assets/common/items/npc_armor/biped_small/bushly/hand/bushly.ron @@ -0,0 +1,16 @@ +ItemDef( + name: "Mandragora", + description: "Ceremonial attire used by members.", + kind: Armor(( + kind: Hand, + stats: Direct(( + protection: Some(Normal(1.0)), + poise_resilience: Some(Normal(4.0)), + energy_max: Some(3.4), + energy_reward: Some(0.81), + crit_power: Some(0.075), + )), + )), + quality: Low, + tags: [], +) diff --git a/assets/common/items/npc_armor/biped_small/bushly/pants/bushly.ron b/assets/common/items/npc_armor/biped_small/bushly/pants/bushly.ron new file mode 100644 index 0000000000..7741d75720 --- /dev/null +++ b/assets/common/items/npc_armor/biped_small/bushly/pants/bushly.ron @@ -0,0 +1,16 @@ +ItemDef( + name: "Bushly", + description: "Plant Creature", + kind: Armor(( + kind: Pants, + stats: Direct(( + protection: Some(Normal(2.0)), + poise_resilience: Some(Normal(4.0)), + energy_max: Some(3.4), + energy_reward: Some(0.81), + crit_power: Some(0.075), + )), + )), + quality: Low, + tags: [], +) diff --git a/assets/common/items/npc_armor/biped_small/irrwurz/chest/irrwurz.ron b/assets/common/items/npc_armor/biped_small/irrwurz/chest/irrwurz.ron new file mode 100644 index 0000000000..3b1d8e8e2b --- /dev/null +++ b/assets/common/items/npc_armor/biped_small/irrwurz/chest/irrwurz.ron @@ -0,0 +1,16 @@ +ItemDef( + name: "Irrwurz", + description: "Plant Creature", + kind: Armor(( + kind: Chest, + stats: Direct(( + protection: Some(Normal(4.0)), + poise_resilience: Some(Normal(4.0)), + energy_max: Some(3.4), + energy_reward: Some(0.81), + crit_power: Some(0.075), + )), + )), + quality: Low, + tags: [], +) diff --git a/assets/common/items/npc_armor/biped_small/irrwurz/foot/irrwurz.ron b/assets/common/items/npc_armor/biped_small/irrwurz/foot/irrwurz.ron new file mode 100644 index 0000000000..6976f097a9 --- /dev/null +++ b/assets/common/items/npc_armor/biped_small/irrwurz/foot/irrwurz.ron @@ -0,0 +1,16 @@ +ItemDef( + name: "Irrwurz", + description: "Plant Creature", + kind: Armor(( + kind: Foot, + stats: Direct(( + protection: Some(Normal(1.0)), + poise_resilience: Some(Normal(4.0)), + energy_max: Some(3.4), + energy_reward: Some(0.81), + crit_power: Some(0.075), + )), + )), + quality: Low, + tags: [], +) diff --git a/assets/common/items/npc_armor/biped_small/irrwurz/hand/irrwurz.ron b/assets/common/items/npc_armor/biped_small/irrwurz/hand/irrwurz.ron new file mode 100644 index 0000000000..38db7da70e --- /dev/null +++ b/assets/common/items/npc_armor/biped_small/irrwurz/hand/irrwurz.ron @@ -0,0 +1,16 @@ +ItemDef( + name: "Irrwurz", + description: "Ceremonial attire used by members.", + kind: Armor(( + kind: Hand, + stats: Direct(( + protection: Some(Normal(1.0)), + poise_resilience: Some(Normal(4.0)), + energy_max: Some(3.4), + energy_reward: Some(0.81), + crit_power: Some(0.075), + )), + )), + quality: Low, + tags: [], +) diff --git a/assets/common/items/npc_armor/biped_small/irrwurz/pants/irrwurz.ron b/assets/common/items/npc_armor/biped_small/irrwurz/pants/irrwurz.ron new file mode 100644 index 0000000000..3847ebc19c --- /dev/null +++ b/assets/common/items/npc_armor/biped_small/irrwurz/pants/irrwurz.ron @@ -0,0 +1,16 @@ +ItemDef( + name: "Irrwurz", + description: "Plant Creature", + kind: Armor(( + kind: Pants, + stats: Direct(( + protection: Some(Normal(2.0)), + poise_resilience: Some(Normal(4.0)), + energy_max: Some(3.4), + energy_reward: Some(0.81), + crit_power: Some(0.075), + )), + )), + quality: Low, + tags: [], +) diff --git a/assets/common/items/npc_weapons/unique/bushly.ron b/assets/common/items/npc_weapons/unique/bushly.ron new file mode 100644 index 0000000000..eec1dffd34 --- /dev/null +++ b/assets/common/items/npc_weapons/unique/bushly.ron @@ -0,0 +1,21 @@ +ItemDef( + name: "Starter Grace", + description: "Fret not, newbies shant cry.", + kind: Tool(( + kind: Natural, + hands: Two, + stats: ( + equip_time_secs: 0.01, + power: 1.0, + effect_power: 1.0, + speed: 1.0, + crit_chance: 0.0625, + range: 1.0, + energy_efficiency: 1.0, + buff_strength: 1.0, + ), + )), + quality: Low, + tags: [], + ability_spec: Some(Custom("Bushly")), +) diff --git a/assets/common/items/npc_weapons/unique/driggle.ron b/assets/common/items/npc_weapons/unique/driggle.ron new file mode 100644 index 0000000000..34c0f1cda2 --- /dev/null +++ b/assets/common/items/npc_weapons/unique/driggle.ron @@ -0,0 +1,21 @@ +ItemDef( + name: "Starter Grace", + description: "Fret not, newbies shant cry.", + kind: Tool(( + kind: Natural, + hands: Two, + stats: ( + equip_time_secs: 0.01, + power: 1.0, + effect_power: 1.0, + speed: 1.0, + crit_chance: 0.0625, + range: 1.0, + energy_efficiency: 1.0, + buff_strength: 1.0, + ), + )), + quality: Low, + tags: [], + ability_spec: Some(Custom("Driggle")), +) diff --git a/assets/common/items/npc_weapons/unique/emberfly.ron b/assets/common/items/npc_weapons/unique/emberfly.ron new file mode 100644 index 0000000000..54ee6dd126 --- /dev/null +++ b/assets/common/items/npc_weapons/unique/emberfly.ron @@ -0,0 +1,21 @@ +ItemDef( + name: "Starter Grace", + description: "Fret not, newbies shant cry.", + kind: Tool(( + kind: Natural, + hands: Two, + stats: ( + equip_time_secs: 0.01, + power: 1.0, + effect_power: 1.0, + speed: 1.0, + crit_chance: 0.0625, + range: 1.0, + energy_efficiency: 1.0, + buff_strength: 1.0, + ), + )), + quality: Low, + tags: [], + ability_spec: Some(Custom("Emberfly")), +) diff --git a/assets/common/items/npc_weapons/unique/irrwurz.ron b/assets/common/items/npc_weapons/unique/irrwurz.ron new file mode 100644 index 0000000000..11cd51327f --- /dev/null +++ b/assets/common/items/npc_weapons/unique/irrwurz.ron @@ -0,0 +1,21 @@ +ItemDef( + name: "Starter Grace", + description: "Fret not, newbies shant cry.", + kind: Tool(( + kind: Natural, + hands: Two, + stats: ( + equip_time_secs: 0.01, + power: 1.0, + effect_power: 1.0, + speed: 1.0, + crit_chance: 0.0625, + range: 1.0, + energy_efficiency: 1.0, + buff_strength: 1.0, + ), + )), + quality: Low, + tags: [], + ability_spec: Some(Custom("Irrwurz")), +) diff --git a/assets/common/items/npc_weapons/unique/mossysnail.ron b/assets/common/items/npc_weapons/unique/mossysnail.ron new file mode 100644 index 0000000000..f503a5734f --- /dev/null +++ b/assets/common/items/npc_weapons/unique/mossysnail.ron @@ -0,0 +1,21 @@ +ItemDef( + name: "Starter Grace", + description: "Fret not, newbies shant cry.", + kind: Tool(( + kind: Natural, + hands: Two, + stats: ( + equip_time_secs: 0.01, + power: 1.0, + effect_power: 1.0, + speed: 1.0, + crit_chance: 0.0625, + range: 1.0, + energy_efficiency: 1.0, + buff_strength: 1.0, + ), + )), + quality: Low, + tags: [], + ability_spec: Some(Custom("Mossy Snail")), +) diff --git a/assets/common/items/npc_weapons/unique/treantsapling.ron b/assets/common/items/npc_weapons/unique/treantsapling.ron new file mode 100644 index 0000000000..87686f8bf4 --- /dev/null +++ b/assets/common/items/npc_weapons/unique/treantsapling.ron @@ -0,0 +1,21 @@ +ItemDef( + name: "Starter Grace", + description: "Fret not, newbies shant cry.", + kind: Tool(( + kind: Natural, + hands: Two, + stats: ( + equip_time_secs: 0.01, + power: 1.0, + effect_power: 1.0, + speed: 1.0, + crit_chance: 0.0625, + range: 1.0, + energy_efficiency: 1.0, + buff_strength: 1.0, + ), + )), + quality: Low, + tags: [], + ability_spec: Some(Custom("Treant Sapling")), +) diff --git a/assets/common/loadout/world/bushly/bushly.ron b/assets/common/loadout/world/bushly/bushly.ron new file mode 100644 index 0000000000..3df2f7e0d9 --- /dev/null +++ b/assets/common/loadout/world/bushly/bushly.ron @@ -0,0 +1,8 @@ +#![enable(implicit_some)] +( + chest: Item("common.items.npc_armor.biped_small.bushly.chest.bushly"), + gloves: Item("common.items.npc_armor.biped_small.bushly.hand.bushly"), + legs: Item("common.items.npc_armor.biped_small.bushly.pants.bushly"), + feet: Item("common.items.npc_armor.biped_small.bushly.foot.bushly"), + active_hands: InHands((Item("common.items.npc_weapons.unique.bushly"), None)), +) diff --git a/assets/common/loadout/world/irrwurz/irrwurz.ron b/assets/common/loadout/world/irrwurz/irrwurz.ron new file mode 100644 index 0000000000..dda0c4903f --- /dev/null +++ b/assets/common/loadout/world/irrwurz/irrwurz.ron @@ -0,0 +1,8 @@ +#![enable(implicit_some)] +( + chest: Item("common.items.npc_armor.biped_small.irrwurz.chest.irrwurz"), + gloves: Item("common.items.npc_armor.biped_small.irrwurz.hand.irrwurz"), + legs: Item("common.items.npc_armor.biped_small.irrwurz.pants.irrwurz"), + feet: Item("common.items.npc_armor.biped_small.irrwurz.foot.irrwurz"), + active_hands: InHands((Item("common.items.npc_weapons.unique.irrwurz"), None)), +) diff --git a/assets/common/loot_tables/creature/arthropod/crawler_molten.ron b/assets/common/loot_tables/creature/arthropod/crawler_molten.ron new file mode 100644 index 0000000000..0e01a7c03a --- /dev/null +++ b/assets/common/loot_tables/creature/arthropod/crawler_molten.ron @@ -0,0 +1,6 @@ +[ + (1.0, MultiDrop(Item("common.items.crafting_ing.sticky_thread"), 1, 3)), + (0.5, MultiDrop(Item("common.items.crafting_ing.animal_misc.viscous_ooze"), 1, 1)), + (1.0, Item("common.items.crafting_ing.living_embers")), + +] \ No newline at end of file diff --git a/assets/common/loot_tables/creature/arthropod/emberfly.ron b/assets/common/loot_tables/creature/arthropod/emberfly.ron new file mode 100644 index 0000000000..64fe9435db --- /dev/null +++ b/assets/common/loot_tables/creature/arthropod/emberfly.ron @@ -0,0 +1,4 @@ +[ + (1.0, Item("common.items.crafting_ing.living_embers")), + (1.0, Item("common.items.crafting_ing.animal_misc.viscous_ooze")), +] \ No newline at end of file diff --git a/assets/common/loot_tables/creature/biped_small/bushly.ron b/assets/common/loot_tables/creature/biped_small/bushly.ron new file mode 100644 index 0000000000..9a891eee17 --- /dev/null +++ b/assets/common/loot_tables/creature/biped_small/bushly.ron @@ -0,0 +1,3 @@ +[ + (1.0, Item("common.items.flowers.plant_fiber")), +] diff --git a/assets/common/loot_tables/creature/biped_small/irrwurz.ron b/assets/common/loot_tables/creature/biped_small/irrwurz.ron new file mode 100644 index 0000000000..909d63afa5 --- /dev/null +++ b/assets/common/loot_tables/creature/biped_small/irrwurz.ron @@ -0,0 +1,3 @@ +[ + (1.0, MultiDrop(Item("common.items.flowers.plant_fiber"), 2, 4)), +] diff --git a/assets/common/loot_tables/creature/quad_low/driggle.ron b/assets/common/loot_tables/creature/quad_low/driggle.ron new file mode 100644 index 0000000000..78e513d983 --- /dev/null +++ b/assets/common/loot_tables/creature/quad_low/driggle.ron @@ -0,0 +1,4 @@ +[ + (1.0, Item("common.items.crafting_ing.living_embers")), + (1.0, Item("common.items.crafting_ing.hide.animal_hide")), +] diff --git a/assets/common/loot_tables/creature/quad_low/lavadrake.ron b/assets/common/loot_tables/creature/quad_low/lavadrake.ron new file mode 100644 index 0000000000..514836384e --- /dev/null +++ b/assets/common/loot_tables/creature/quad_low/lavadrake.ron @@ -0,0 +1,5 @@ +[ + (1.0, Item("common.items.food.meat.tough_raw")), + (3.0, Item("common.items.crafting_ing.hide.carapace")), + (1.0, MultiDrop(Item("common.items.crafting_ing.living_embers"), 2, 4)), +] \ No newline at end of file diff --git a/assets/common/loot_tables/creature/quad_low/salamander.ron b/assets/common/loot_tables/creature/quad_low/salamander.ron index 9e97383c16..bb26c2419f 100644 --- a/assets/common/loot_tables/creature/quad_low/salamander.ron +++ b/assets/common/loot_tables/creature/quad_low/salamander.ron @@ -1,4 +1,5 @@ [ (1.0, Item("common.items.crafting_ing.hide.tough_hide")), (1.0, Item("common.items.food.meat.tough_raw")), + (1.0, Item("common.items.crafting_ing.living_embers")), ] \ No newline at end of file diff --git a/assets/common/loot_tables/creature/quad_small/mossy_snail.ron b/assets/common/loot_tables/creature/quad_small/mossy_snail.ron new file mode 100644 index 0000000000..e83b3e469e --- /dev/null +++ b/assets/common/loot_tables/creature/quad_small/mossy_snail.ron @@ -0,0 +1,4 @@ +[ + (1.0, Item("common.items.flowers.plant_fiber")), + (1.0, Item("common.items.crafting_ing.animal_misc.viscous_ooze")), +] diff --git a/assets/common/loot_tables/creature/quad_small/treant_sapling.ron b/assets/common/loot_tables/creature/quad_small/treant_sapling.ron new file mode 100644 index 0000000000..caffef68e0 --- /dev/null +++ b/assets/common/loot_tables/creature/quad_small/treant_sapling.ron @@ -0,0 +1,5 @@ +[ + (2.0, Item("common.items.log.wood")), + (2.0, Item("common.items.flowers.plant_fiber")), + (1.0, Item("common.items.crafting_ing.resin")), +] diff --git a/assets/common/npc_names.ron b/assets/common/npc_names.ron index d2f71081c1..fd416edaef 100644 --- a/assets/common/npc_names.ron +++ b/assets/common/npc_names.ron @@ -789,6 +789,14 @@ seal: ( keyword: "seal", generic: "Seal" + ), + treant_sapling: ( + keyword: "treant_sapling", + generic: "Treant Sapling" + ), + mossy_snail: ( + keyword: "mossy_snail", + generic: "Mossy Snail" ) ) ), @@ -1149,6 +1157,14 @@ keyword: "boreal", generic: "Boreal", ), + bushly: ( + keyword: "bushly", + generic: "Bushly", + ), + irrwurz: ( + keyword: "irrwurz", + generic: "Irrwurz", + ), ) ), fish_small: ( @@ -1321,6 +1337,10 @@ keyword: "mossdrake", generic: "Moss Drake" ), + driggle: ( + keyword: "driggle", + generic: "Driggle" + ), ) ), arthropod: ( @@ -1379,6 +1399,10 @@ keyword: "dagonite", generic: "Dagonite" ), + emberfly: ( + keyword: "emberfly", + generic: "Emberfly" + ), ) ), ) diff --git a/assets/common/recipe_book.ron b/assets/common/recipe_book.ron index 133c504229..a4bc06d350 100644 --- a/assets/common/recipe_book.ron +++ b/assets/common/recipe_book.ron @@ -61,6 +61,7 @@ output: ("common.items.utility.collar", 1), inputs: [ (Item("common.items.crafting_ing.leather.leather_strips"), 5, false), + (Item("common.items.mineral.ingot.iron"), 1, false), (Item("common.items.mineral.gem.ruby"), 1, false), ], craft_sprite: None, @@ -71,6 +72,7 @@ (Item("common.items.crafting_ing.stones"), 10, false), (Item("common.items.food.coconut"), 2, false), (Item("common.items.mineral.ore.veloritefrag"), 2, false), + (Item("common.items.crafting_ing.living_embers"), 1, false), (Item("common.items.crafting_tools.mortar_pestle"), 0, false), ], craft_sprite: Some(CraftingBench), @@ -81,6 +83,7 @@ (Item("common.items.crafting_ing.twigs"), 1, false), (Item("common.items.crafting_ing.stones"), 1, false), (Item("common.items.food.coconut"), 1, false), + (Item("common.items.crafting_ing.living_embers"), 1, false), (Item("common.items.mineral.ore.veloritefrag"), 1, false), (Item("common.items.crafting_tools.mortar_pestle"), 0, false), ], @@ -92,6 +95,7 @@ (Item("common.items.crafting_ing.twigs"), 1, false), (Item("common.items.crafting_ing.stones"), 1, false), (Item("common.items.food.coconut"), 1, false), + (Item("common.items.crafting_ing.living_embers"), 1, false), (Item("common.items.mineral.ore.veloritefrag"), 1, false), (Item("common.items.crafting_tools.mortar_pestle"), 0, false), ], @@ -103,6 +107,7 @@ (Item("common.items.crafting_ing.twigs"), 1, false), (Item("common.items.crafting_ing.stones"), 1, false), (Item("common.items.food.coconut"), 1, false), + (Item("common.items.crafting_ing.living_embers"), 1, false), (Item("common.items.mineral.ore.veloritefrag"), 1, false), (Item("common.items.crafting_tools.mortar_pestle"), 0, false), ], @@ -114,6 +119,7 @@ (Item("common.items.crafting_ing.twigs"), 1, false), (Item("common.items.crafting_ing.stones"), 1, false), (Item("common.items.food.coconut"), 1, false), + (Item("common.items.crafting_ing.living_embers"), 1, false), (Item("common.items.mineral.ore.veloritefrag"), 1, false), (Item("common.items.crafting_tools.mortar_pestle"), 0, false), ], @@ -125,6 +131,7 @@ (Item("common.items.crafting_ing.twigs"), 1, false), (Item("common.items.crafting_ing.stones"), 1, false), (Item("common.items.food.coconut"), 1, false), + (Item("common.items.crafting_ing.living_embers"), 1, false), (Item("common.items.mineral.ore.veloritefrag"), 1, false), (Item("common.items.crafting_tools.mortar_pestle"), 0, false), ], @@ -136,6 +143,7 @@ (Item("common.items.crafting_ing.twigs"), 1, false), (Item("common.items.crafting_ing.stones"), 1, false), (Item("common.items.food.coconut"), 1, false), + (Item("common.items.crafting_ing.living_embers"), 1, false), (Item("common.items.mineral.ore.veloritefrag"), 1, false), (Item("common.items.crafting_tools.mortar_pestle"), 0, false), ], @@ -1975,7 +1983,7 @@ output: ("common.items.lantern.black_0", 1), inputs: [ (Item("common.items.mineral.ingot.tin"), 5, false), - (Item("common.items.mineral.ore.veloritefrag"), 3, false), + (Item("common.items.crafting_ing.living_embers"), 2, false), ], craft_sprite: Some(Anvil), ), @@ -2106,7 +2114,7 @@ "light_pyrocore": ( output: ("common.items.modular.weapon.secondary.staff.light", 1), inputs: [ - (Item("common.items.mineral.gem.ruby"), 1, false), + (Item("common.items.crafting_ing.living_embers"), 1, false), (Item("common.items.mineral.ore.veloritefrag"), 3, false), ], craft_sprite: Some(Cauldron), @@ -2115,7 +2123,7 @@ "medium_pyrocore": ( output: ("common.items.modular.weapon.secondary.staff.medium", 1), inputs: [ - (Item("common.items.mineral.gem.ruby"), 1, false), + (Item("common.items.crafting_ing.living_embers"), 1, false), (Item("common.items.mineral.ore.veloritefrag"), 3, false), ], craft_sprite: Some(Cauldron), @@ -2124,7 +2132,7 @@ "heavy_pyrocore": ( output: ("common.items.modular.weapon.secondary.staff.heavy", 1), inputs: [ - (Item("common.items.mineral.gem.ruby"), 1, false), + (Item("common.items.crafting_ing.living_embers"), 1, false), (Item("common.items.mineral.ore.veloritefrag"), 3, false), ], craft_sprite: Some(Cauldron), diff --git a/assets/voxygen/item_image_manifest.ron b/assets/voxygen/item_image_manifest.ron index 140c72f93c..97ad391275 100644 --- a/assets/voxygen/item_image_manifest.ron +++ b/assets/voxygen/item_image_manifest.ron @@ -3554,6 +3554,10 @@ "voxel.sprite.crafting_ing.sticky_thread", (0.0, 0.0, 0.0), (-65.0, 0.0, 20.0), 0.9, ), + Simple("common.items.crafting_ing.living_embers"): VoxTrans( + "voxel.sprite.crafting_ing.living_embers", + (0.0, 0.0, 0.0), (-65.0, 0.0, 20.0), 0.9, + ), Simple("common.items.crafting_ing.resin"): VoxTrans( "voxel.sprite.crafting_ing.resin", (0.0, 0.0, 0.0), (-65.0, 0.0, 20.0), 0.9, diff --git a/assets/voxygen/voxel/arthropod_central_manifest.ron b/assets/voxygen/voxel/arthropod_central_manifest.ron index 28a13e1d12..d1f5f709a6 100644 --- a/assets/voxygen/voxel/arthropod_central_manifest.ron +++ b/assets/voxygen/voxel/arthropod_central_manifest.ron @@ -239,4 +239,24 @@ central: ("npc.dagonite.male.chest"), ), ), + (Emberfly, Male): ( + head: ( + offset: (-3.5, 5.5, -3.0), + central: ("npc.emberfly.male.head"), + ), + chest: ( + offset: (-2.5, -5.0, -3.5), + central: ("npc.emberfly.male.chest"), + ), + ), + (Emberfly, Female): ( + head: ( + offset: (-3.5, 5.5, -3.0), + central: ("npc.emberfly.male.head"), + ), + chest: ( + offset: (-2.5, -5.0, -3.5), + central: ("npc.emberfly.male.chest"), + ), + ), }) diff --git a/assets/voxygen/voxel/arthropod_lateral_manifest.ron b/assets/voxygen/voxel/arthropod_lateral_manifest.ron index 09da235525..81465a64e4 100644 --- a/assets/voxygen/voxel/arthropod_lateral_manifest.ron +++ b/assets/voxygen/voxel/arthropod_lateral_manifest.ron @@ -1391,4 +1391,120 @@ lateral: ("armor.empty"), ), ), + (Emberfly, Male): ( + mandible_l: ( + offset: (-1.0, 0.0, -4.0), + lateral: ("armor.empty"), + ), + mandible_r: ( + offset: (-1.0, 0.0, -4.0), + lateral: ("armor.empty"), + ), + wing_fl: ( + offset: (-0.0, -12.0, -0.5), + lateral: ("npc.emberfly.male.wing_fr"), + ), + wing_fr: ( + offset: (-5.0, -12.0, -0.5), + lateral: ("npc.emberfly.male.wing_fr"), + ), + wing_bl: ( + offset: (-0.0, -12.0, -0.5), + lateral: ("armor.empty"), + ), + wing_br: ( + offset: (-4.0, -12.0, -0.5), + lateral: ("armor.empty"), + ), + leg_fl: ( + offset: (-7.0, -0.5, -3.0), + lateral: ("npc.emberfly.male.leg_fr"), + ), + leg_fr: ( + offset: (0.0, -0.5, -3.0), + lateral: ("npc.emberfly.male.leg_fr"), + ), + leg_fcl: ( + offset: (-7.0, -0.5, -3.0), + lateral: ("npc.emberfly.male.leg_fcr"), + ), + leg_fcr: ( + offset: (0.0, -0.5, -3.0), + lateral: ("npc.emberfly.male.leg_fcr"), + ), + leg_bcl: ( + offset: (-7.0, -0.5, -3.0), + lateral: ("npc.emberfly.male.leg_bcr"), + ), + leg_bcr: ( + offset: (0.0, -0.5, -3.0), + lateral: ("npc.emberfly.male.leg_bcr"), + ), + leg_bl: ( + offset: (-12.0, -1.5, -4.5), + lateral: ("armor.empty"), + ), + leg_br: ( + offset: (0.0, -1.5, -4.5), + lateral: ("armor.empty"), + ), + ), + (Emberfly, Female): ( + mandible_l: ( + offset: (-1.0, 0.0, -4.0), + lateral: ("armor.empty"), + ), + mandible_r: ( + offset: (-1.0, 0.0, -4.0), + lateral: ("armor.empty"), + ), + wing_fl: ( + offset: (-0.0, -12.0, -0.5), + lateral: ("npc.emberfly.male.wing_fr"), + ), + wing_fr: ( + offset: (-5.0, -12.0, -0.5), + lateral: ("npc.emberfly.male.wing_fr"), + ), + wing_bl: ( + offset: (-0.0, -12.0, -0.5), + lateral: ("armor.empty"), + ), + wing_br: ( + offset: (-4.0, -12.0, -0.5), + lateral: ("armor.empty"), + ), + leg_fl: ( + offset: (-7.0, -0.5, -3.0), + lateral: ("npc.emberfly.male.leg_fr"), + ), + leg_fr: ( + offset: (0.0, -0.5, -3.0), + lateral: ("npc.emberfly.male.leg_fr"), + ), + leg_fcl: ( + offset: (-7.0, -0.5, -3.0), + lateral: ("npc.emberfly.male.leg_fcr"), + ), + leg_fcr: ( + offset: (0.0, -0.5, -3.0), + lateral: ("npc.emberfly.male.leg_fcr"), + ), + leg_bcl: ( + offset: (-7.0, -0.5, -3.0), + lateral: ("npc.emberfly.male.leg_bcr"), + ), + leg_bcr: ( + offset: (0.0, -0.5, -3.0), + lateral: ("npc.emberfly.male.leg_bcr"), + ), + leg_bl: ( + offset: (-12.0, -1.5, -4.5), + lateral: ("armor.empty"), + ), + leg_br: ( + offset: (0.0, -1.5, -4.5), + lateral: ("armor.empty"), + ), + ), }) diff --git a/assets/voxygen/voxel/biped_small_armor_chest_manifest.ron b/assets/voxygen/voxel/biped_small_armor_chest_manifest.ron index 56d809c5c2..45ea26cce7 100644 --- a/assets/voxygen/voxel/biped_small_armor_chest_manifest.ron +++ b/assets/voxygen/voxel/biped_small_armor_chest_manifest.ron @@ -78,5 +78,11 @@ "common.items.npc_armor.biped_small.boreal.chest.warrior": ( vox_spec: ("npc.boreal.warrior.chest", (-9.0, -6.0, -8.5)), ), + "common.items.npc_armor.biped_small.bushly.chest.bushly": ( + vox_spec: ("npc.bushly.male.chest", (-7.0, -7.0, 0.0)), + ), + "common.items.npc_armor.biped_small.irrwurz.chest.irrwurz": ( + vox_spec: ("npc.irrwurz.male.chest", (-7.5, -7.5, 0.0)), + ), }, )) diff --git a/assets/voxygen/voxel/biped_small_armor_foot_manifest.ron b/assets/voxygen/voxel/biped_small_armor_foot_manifest.ron index 6ea80fa2c7..fb1e4c38f1 100644 --- a/assets/voxygen/voxel/biped_small_armor_foot_manifest.ron +++ b/assets/voxygen/voxel/biped_small_armor_foot_manifest.ron @@ -208,5 +208,21 @@ vox_spec: ("npc.boreal.warrior.foot_r", (-2.5, -3.5, -9.0)), ) ), + "common.items.npc_armor.biped_small.bushly.foot.bushly": ( + left: ( + vox_spec: ("npc.bushly.male.foot_r", (-1.5, -2.0, -7.0)), + ), + right: ( + vox_spec: ("npc.bushly.male.foot_r", (-1.5, -2.0, -7.0)), + ) + ), + "common.items.npc_armor.biped_small.irrwurz.foot.irrwurz": ( + left: ( + vox_spec: ("npc.irrwurz.male.foot_r", (-1.5, -2.5, -6.0)), + ), + right: ( + vox_spec: ("npc.irrwurz.male.foot_r", (-1.5, -2.5, -6.0)), + ) + ), }, -)) +)) \ No newline at end of file diff --git a/assets/voxygen/voxel/biped_small_armor_hand_manifest.ron b/assets/voxygen/voxel/biped_small_armor_hand_manifest.ron index 2573b15526..b6545c05b9 100644 --- a/assets/voxygen/voxel/biped_small_armor_hand_manifest.ron +++ b/assets/voxygen/voxel/biped_small_armor_hand_manifest.ron @@ -208,5 +208,21 @@ vox_spec: ("npc.boreal.warrior.hand_r", (0.0, -2.5, -10.0)), ) ), + "common.items.npc_armor.biped_small.bushly.hand.bushly": ( + left: ( + vox_spec: ("npc.bushly.male.hand_r", (-4.0, -3.0, -8.0)), + ), + right: ( + vox_spec: ("npc.bushly.male.hand_r", (0.0, -3.0, -8.0)), + ) + ), + "common.items.npc_armor.biped_small.irrwurz.hand.irrwurz": ( + left: ( + vox_spec: ("npc.irrwurz.male.hand_r", (-6.0, -3.5, -7.0)), + ), + right: ( + vox_spec: ("npc.irrwurz.male.hand_r", (0.0, -3.5, -7.0)), + ) + ), } -)) +)) \ No newline at end of file diff --git a/assets/voxygen/voxel/biped_small_armor_pants_manifest.ron b/assets/voxygen/voxel/biped_small_armor_pants_manifest.ron index 768d7493d5..a1493fe06a 100644 --- a/assets/voxygen/voxel/biped_small_armor_pants_manifest.ron +++ b/assets/voxygen/voxel/biped_small_armor_pants_manifest.ron @@ -78,5 +78,11 @@ "common.items.npc_armor.biped_small.boreal.pants.warrior": ( vox_spec: ("npc.boreal.warrior.pants", (-7.0, -5.0, -3.5)), ), + "common.items.npc_armor.biped_small.bushly.pants.bushly": ( + vox_spec: ("npc.bushly.male.pants", (-3.0, -2.0, -1.0)), + ), + "common.items.npc_armor.biped_small.irrwurz.pants.irrwurz": ( + vox_spec: ("npc.irrwurz.male.pants", (-3.5, -4.0, -3.5)), + ), }, -)) +)) \ No newline at end of file diff --git a/assets/voxygen/voxel/biped_weapon_manifest.ron b/assets/voxygen/voxel/biped_weapon_manifest.ron index 11cd3c48d1..d8f419e9c2 100644 --- a/assets/voxygen/voxel/biped_weapon_manifest.ron +++ b/assets/voxygen/voxel/biped_weapon_manifest.ron @@ -1581,6 +1581,14 @@ vox_spec: ("armor.empty", (-3.0, -3.5, 1.0)), color: None ), + Tool("common.items.npc_weapons.unique.bushly"): ( + vox_spec: ("armor.empty", (-3.0, -3.5, 1.0)), + color: None + ), + Tool("common.items.npc_weapons.unique.irrwurz"): ( + vox_spec: ("armor.empty", (-3.0, -3.5, 1.0)), + color: None + ), Tool("common.items.npc_weapons.unique.cardinal"): ( vox_spec: ("weapon.sceptre.caduceus", (-2.5, -4.5, -6.0)), color: None diff --git a/assets/voxygen/voxel/item_drop_manifest.ron b/assets/voxygen/voxel/item_drop_manifest.ron index 0966374d25..69ff249fe0 100644 --- a/assets/voxygen/voxel/item_drop_manifest.ron +++ b/assets/voxygen/voxel/item_drop_manifest.ron @@ -902,6 +902,7 @@ Simple("common.items.crafting_ing.cloth.sunsilk"): "voxel.sprite.crafting_ing.cloth.sunsilk", Simple("common.items.crafting_ing.cloth.linen_red"): "voxel.sprite.crafting_ing.cloth.linen_red", Simple("common.items.crafting_ing.sticky_thread"): "voxel.sprite.crafting_ing.sticky_thread", + Simple("common.items.crafting_ing.living_embers"): "voxel.sprite.crafting_ing.living_embers", Simple("common.items.crafting_ing.resin"): "voxel.sprite.crafting_ing.resin", Simple("common.items.crafting_ing.glacial_crystal"): "voxel.object.glacial_crystal", Simple("common.items.mineral.ingot.silver"): "voxel.sprite.mineral.ingot.silver", diff --git a/assets/voxygen/voxel/npc/bushly/male/chest.vox b/assets/voxygen/voxel/npc/bushly/male/chest.vox new file mode 100644 index 0000000000..9310638f1e --- /dev/null +++ b/assets/voxygen/voxel/npc/bushly/male/chest.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6816e694857f4d84d8ecf83c3ccd2677f5fe054d8df0a1fc11f8022f7f92e262 +size 4856 diff --git a/assets/voxygen/voxel/npc/bushly/male/foot_r.vox b/assets/voxygen/voxel/npc/bushly/male/foot_r.vox new file mode 100644 index 0000000000..f37f6f5bc9 --- /dev/null +++ b/assets/voxygen/voxel/npc/bushly/male/foot_r.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4211e75f7e12d1c7447c9a93eea9398c75f0522b3657a0699e97e8daf5ac0e0e +size 1248 diff --git a/assets/voxygen/voxel/npc/bushly/male/hand_r.vox b/assets/voxygen/voxel/npc/bushly/male/hand_r.vox new file mode 100644 index 0000000000..47a3a49be6 --- /dev/null +++ b/assets/voxygen/voxel/npc/bushly/male/hand_r.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ff43ade3161f1855d7dc451eabdd404dffbd73fac8511cee409b17a580a57cca +size 1212 diff --git a/assets/voxygen/voxel/npc/bushly/male/pants.vox b/assets/voxygen/voxel/npc/bushly/male/pants.vox new file mode 100644 index 0000000000..82e7bc2373 --- /dev/null +++ b/assets/voxygen/voxel/npc/bushly/male/pants.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:019b32e0fe5a439914453e6710ec439323d086bf94737d2d3fc0300e08e18dda +size 1176 diff --git a/assets/voxygen/voxel/npc/driggle/male/chest.vox b/assets/voxygen/voxel/npc/driggle/male/chest.vox new file mode 100644 index 0000000000..88176eb13f --- /dev/null +++ b/assets/voxygen/voxel/npc/driggle/male/chest.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6d2ca9d4515c5e8421220c0baff64cbc7091eb5696f1f7946816c64aeca72e20 +size 3928 diff --git a/assets/voxygen/voxel/npc/driggle/male/foot_br.vox b/assets/voxygen/voxel/npc/driggle/male/foot_br.vox new file mode 100644 index 0000000000..7fca310982 --- /dev/null +++ b/assets/voxygen/voxel/npc/driggle/male/foot_br.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:593121cb7bf37d9b3a2a1d0a576cdee3aba0dd69f0e9fbbf0cd3521ad8c7d9c7 +size 1224 diff --git a/assets/voxygen/voxel/npc/driggle/male/foot_fr.vox b/assets/voxygen/voxel/npc/driggle/male/foot_fr.vox new file mode 100644 index 0000000000..5073f950c3 --- /dev/null +++ b/assets/voxygen/voxel/npc/driggle/male/foot_fr.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:77aa17f1db7dc74a14435dd4b018216ca63fcbab71a2b8c181366a4cded6906e +size 1256 diff --git a/assets/voxygen/voxel/npc/driggle/male/head_lower.vox b/assets/voxygen/voxel/npc/driggle/male/head_lower.vox new file mode 100644 index 0000000000..1f5ccc3c53 --- /dev/null +++ b/assets/voxygen/voxel/npc/driggle/male/head_lower.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cce7adc271a3fd36672ec4c638112b86543eb16a126820c9e2adfe404eee8571 +size 1536 diff --git a/assets/voxygen/voxel/npc/driggle/male/head_upper.vox b/assets/voxygen/voxel/npc/driggle/male/head_upper.vox new file mode 100644 index 0000000000..1281179fba --- /dev/null +++ b/assets/voxygen/voxel/npc/driggle/male/head_upper.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3192045ab861333545187a62628c18077e7eb7dbdc88b36f57db05b80cf82fa4 +size 2180 diff --git a/assets/voxygen/voxel/npc/driggle/male/jaw.vox b/assets/voxygen/voxel/npc/driggle/male/jaw.vox new file mode 100644 index 0000000000..1e7e32582b --- /dev/null +++ b/assets/voxygen/voxel/npc/driggle/male/jaw.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:54a3e8b99747e62033329b6a239f52250777c5f68e8bd5d816c6803f38385fb2 +size 1912 diff --git a/assets/voxygen/voxel/npc/driggle/male/tail_front.vox b/assets/voxygen/voxel/npc/driggle/male/tail_front.vox new file mode 100644 index 0000000000..bc7dc36696 --- /dev/null +++ b/assets/voxygen/voxel/npc/driggle/male/tail_front.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4fc967d796fb316080392aa6af97db13e509949890b4d5b2bb259aaa2ec1064f +size 1360 diff --git a/assets/voxygen/voxel/npc/driggle/male/tail_rear.vox b/assets/voxygen/voxel/npc/driggle/male/tail_rear.vox new file mode 100644 index 0000000000..8b003cb3d4 --- /dev/null +++ b/assets/voxygen/voxel/npc/driggle/male/tail_rear.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a144b105412e2e50e38de7149ae06c2048ea06a8636d27f51cbc5740968b2cfd +size 1412 diff --git a/assets/voxygen/voxel/npc/emberfly/male/chest.vox b/assets/voxygen/voxel/npc/emberfly/male/chest.vox new file mode 100644 index 0000000000..da9b1cbb63 --- /dev/null +++ b/assets/voxygen/voxel/npc/emberfly/male/chest.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:41adabd918736dc8cce7e75a2bc9feed16e472bfefbffed135537e56aef38bf8 +size 1828 diff --git a/assets/voxygen/voxel/npc/emberfly/male/head.vox b/assets/voxygen/voxel/npc/emberfly/male/head.vox new file mode 100644 index 0000000000..c9e485f831 --- /dev/null +++ b/assets/voxygen/voxel/npc/emberfly/male/head.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4a82c09c5af9d9ea09a77703237adae322acd9f30e28d6ccc4352f38cb4b3acc +size 1576 diff --git a/assets/voxygen/voxel/npc/emberfly/male/leg_bcr.vox b/assets/voxygen/voxel/npc/emberfly/male/leg_bcr.vox new file mode 100644 index 0000000000..7c79b6383b --- /dev/null +++ b/assets/voxygen/voxel/npc/emberfly/male/leg_bcr.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:48584e14b257a44aba2e236a35e86f7139b41cfd08dbd2f50adf21795401068c +size 1152 diff --git a/assets/voxygen/voxel/npc/emberfly/male/leg_fcr.vox b/assets/voxygen/voxel/npc/emberfly/male/leg_fcr.vox new file mode 100644 index 0000000000..7c79b6383b --- /dev/null +++ b/assets/voxygen/voxel/npc/emberfly/male/leg_fcr.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:48584e14b257a44aba2e236a35e86f7139b41cfd08dbd2f50adf21795401068c +size 1152 diff --git a/assets/voxygen/voxel/npc/emberfly/male/leg_fr.vox b/assets/voxygen/voxel/npc/emberfly/male/leg_fr.vox new file mode 100644 index 0000000000..7c79b6383b --- /dev/null +++ b/assets/voxygen/voxel/npc/emberfly/male/leg_fr.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:48584e14b257a44aba2e236a35e86f7139b41cfd08dbd2f50adf21795401068c +size 1152 diff --git a/assets/voxygen/voxel/npc/emberfly/male/wing_fr.vox b/assets/voxygen/voxel/npc/emberfly/male/wing_fr.vox new file mode 100644 index 0000000000..282f1f7f7a --- /dev/null +++ b/assets/voxygen/voxel/npc/emberfly/male/wing_fr.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3ba4b940667b20d1833909bb62483fad3003d7265673c2a53d8d0f35c9853625 +size 1280 diff --git a/assets/voxygen/voxel/npc/irrwurz/male/chest.vox b/assets/voxygen/voxel/npc/irrwurz/male/chest.vox new file mode 100644 index 0000000000..b04aeba13a --- /dev/null +++ b/assets/voxygen/voxel/npc/irrwurz/male/chest.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f70505c3e48d4eed5e3ec770b438c66db983b9a8185f945b680b0bb86a07ac5a +size 4272 diff --git a/assets/voxygen/voxel/npc/irrwurz/male/foot_r.vox b/assets/voxygen/voxel/npc/irrwurz/male/foot_r.vox new file mode 100644 index 0000000000..5904bedf07 --- /dev/null +++ b/assets/voxygen/voxel/npc/irrwurz/male/foot_r.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8cb32944f5f82d33744ea1c1431258cff414f216054de7225ddd05f9d2b18725 +size 1280 diff --git a/assets/voxygen/voxel/npc/irrwurz/male/hand_r.vox b/assets/voxygen/voxel/npc/irrwurz/male/hand_r.vox new file mode 100644 index 0000000000..8070cf01ee --- /dev/null +++ b/assets/voxygen/voxel/npc/irrwurz/male/hand_r.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aa8a0f132da33d537779e11b51581e68b664484039513c5a48d9aa1818766b21 +size 1332 diff --git a/assets/voxygen/voxel/npc/irrwurz/male/pants.vox b/assets/voxygen/voxel/npc/irrwurz/male/pants.vox new file mode 100644 index 0000000000..53d49ff397 --- /dev/null +++ b/assets/voxygen/voxel/npc/irrwurz/male/pants.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:df4d5fd372bbf648a9fd094a1e5aa99811de77464f8be7a7f2672ba4580d90c8 +size 1764 diff --git a/assets/voxygen/voxel/npc/mossy_snail/male/chest.vox b/assets/voxygen/voxel/npc/mossy_snail/male/chest.vox new file mode 100644 index 0000000000..26aa8531dd --- /dev/null +++ b/assets/voxygen/voxel/npc/mossy_snail/male/chest.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:08defe7137e6d4f730ec8502f2b150e919e02a7ed6fdb4cea517ff813b0bae41 +size 4024 diff --git a/assets/voxygen/voxel/npc/mossy_snail/male/head.vox b/assets/voxygen/voxel/npc/mossy_snail/male/head.vox new file mode 100644 index 0000000000..04329e4e8d --- /dev/null +++ b/assets/voxygen/voxel/npc/mossy_snail/male/head.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6c1771ffe7067b9d2bf1d04d0cf5767fb94d04f4e19851bce150280931396739 +size 1600 diff --git a/assets/voxygen/voxel/npc/treant_sapling/male/chest.vox b/assets/voxygen/voxel/npc/treant_sapling/male/chest.vox new file mode 100644 index 0000000000..919e93adbb --- /dev/null +++ b/assets/voxygen/voxel/npc/treant_sapling/male/chest.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ea36c11ae3ebb6fc46508e656c07aa8a4ec5ed03f07b08aaf13d2aba8b92ca97 +size 6384 diff --git a/assets/voxygen/voxel/npc/treant_sapling/male/foot_br.vox b/assets/voxygen/voxel/npc/treant_sapling/male/foot_br.vox new file mode 100644 index 0000000000..165298e250 --- /dev/null +++ b/assets/voxygen/voxel/npc/treant_sapling/male/foot_br.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e24e77047ca8d3cf019063a4a598d954e468f880528f9cc5274aaafe76d01ec9 +size 1252 diff --git a/assets/voxygen/voxel/npc/treant_sapling/male/foot_fr.vox b/assets/voxygen/voxel/npc/treant_sapling/male/foot_fr.vox new file mode 100644 index 0000000000..165298e250 --- /dev/null +++ b/assets/voxygen/voxel/npc/treant_sapling/male/foot_fr.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e24e77047ca8d3cf019063a4a598d954e468f880528f9cc5274aaafe76d01ec9 +size 1252 diff --git a/assets/voxygen/voxel/quadruped_low_central_manifest.ron b/assets/voxygen/voxel/quadruped_low_central_manifest.ron index c5d499f8e3..aabda8b2f1 100644 --- a/assets/voxygen/voxel/quadruped_low_central_manifest.ron +++ b/assets/voxygen/voxel/quadruped_low_central_manifest.ron @@ -1092,4 +1092,56 @@ central: ("npc.mossdrake.male.tail_front"), ), ), + (Driggle, Male): ( + upper: ( + offset: (-9.5, -5.0, -5.5), + central: ("npc.driggle.male.head_upper"), + ), + lower: ( + offset: (-4.5, -1.0, -4.0), + central: ("npc.driggle.male.head_lower"), + ), + jaw: ( + offset: (-4.5, 0.0, -3.0), + central: ("npc.driggle.male.jaw"), + ), + chest: ( + offset: (-5.5, -6.5, -8.0), + central: ("npc.driggle.male.chest"), + ), + tail_rear: ( + offset: (-2.5, -3.5, -3.5), + central: ("npc.driggle.male.tail_rear"), + ), + tail_front: ( + offset: (-2.5, -1.5, -4.0), + central: ("npc.driggle.male.tail_front"), + ), + ), + (Driggle, Female): ( + upper: ( + offset: (-9.5, -5.0, -5.5), + central: ("npc.driggle.male.head_upper"), + ), + lower: ( + offset: (-4.5, -1.0, -4.0), + central: ("npc.driggle.male.head_lower"), + ), + jaw: ( + offset: (-4.5, 0.0, -3.0), + central: ("npc.driggle.male.jaw"), + ), + chest: ( + offset: (-5.5, -6.5, -8.0), + central: ("npc.driggle.male.chest"), + ), + tail_rear: ( + offset: (-2.5, -3.5, -3.5), + central: ("npc.driggle.male.tail_rear"), + ), + tail_front: ( + offset: (-2.5, -1.5, -4.0), + central: ("npc.driggle.male.tail_front"), + ), + ), }) diff --git a/assets/voxygen/voxel/quadruped_low_lateral_manifest.ron b/assets/voxygen/voxel/quadruped_low_lateral_manifest.ron index 071397114f..4b496abb3a 100644 --- a/assets/voxygen/voxel/quadruped_low_lateral_manifest.ron +++ b/assets/voxygen/voxel/quadruped_low_lateral_manifest.ron @@ -755,4 +755,40 @@ lateral: ("npc.mossdrake.male.foot_br", false), ), ), + (Driggle, Male): ( + front_left: ( + offset: (-6.0, 0.0, -4.0), + lateral: ("npc.driggle.male.foot_fr", false), + ), + front_right: ( + offset: (0.0, 0.0, -4.0), + lateral: ("npc.driggle.male.foot_fr", false), + ), + back_left: ( + offset: (-6.0, 0.0, -3.0), + lateral: ("npc.driggle.male.foot_br", false), + ), + back_right: ( + offset: (0.0, 0.0, -3.0), + lateral: ("npc.driggle.male.foot_br", false), + ), + ), + (Driggle, Female): ( + front_left: ( + offset: (-6.0, 0.0, -4.0), + lateral: ("npc.driggle.male.foot_fr", false), + ), + front_right: ( + offset: (0.0, 0.0, -4.0), + lateral: ("npc.driggle.male.foot_fr", false), + ), + back_left: ( + offset: (-6.0, 0.0, -3.0), + lateral: ("npc.driggle.male.foot_br", false), + ), + back_right: ( + offset: (0.0, 0.0, -3.0), + lateral: ("npc.driggle.male.foot_br", false), + ), + ), }) diff --git a/assets/voxygen/voxel/quadruped_small_central_manifest.ron b/assets/voxygen/voxel/quadruped_small_central_manifest.ron index d8c3edfc19..8871f9929f 100644 --- a/assets/voxygen/voxel/quadruped_small_central_manifest.ron +++ b/assets/voxygen/voxel/quadruped_small_central_manifest.ron @@ -755,4 +755,60 @@ central: ("armor.empty"), ), ), + (TreantSapling, Male):( + head: ( + offset: (-2.5, 0.0, -1.5), + central: ("armor.empty"), + ), + chest: ( + offset: (-8.5, -6.0, -11.5), + central: ("npc.treant_sapling.male.chest"), + ), + tail: ( + offset: (-1.5, -6.0, -1.0), + central: ("armor.empty"), + ), + ), + (TreantSapling, Female):( + head: ( + offset: (-2.5, 0.0, -1.5), + central: ("armor.empty"), + ), + chest: ( + offset: (-8.5, -6.0, -11.5), + central: ("npc.treant_sapling.male.chest"), + ), + tail: ( + offset: (-1.5, -6.0, -1.0), + central: ("armor.empty"), + ), + ), + (MossySnail, Male):( + head: ( + offset: (-3.0, 0.0, -7.0), + central: ("npc.mossy_snail.male.head"), + ), + chest: ( + offset: (-5.0, -6.5, -4.5), + central: ("npc.mossy_snail.male.chest"), + ), + tail: ( + offset: (-1.5, -6.0, -1.0), + central: ("armor.empty"), + ), + ), + (MossySnail, Female):( + head: ( + offset: (-3.0, 0.0, -7.0), + central: ("npc.mossy_snail.male.head"), + ), + chest: ( + offset: (-5.0, -6.5, -4.5), + central: ("npc.mossy_snail.male.chest"), + ), + tail: ( + offset: (-1.5, -6.0, -1.0), + central: ("armor.empty"), + ), + ), }) \ No newline at end of file diff --git a/assets/voxygen/voxel/quadruped_small_lateral_manifest.ron b/assets/voxygen/voxel/quadruped_small_lateral_manifest.ron index 89b82327b1..3888f34b1d 100644 --- a/assets/voxygen/voxel/quadruped_small_lateral_manifest.ron +++ b/assets/voxygen/voxel/quadruped_small_lateral_manifest.ron @@ -973,4 +973,76 @@ lateral: ("npc.seal.male.foot_br"), ), ), + (TreantSapling, Male): ( + left_front: ( + offset: (-2.0, -2.0, -3.0), + lateral: ("npc.treant_sapling.male.foot_fr"), + ), + right_front: ( + offset: (-2.0, -2.0, -3.0), + lateral: ("npc.treant_sapling.male.foot_fr"), + ), + left_back: ( + offset: (-2.0, -2.0, -3.0), + lateral: ("npc.treant_sapling.male.foot_br"), + ), + right_back: ( + offset: (-2.0, -2.0, -3.0), + lateral: ("npc.treant_sapling.male.foot_br"), + ), + ), + (TreantSapling, Female): ( + left_front: ( + offset: (-2.0, -2.0, -3.0), + lateral: ("npc.treant_sapling.male.foot_fr"), + ), + right_front: ( + offset: (-2.0, -2.0, -3.0), + lateral: ("npc.treant_sapling.male.foot_fr"), + ), + left_back: ( + offset: (-2.0, -2.0, -3.0), + lateral: ("npc.treant_sapling.male.foot_br"), + ), + right_back: ( + offset: (-2.0, -2.0, -3.0), + lateral: ("npc.treant_sapling.male.foot_br"), + ), + ), + (MossySnail, Male): ( + left_front: ( + offset: (-2.5, -2.5, -4.0), + lateral: ("armor.empty"), + ), + right_front: ( + offset: (-2.5, -2.5, -4.0), + lateral: ("armor.empty"), + ), + left_back: ( + offset: (-2.5, -3.5, -4.0), + lateral: ("armor.empty"), + ), + right_back: ( + offset: (-2.5, -3.5, -4.0), + lateral: ("armor.empty"), + ), + ), + (MossySnail, Female): ( + left_front: ( + offset: (-2.5, -2.5, -4.0), + lateral: ("armor.empty"), + ), + right_front: ( + offset: (-2.5, -2.5, -4.0), + lateral: ("armor.empty"), + ), + left_back: ( + offset: (-2.5, -3.5, -4.0), + lateral: ("armor.empty"), + ), + right_back: ( + offset: (-2.5, -3.5, -4.0), + lateral: ("armor.empty"), + ), + ), }) \ No newline at end of file diff --git a/assets/voxygen/voxel/sprite/crafting_ing/living_embers.vox b/assets/voxygen/voxel/sprite/crafting_ing/living_embers.vox new file mode 100644 index 0000000000..fdd074231f --- /dev/null +++ b/assets/voxygen/voxel/sprite/crafting_ing/living_embers.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3305a486fab4b24dd302bf39ea8fee42c1225d23f8d4735a938673db6a6d6447 +size 1424 diff --git a/assets/world/wildlife/spawn/taiga/core_forest.ron b/assets/world/wildlife/spawn/taiga/core_forest.ron index 8bed92578b..82a9d0d017 100644 --- a/assets/world/wildlife/spawn/taiga/core_forest.ron +++ b/assets/world/wildlife/spawn/taiga/core_forest.ron @@ -8,7 +8,16 @@ SpawnEntry ( (1, (1, 1, "common.entity.wild.aggressive.dreadhorn")), ], spawn_mode: Land, - day_period: [Night, Morning, Noon, Evening], + day_period: [Morning, Noon, Evening], + ), + Pack( + groups: [ + (1, (1, 1, "common.entity.wild.aggressive.wendigo")), + (1, (1, 1, "common.entity.wild.aggressive.dreadhorn")), + (1, (1, 1, "common.entity.wild.aggressive.irrwurz")), + ], + spawn_mode: Land, + day_period: [Night], ), ], ) diff --git a/assets/world/wildlife/spawn/taiga/forest.ron b/assets/world/wildlife/spawn/taiga/forest.ron index 525567aef7..44bd99a1ae 100644 --- a/assets/world/wildlife/spawn/taiga/forest.ron +++ b/assets/world/wildlife/spawn/taiga/forest.ron @@ -7,7 +7,14 @@ SpawnEntry ( (1, (3, 7, "common.entity.wild.aggressive.wolf")), ], spawn_mode: Land, - day_period: [Night, Morning, Noon, Evening], + day_period: [Morning, Noon, Evening], + ), + Pack( + groups: [ + (1, (1, 1, "common.entity.wild.aggressive.irrwurz")), + ], + spawn_mode: Land, + day_period: [Night], ), ], -) +) \ No newline at end of file diff --git a/assets/world/wildlife/spawn/temperate/rainforest.ron b/assets/world/wildlife/spawn/temperate/rainforest.ron index 61ec524242..d36f8327d7 100644 --- a/assets/world/wildlife/spawn/temperate/rainforest.ron +++ b/assets/world/wildlife/spawn/temperate/rainforest.ron @@ -33,6 +33,9 @@ SpawnEntry ( (2, (1, 1, "common.entity.wild.peaceful.truffler")), (2, (1, 1, "common.entity.wild.peaceful.leaf_beetle")), (2, (1, 1, "common.entity.wild.aggressive.weevil")), + (2, (1, 1, "common.entity.wild.aggressive.bushly")), + (2, (1, 1, "common.entity.wild.aggressive.mossy_snail")), + (2, (1, 1, "common.entity.wild.aggressive.treant_sapling")), ], spawn_mode: Land, day_period: [Morning, Noon, Evening], @@ -47,6 +50,7 @@ SpawnEntry ( (5, (1, 3, "common.entity.wild.peaceful.rat")), (5, (1, 3, "common.entity.wild.peaceful.squirrel")), (3, (1, 3, "common.entity.wild.aggressive.bat")), + (5, (1, 3, "common.entity.wild.aggressive.emberfly")), ], spawn_mode: Land, day_period: [Night], diff --git a/assets/world/wildlife/spawn/temperate/rare.ron b/assets/world/wildlife/spawn/temperate/rare.ron index 076e7ea827..2dac750d8b 100644 --- a/assets/world/wildlife/spawn/temperate/rare.ron +++ b/assets/world/wildlife/spawn/temperate/rare.ron @@ -7,9 +7,23 @@ SpawnEntry ( (1, (1, 1, "common.entity.wild.aggressive.ogre")), (1, (1, 1, "common.entity.wild.aggressive.swamp_troll")), (1, (1, 1, "common.entity.wild.aggressive.dullahan")), + (2, (1, 1, "common.entity.wild.aggressive.bushly")), + (2, (1, 1, "common.entity.wild.aggressive.driggle")), ], spawn_mode: Land, - day_period: [Night, Morning, Noon, Evening], + day_period: [Morning, Noon, Evening], + ), + Pack( + groups: [ + // Solitary + (1, (1, 1, "common.entity.wild.aggressive.ogre")), + (1, (1, 1, "common.entity.wild.aggressive.swamp_troll")), + (1, (1, 1, "common.entity.wild.aggressive.dullahan")), + // Pack + (1, (1, 3, "common.entity.wild.aggressive.emberfly")), + ], + spawn_mode: Land, + day_period: [Night], ), ], ) diff --git a/assets/world/wildlife/spawn/temperate/wood.ron b/assets/world/wildlife/spawn/temperate/wood.ron index 389619727f..2f23104675 100644 --- a/assets/world/wildlife/spawn/temperate/wood.ron +++ b/assets/world/wildlife/spawn/temperate/wood.ron @@ -11,6 +11,9 @@ SpawnEntry ( (1, (1, 1, "common.entity.wild.aggressive.saber")), (1, (1, 1, "common.entity.wild.aggressive.weevil")), (1, (1, 1, "common.entity.wild.peaceful.leaf_beetle")), + (1, (1, 1, "common.entity.wild.aggressive.bushly")), + (1, (1, 1, "common.entity.wild.aggressive.mossy_snail")), + (1, (1, 1, "common.entity.wild.aggressive.treant_sapling")), ], spawn_mode: Land, day_period: [Night, Morning, Noon, Evening], diff --git a/common/src/comp/agent.rs b/common/src/comp/agent.rs index 88583aba92..4f204eeefc 100644 --- a/common/src/comp/agent.rs +++ b/common/src/comp/agent.rs @@ -365,6 +365,7 @@ impl<'a> From<&'a Body> for Psyche { arthropod::Species::Mosscrawler => 0.2, arthropod::Species::Sandcrawler => 0.2, arthropod::Species::Dagonite => 0.2, + arthropod::Species::Emberfly => 0.1, }, }, sight_dist: 40.0, diff --git a/common/src/comp/body.rs b/common/src/comp/body.rs index 62e6b5954f..038641091b 100644 --- a/common/src/comp/body.rs +++ b/common/src/comp/body.rs @@ -353,6 +353,7 @@ impl Body { quadruped_low::Species::Hakulaq => 400.0, quadruped_low::Species::Dagon => 600.0, quadruped_low::Species::Basilisk => 800.0, + quadruped_low::Species::Driggle => 55.0, }, Body::QuadrupedMedium(body) => match body.species { quadruped_medium::Species::Bear => 500.0, // ~✅ (350-700 kg) @@ -399,6 +400,8 @@ impl Body { quadruped_small::Species::Truffler => 70.0, quadruped_small::Species::Turtle => 40.0, quadruped_small::Species::Seal => 15.0, + quadruped_small::Species::TreantSapling => 80.0, + quadruped_small::Species::MossySnail => 5.0, }, Body::Theropod(body) => match body.species { // for reference, elephants are in the range of 2.6-6.9 tons @@ -452,7 +455,8 @@ impl Body { biped_small::Species::Myrmidon => Vec3::new(1.3, 1.0, 2.2), biped_small::Species::Husk => Vec3::new(1.7, 0.7, 2.7), biped_small::Species::Boreal => Vec3::new(1.3, 2.0, 2.5), - + biped_small::Species::Bushly => Vec3::new(1.2, 1.3, 1.6), + biped_small::Species::Irrwurz => Vec3::new(1.5, 1.5, 2.0), _ => Vec3::new(1.0, 0.75, 1.4), }, Body::BirdLarge(body) => match body.species { @@ -511,6 +515,7 @@ impl Body { quadruped_small::Species::Holladon => Vec3::new(1.3, 1.9, 1.5), quadruped_small::Species::Hyena => Vec3::new(1.2, 1.4, 1.3), quadruped_small::Species::Truffler => Vec3::new(1.2, 1.8, 2.2), + quadruped_small::Species::MossySnail => Vec3::new(1.4, 1.4, 1.2), _ => Vec3::new(1.2, 1.2, 1.0), }, Body::QuadrupedLow(body) => match body.species { @@ -534,6 +539,7 @@ impl Body { quadruped_low::Species::Salamander => Vec3::new(1.7, 4.0, 1.3), quadruped_low::Species::Elbst => Vec3::new(1.7, 4.0, 1.3), quadruped_low::Species::Tortoise => Vec3::new(1.7, 2.7, 1.5), + quadruped_low::Species::Driggle => Vec3::new(1.6, 2.7, 1.0), _ => Vec3::new(1.0, 1.6, 1.3), }, Body::Ship(ship) => ship.dimensions(), @@ -562,6 +568,7 @@ impl Body { arthropod::Species::Mosscrawler => Vec3::new(3.2, 4.0, 1.4), arthropod::Species::Sandcrawler => Vec3::new(3.2, 4.0, 1.4), arthropod::Species::Dagonite => Vec3::new(3.2, 4.7, 1.4), + arthropod::Species::Emberfly => Vec3::new(1.3, 1.5, 0.9), }, Body::BirdMedium(body) => match body.species { bird_medium::Species::SnowyOwl => Vec3::new(1.2, 1.2, 0.9), @@ -735,6 +742,8 @@ impl Body { quadruped_small::Species::Dog => 30, quadruped_small::Species::Sheep => 30, quadruped_small::Species::Seal => 15, + quadruped_small::Species::MossySnail => 15, + quadruped_small::Species::TreantSapling => 55, _ => 20, }, Body::QuadrupedMedium(quadruped_medium) => match quadruped_medium.species { @@ -877,6 +886,7 @@ impl Body { quadruped_low::Species::Basilisk => 200, quadruped_low::Species::Deadwood => 120, quadruped_low::Species::Mossdrake => 160, + quadruped_low::Species::Driggle => 40, _ => 70, }, Body::Arthropod(arthropod) => match arthropod.species { @@ -891,6 +901,7 @@ impl Body { arthropod::Species::Moltencrawler => 80, arthropod::Species::Mosscrawler => 80, arthropod::Species::Sandcrawler => 80, + arthropod::Species::Emberfly => 25, _ => 70, }, Body::Ship(_) => 1000, diff --git a/common/src/comp/body/arthropod.rs b/common/src/comp/body/arthropod.rs index c4ffc602c3..1c025343e5 100644 --- a/common/src/comp/body/arthropod.rs +++ b/common/src/comp/body/arthropod.rs @@ -40,6 +40,7 @@ pub enum Species { Mosscrawler = 9, Sandcrawler = 10, Dagonite = 11, + Emberfly = 12, } /// Data representing per-species generic data. @@ -57,6 +58,7 @@ pub struct AllSpecies { pub crawler_moss: SpeciesMeta, pub crawler_sand: SpeciesMeta, pub dagonite: SpeciesMeta, + pub emberfly: SpeciesMeta, } impl<'a, SpeciesMeta> core::ops::Index<&'a Species> for AllSpecies { @@ -77,11 +79,12 @@ impl<'a, SpeciesMeta> core::ops::Index<&'a Species> for AllSpecies Species::Mosscrawler => &self.crawler_moss, Species::Sandcrawler => &self.crawler_sand, Species::Dagonite => &self.dagonite, + Species::Emberfly => &self.emberfly, } } } -pub const ALL_SPECIES: [Species; 12] = [ +pub const ALL_SPECIES: [Species; 13] = [ Species::Tarantula, Species::Blackwidow, Species::Antlion, @@ -94,6 +97,7 @@ pub const ALL_SPECIES: [Species; 12] = [ Species::Mosscrawler, Species::Sandcrawler, Species::Dagonite, + Species::Emberfly, ]; impl<'a, SpeciesMeta: 'a> IntoIterator for &'a AllSpecies { diff --git a/common/src/comp/body/biped_small.rs b/common/src/comp/body/biped_small.rs index 01199cba5b..2f08b3d7aa 100644 --- a/common/src/comp/body/biped_small.rs +++ b/common/src/comp/body/biped_small.rs @@ -46,6 +46,8 @@ make_case_elim!( Myrmidon = 9, Husk = 10, Boreal = 11, + Bushly = 12, + Irrwurz = 13, } ); @@ -66,6 +68,8 @@ pub struct AllSpecies { pub myrmidon: SpeciesMeta, pub husk: SpeciesMeta, pub boreal: SpeciesMeta, + pub bushly: SpeciesMeta, + pub irrwurz: SpeciesMeta, } impl<'a, SpeciesMeta> core::ops::Index<&'a Species> for AllSpecies { @@ -86,11 +90,13 @@ impl<'a, SpeciesMeta> core::ops::Index<&'a Species> for AllSpecies Species::Myrmidon => &self.myrmidon, Species::Husk => &self.husk, Species::Boreal => &self.boreal, + Species::Bushly => &self.bushly, + Species::Irrwurz => &self.irrwurz, } } } -pub const ALL_SPECIES: [Species; 12] = [ +pub const ALL_SPECIES: [Species; 14] = [ Species::Gnome, Species::Sahagin, Species::Adlet, @@ -103,6 +109,8 @@ pub const ALL_SPECIES: [Species; 12] = [ Species::Myrmidon, Species::Husk, Species::Boreal, + Species::Bushly, + Species::Irrwurz, ]; impl<'a, SpeciesMeta: 'a> IntoIterator for &'a AllSpecies { diff --git a/common/src/comp/body/quadruped_low.rs b/common/src/comp/body/quadruped_low.rs index 26b3c9fd38..6bb63a5eba 100644 --- a/common/src/comp/body/quadruped_low.rs +++ b/common/src/comp/body/quadruped_low.rs @@ -71,6 +71,7 @@ make_case_elim!( Reefsnapper = 18, Elbst = 19, Mossdrake = 20, + Driggle = 21, } ); @@ -100,6 +101,7 @@ pub struct AllSpecies { pub deadwood: SpeciesMeta, pub icedrake: SpeciesMeta, pub mossdrake: SpeciesMeta, + pub driggle: SpeciesMeta, } impl<'a, SpeciesMeta> core::ops::Index<&'a Species> for AllSpecies { @@ -129,11 +131,12 @@ impl<'a, SpeciesMeta> core::ops::Index<&'a Species> for AllSpecies Species::Deadwood => &self.deadwood, Species::Icedrake => &self.icedrake, Species::Mossdrake => &self.mossdrake, + Species::Driggle => &self.driggle, } } } -pub const ALL_SPECIES: [Species; 21] = [ +pub const ALL_SPECIES: [Species; 22] = [ Species::Crocodile, Species::SeaCrocodile, Species::Alligator, @@ -155,6 +158,7 @@ pub const ALL_SPECIES: [Species; 21] = [ Species::Deadwood, Species::Icedrake, Species::Mossdrake, + Species::Driggle, ]; impl<'a, SpeciesMeta: 'a> IntoIterator for &'a AllSpecies { diff --git a/common/src/comp/body/quadruped_small.rs b/common/src/comp/body/quadruped_small.rs index 1717c670cb..7e58748483 100644 --- a/common/src/comp/body/quadruped_small.rs +++ b/common/src/comp/body/quadruped_small.rs @@ -75,6 +75,8 @@ pub enum Species { Hare = 24, Dog = 25, Seal = 26, + TreantSapling = 27, + MossySnail = 28, } /// Data representing per-species generic data. @@ -109,6 +111,8 @@ pub struct AllSpecies { pub dog: SpeciesMeta, pub goat: SpeciesMeta, pub seal: SpeciesMeta, + pub treant_sapling: SpeciesMeta, + pub mossy_snail: SpeciesMeta, } impl<'a, SpeciesMeta> core::ops::Index<&'a Species> for AllSpecies { @@ -144,11 +148,13 @@ impl<'a, SpeciesMeta> core::ops::Index<&'a Species> for AllSpecies Species::Dog => &self.dog, Species::Goat => &self.goat, Species::Seal => &self.seal, + Species::TreantSapling => &self.treant_sapling, + Species::MossySnail => &self.mossy_snail, } } } -pub const ALL_SPECIES: [Species; 27] = [ +pub const ALL_SPECIES: [Species; 29] = [ Species::Pig, Species::Fox, Species::Sheep, @@ -176,6 +182,8 @@ pub const ALL_SPECIES: [Species; 27] = [ Species::Dog, Species::Goat, Species::Seal, + Species::TreantSapling, + Species::MossySnail, ]; impl<'a, SpeciesMeta: 'a> IntoIterator for &'a AllSpecies { diff --git a/common/src/comp/inventory/loadout_builder.rs b/common/src/comp/inventory/loadout_builder.rs index b76287351b..ae6ba87045 100644 --- a/common/src/comp/inventory/loadout_builder.rs +++ b/common/src/comp/inventory/loadout_builder.rs @@ -7,7 +7,7 @@ use crate::{ slot::{ArmorSlot, EquipSlot}, }, item::{self, Item}, - object, quadruped_low, quadruped_medium, theropod, Body, + object, quadruped_low, quadruped_medium, quadruped_small, theropod, Body, }, resources::Time, trade::SiteInformation, @@ -616,13 +616,24 @@ fn default_main_tool(body: &Body) -> Item { quadruped_low::Species::Icedrake => Some(Item::new_from_asset_expect( "common.items.npc_weapons.unique.icedrake", )), + quadruped_low::Species::Driggle => Some(Item::new_from_asset_expect( + "common.items.npc_weapons.unique.driggle", + )), _ => Some(Item::new_from_asset_expect( "common.items.npc_weapons.unique.quadlowbasic", )), }, - Body::QuadrupedSmall(_) => Some(Item::new_from_asset_expect( - "common.items.npc_weapons.unique.quadsmallbasic", - )), + Body::QuadrupedSmall(quadruped_small) => match quadruped_small.species { + quadruped_small::Species::TreantSapling => Some(Item::new_from_asset_expect( + "common.items.npc_weapons.unique.treantsapling", + )), + quadruped_small::Species::MossySnail => Some(Item::new_from_asset_expect( + "common.items.npc_weapons.unique.mossysnail", + )), + _ => Some(Item::new_from_asset_expect( + "common.items.npc_weapons.unique.quadsmallbasic", + )), + }, Body::Theropod(theropod) => match theropod.species { theropod::Species::Sandraptor | theropod::Species::Snowraptor @@ -646,6 +657,9 @@ fn default_main_tool(body: &Body) -> Item { "common.items.npc_weapons.unique.arthropods.hornbeetle", )) }, + arthropod::Species::Emberfly => Some(Item::new_from_asset_expect( + "common.items.npc_weapons.unique.emberfly", + )), arthropod::Species::Cavespider => Some(Item::new_from_asset_expect( "common.items.npc_weapons.unique.arthropods.cavespider", )), @@ -783,6 +797,12 @@ fn default_main_tool(body: &Body) -> Item { (biped_small::Species::Gnome, _) => Some(Item::new_from_asset_expect( "common.items.npc_weapons.biped_small.adlet.tracker", )), + (biped_small::Species::Bushly, _) => Some(Item::new_from_asset_expect( + "common.items.npc_weapons.unique.bushly", + )), + (biped_small::Species::Irrwurz, _) => Some(Item::new_from_asset_expect( + "common.items.npc_weapons.unique.irrwurz", + )), (biped_small::Species::Husk, _) => Some(Item::new_from_asset_expect( "common.items.npc_weapons.unique.husk", )), @@ -1308,6 +1328,7 @@ mod tests { quadruped_small: QuadrupedSmall, quadruped_medium: QuadrupedMedium, quadruped_low: QuadrupedLow, + quadruped_small: QuadrupedSmall, bird_medium: BirdMedium, bird_large: BirdLarge, fish_small: FishSmall, diff --git a/common/src/comp/projectile.rs b/common/src/comp/projectile.rs index 2ae448fb44..8329802be5 100644 --- a/common/src/comp/projectile.rs +++ b/common/src/comp/projectile.rs @@ -79,6 +79,11 @@ pub enum ProjectileConstructor { radius: f32, min_falloff: f32, }, + Magicball { + damage: f32, + radius: f32, + min_falloff: f32, + }, Possess, ClayRocket { damage: f32, @@ -413,6 +418,54 @@ impl ProjectileConstructor { is_point: true, } }, + Magicball { + damage, + radius, + min_falloff, + } => { + let buff = AttackEffect::new( + Some(GroupTarget::OutOfGroup), + CombatEffect::Buff(CombatBuff { + kind: BuffKind::Poisoned, + dur_secs: 5.0, + strength: CombatBuffStrength::DamageFraction(0.8), + chance: 1.0, + }) + .adjusted_by_stats(tool_stats), + ) + .with_requirement(CombatRequirement::AnyDamage); + let damage = AttackDamage::new( + Damage { + source: DamageSource::Explosion, + kind: DamageKind::Energy, + value: damage, + }, + Some(GroupTarget::OutOfGroup), + instance, + ); + let attack = Attack::default() + .with_damage(damage) + .with_crit(crit_chance, crit_mult) + .with_effect(buff); + let explosion = Explosion { + effects: vec![ + RadiusEffect::Attack(attack), + RadiusEffect::TerrainDestruction(0.0, Rgb::black()), + ], + radius, + reagent: Some(Reagent::Green), + min_falloff, + }; + Projectile { + hit_solid: vec![Effect::Explode(explosion.clone()), Effect::Vanish], + hit_entity: vec![Effect::Explode(explosion), Effect::Vanish], + time_left: Duration::from_secs(10), + owner, + ignore_group: true, + is_sticky: true, + is_point: true, + } + }, Possess => Projectile { hit_solid: vec![Effect::Stick], hit_entity: vec![Effect::Stick, Effect::Possess], @@ -874,6 +927,14 @@ impl ProjectileConstructor { *damage *= power; *radius *= range; }, + Magicball { + ref mut damage, + ref mut radius, + .. + } => { + *damage *= power; + *radius *= range; + }, Possess => {}, ClayRocket { ref mut damage, @@ -955,6 +1016,7 @@ impl ProjectileConstructor { Frostball { .. } => true, Poisonball { .. } => true, NecroticSphere { .. } => true, + Magicball { .. } => true, Possess => false, ClayRocket { .. } => true, Snowball { .. } => true, diff --git a/common/src/states/utils.rs b/common/src/states/utils.rs index 85b6db550e..917229cd97 100644 --- a/common/src/states/utils.rs +++ b/common/src/states/utils.rs @@ -145,6 +145,7 @@ impl Body { quadruped_low::Species::Basilisk => 90.0, quadruped_low::Species::Deadwood => 140.0, quadruped_low::Species::Mossdrake => 100.0, + quadruped_low::Species::Driggle => 120.0, }, Body::Ship(ship::Body::Carriage) => 200.0, Body::Ship(_) => 0.0, @@ -161,6 +162,7 @@ impl Body { arthropod::Species::Mosscrawler => 70.0, arthropod::Species::Sandcrawler => 70.0, arthropod::Species::Dagonite => 70.0, + arthropod::Species::Emberfly => 75.0, }, } } diff --git a/server/agent/src/action_nodes.rs b/server/agent/src/action_nodes.rs index a969890945..1ca7e37dd8 100644 --- a/server/agent/src/action_nodes.rs +++ b/server/agent/src/action_nodes.rs @@ -1014,6 +1014,9 @@ impl<'a> AgentData<'a> { "Flame Wyvern" | "Frost Wyvern" | "Cloud Wyvern" | "Sea Wyvern" | "Weald Wyvern" => Tactic::Wyvern, "Bird Medium Basic" => Tactic::BirdMediumBasic, + "Bushly" | "Irrwurz" | "Driggle" | "Mossy Snail" => { + Tactic::SimpleDouble + }, "Mindflayer" => Tactic::Mindflayer, "Minotaur" => Tactic::Minotaur, "Cyclops" => Tactic::Cyclops, @@ -1419,6 +1422,13 @@ impl<'a> AgentData<'a> { Tactic::BirdMediumBasic => { self.handle_simple_melee(agent, controller, &attack_data, tgt_data, read_data, rng) }, + Tactic::SimpleDouble => self.handle_simple_double_attack( + agent, + controller, + &attack_data, + tgt_data, + read_data, + ), Tactic::Minotaur => { self.handle_minotaur_attack(agent, controller, &attack_data, tgt_data, read_data) }, diff --git a/server/agent/src/attack.rs b/server/agent/src/attack.rs index a3a37c9cc6..3dc61d5633 100644 --- a/server/agent/src/attack.rs +++ b/server/agent/src/attack.rs @@ -5074,4 +5074,42 @@ impl<'a> AgentData<'a> { ); } } + + pub fn handle_simple_double_attack( + &self, + agent: &mut Agent, + controller: &mut Controller, + attack_data: &AttackData, + tgt_data: &TargetData, + read_data: &ReadData, + ) { + const MAX_ATTACK_RANGE: f32 = 20.0; + + if attack_data.angle < 60.0 && attack_data.dist_sqrd < MAX_ATTACK_RANGE.powi(2) { + controller.inputs.move_dir = Vec2::zero(); + if attack_data.in_min_range() { + controller.push_basic_input(InputKind::Primary); + } else { + controller.push_basic_input(InputKind::Secondary); + } + } else if attack_data.dist_sqrd < MAX_PATH_DIST.powi(2) { + self.path_toward_target( + agent, + controller, + tgt_data.pos.0, + read_data, + Path::Separate, + None, + ); + } else { + self.path_toward_target( + agent, + controller, + tgt_data.pos.0, + read_data, + Path::Partial, + None, + ); + } + } } diff --git a/server/agent/src/data.rs b/server/agent/src/data.rs index 52d8091476..f85d89c78a 100644 --- a/server/agent/src/data.rs +++ b/server/agent/src/data.rs @@ -173,6 +173,7 @@ pub enum Tactic { FixedTurret, RotatingTurret, RadialTurret, + SimpleDouble, // u8s are weights that each ability gets used, if it can be used RandomAbilities { primary: u8, diff --git a/voxygen/anim/src/arthropod/alpha.rs b/voxygen/anim/src/arthropod/alpha.rs index d9c258af8d..a90f507e0f 100644 --- a/voxygen/anim/src/arthropod/alpha.rs +++ b/voxygen/anim/src/arthropod/alpha.rs @@ -40,7 +40,7 @@ impl Animation for AlphaAnimation { let movement3abs = movement3 * pullback; if s_a.snapper { - next.chest.scale = Vec3::one() / s_a.scaler; + next.chest.scale = Vec3::one() * s_a.scaler; next.head.position = Vec3::new(0.0, s_a.head.0, s_a.head.1); next.head.orientation = Quaternion::rotation_x( diff --git a/voxygen/anim/src/arthropod/dash.rs b/voxygen/anim/src/arthropod/dash.rs index 3ddc568df4..e4ff5d083e 100644 --- a/voxygen/anim/src/arthropod/dash.rs +++ b/voxygen/anim/src/arthropod/dash.rs @@ -35,7 +35,7 @@ impl Animation for DashAnimation { let movement2abs = movement2base * pullback; let shortalt = (anim_time * 200.0 + PI * 0.25).sin() * chargemovementbase * pullback; - next.chest.scale = Vec3::one(); + next.chest.scale = Vec3::one() * s_a.scaler; next.head.position = Vec3::new(0.0, s_a.head.0, s_a.head.1); next.head.orientation = Quaternion::rotation_x(movement1abs * -0.4 + movement2abs * 1.4); diff --git a/voxygen/anim/src/arthropod/idle.rs b/voxygen/anim/src/arthropod/idle.rs index 1aa09ca2ec..8f515583f2 100644 --- a/voxygen/anim/src/arthropod/idle.rs +++ b/voxygen/anim/src/arthropod/idle.rs @@ -22,7 +22,7 @@ impl Animation for IdleAnimation { ) -> Self::Skeleton { let mut next = (*skeleton).clone(); - next.chest.scale = Vec3::one() / s_a.scaler; + next.chest.scale = Vec3::one() * s_a.scaler; next.wing_bl.scale = Vec3::one() * 0.98; next.wing_br.scale = Vec3::one() * 0.98; diff --git a/voxygen/anim/src/arthropod/jump.rs b/voxygen/anim/src/arthropod/jump.rs index 5628e37dc0..2b291159d7 100644 --- a/voxygen/anim/src/arthropod/jump.rs +++ b/voxygen/anim/src/arthropod/jump.rs @@ -22,7 +22,7 @@ impl Animation for JumpAnimation { ) -> Self::Skeleton { let mut next = (*skeleton).clone(); - next.chest.scale = Vec3::one() / s_a.scaler; + next.chest.scale = Vec3::one() * s_a.scaler; next.wing_bl.scale = Vec3::one() * 0.98; next.wing_br.scale = Vec3::one() * 0.98; diff --git a/voxygen/anim/src/arthropod/leapmelee.rs b/voxygen/anim/src/arthropod/leapmelee.rs index dbb03e7cd0..b1967f9eb1 100644 --- a/voxygen/anim/src/arthropod/leapmelee.rs +++ b/voxygen/anim/src/arthropod/leapmelee.rs @@ -41,7 +41,7 @@ impl Animation for LeapMeleeAnimation { let shortalt = (global_time * 80.0).sin() * movement2base * early_pullback; - next.chest.scale = Vec3::one() / s_a.scaler; + next.chest.scale = Vec3::one() * s_a.scaler; next.head.position = Vec3::new(0.0, s_a.head.0, s_a.head.1); next.head.orientation = diff --git a/voxygen/anim/src/arthropod/leapshockwave.rs b/voxygen/anim/src/arthropod/leapshockwave.rs index 6db3319a35..1929ba08f5 100644 --- a/voxygen/anim/src/arthropod/leapshockwave.rs +++ b/voxygen/anim/src/arthropod/leapshockwave.rs @@ -45,15 +45,15 @@ impl Animation for LeapShockAnimation { let shortalt = (global_time * 80.0).sin() * movement2base * early_pullback; - next.chest.scale = Vec3::one() / s_a.scaler; + next.chest.scale = Vec3::one() * s_a.scaler; next.head.position = Vec3::new(0.0, s_a.head.0, s_a.head.1); next.head.orientation = Quaternion::rotation_x(movement1abs * -0.2 + movement2abs * 0.4 + movement3abs * -1.0) * Quaternion::rotation_z((movement1abs * 4.0 * PI).sin() * 0.08); - next.chest.position = Vec3::new(0.0, s_a.chest.0, s_a.chest.1 + movement1abs * -0.5); - next.chest.orientation = Quaternion::rotation_x(movement2abs * 0.3) + next.chest.position = Vec3::new(0.0, s_a.chest.0, s_a.chest.1 + movement1abs * -0.25); + next.chest.orientation = Quaternion::rotation_x(movement2abs * 0.15) * Quaternion::rotation_z((movement1abs * 4.0 * PI).sin() * 0.08); next.mandible_l.position = Vec3::new(-s_a.mandible.0, s_a.mandible.1, s_a.mandible.2); diff --git a/voxygen/anim/src/arthropod/mod.rs b/voxygen/anim/src/arthropod/mod.rs index a446533f54..9bc370a1b8 100644 --- a/voxygen/anim/src/arthropod/mod.rs +++ b/voxygen/anim/src/arthropod/mod.rs @@ -183,6 +183,7 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Mosscrawler, _) => (4.0, -1.5), (Sandcrawler, _) => (4.0, -1.0), (Dagonite, _) => (4.0, -1.0), + (Emberfly, _) => (-1.5, 0.5), }, chest: match (body.species, body.body_type) { (Tarantula, _) => (-5.0, 6.0), @@ -196,7 +197,8 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Moltencrawler, _) => (-7.0, 6.0), (Mosscrawler, _) => (-7.0, 6.5), (Sandcrawler, _) => (-7.0, 6.0), - (Dagonite, _) => (-6.0, 6.0), + (Dagonite, _) => (-6.0, 8.0), + (Emberfly, _) => (-5.0, 2.5), }, mandible: match (body.species, body.body_type) { (Tarantula, _) => (1.5, 7.0, -0.5), @@ -211,6 +213,7 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Mosscrawler, _) => (2.5, 8.0, 0.0), (Sandcrawler, _) => (2.5, 8.0, 0.0), (Dagonite, _) => (2.5, 8.0, 0.0), + (Emberfly, _) => (1.5, 7.0, -0.5), }, wing_f: match (body.species, body.body_type) { (Tarantula, _) => (3.0, 0.0, -4.0), @@ -225,6 +228,7 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Mosscrawler, _) => (3.0, 0.0, -4.0), (Sandcrawler, _) => (3.0, 0.0, -4.0), (Dagonite, _) => (3.0, 0.0, -4.0), + (Emberfly, _) => (5.5, 6.0, 3.0), }, wing_b: match (body.species, body.body_type) { (Tarantula, _) => (3.0, 0.0, -4.0), @@ -239,6 +243,7 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Mosscrawler, _) => (3.0, 0.0, -4.0), (Sandcrawler, _) => (3.0, 0.0, -4.0), (Dagonite, _) => (3.0, 0.0, -4.0), + (Emberfly, _) => (4.0, 6.0, 2.0), }, leg_f: match (body.species, body.body_type) { (Tarantula, _) => (4.0, 11.0, -1.5), @@ -253,6 +258,7 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Mosscrawler, _) => (1.5, 14.0, -3.5), (Sandcrawler, _) => (1.5, 14.0, -3.0), (Dagonite, _) => (1.5, 14.0, -3.0), + (Emberfly, _) => (2.5, 6.0, -2.5), }, leg_fc: match (body.species, body.body_type) { (Tarantula, _) => (1.5, 13.5, -1.5), @@ -267,6 +273,7 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Mosscrawler, _) => (2.5, 11.0, -3.5), (Sandcrawler, _) => (2.5, 11.0, -3.0), (Dagonite, _) => (2.5, 11.0, -3.0), + (Emberfly, _) => (1.5, 7.5, -2.5), }, leg_bc: match (body.species, body.body_type) { (Tarantula, _) => (1.5, 10.5, -1.5), @@ -281,6 +288,7 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Mosscrawler, _) => (1.5, 8.0, -3.5), (Sandcrawler, _) => (1.5, 8.0, -3.0), (Dagonite, _) => (1.5, 8.0, -3.0), + (Emberfly, _) => (2.5, 3.5, -2.5), }, leg_b: match (body.species, body.body_type) { (Tarantula, _) => (1.5, 7.5, -1.5), @@ -295,20 +303,22 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Mosscrawler, _) => (2.5, 7.0, -5.5), (Sandcrawler, _) => (2.5, 7.0, -5.5), (Dagonite, _) => (2.5, 7.0, -5.5), + (Emberfly, _) => (1.5, 7.5, -1.0), }, scaler: match (body.species, body.body_type) { (Tarantula, _) => 1.0, (Blackwidow, _) => 1.0, (Antlion, _) => 1.0, - (Hornbeetle, _) => 0.8, - (Leafbeetle, _) => 0.8, - (Stagbeetle, _) => 0.8, - (Weevil, _) => 0.8, + (Hornbeetle, _) => 1.0, + (Leafbeetle, _) => 1.0, + (Stagbeetle, _) => 1.0, + (Weevil, _) => 1.0, (Cavespider, _) => 1.0, - (Moltencrawler, _) => 0.8, - (Mosscrawler, _) => 0.8, - (Sandcrawler, _) => 0.8, - (Dagonite, _) => 0.8, + (Moltencrawler, _) => 1.0, + (Mosscrawler, _) => 1.0, + (Sandcrawler, _) => 1.0, + (Dagonite, _) => 1.0, + (Emberfly, _) => 0.5, }, // Z ori (front, front center, back center, center) leg_ori: match (body.species, body.body_type) { diff --git a/voxygen/anim/src/arthropod/run.rs b/voxygen/anim/src/arthropod/run.rs index 47bb7a1ce5..93350f4334 100644 --- a/voxygen/anim/src/arthropod/run.rs +++ b/voxygen/anim/src/arthropod/run.rs @@ -43,7 +43,7 @@ impl Animation for RunAnimation { let x_tilt = avg_vel.z.atan2(avg_vel.xy().magnitude()) * speednorm; - next.chest.scale = Vec3::one() / s_a.scaler; + next.chest.scale = Vec3::one() * s_a.scaler; next.wing_bl.scale = Vec3::one() * 0.98; next.wing_br.scale = Vec3::one() * 0.98; diff --git a/voxygen/anim/src/arthropod/shoot.rs b/voxygen/anim/src/arthropod/shoot.rs index 91c04d54b9..f7789c1d98 100644 --- a/voxygen/anim/src/arthropod/shoot.rs +++ b/voxygen/anim/src/arthropod/shoot.rs @@ -31,7 +31,7 @@ impl Animation for ShootAnimation { let pullback = 1.0 - movement2; let movement1abs = movement1 * pullback; - next.chest.scale = Vec3::one() / s_a.scaler; + next.chest.scale = Vec3::one() * s_a.scaler; next.chest.orientation = Quaternion::rotation_x(0.0) * Quaternion::rotation_z(0.0); next.head.position = Vec3::new(0.0, s_a.head.0, s_a.head.1); diff --git a/voxygen/anim/src/arthropod/stunned.rs b/voxygen/anim/src/arthropod/stunned.rs index ff76de1b3c..bd34622d15 100644 --- a/voxygen/anim/src/arthropod/stunned.rs +++ b/voxygen/anim/src/arthropod/stunned.rs @@ -37,7 +37,7 @@ impl Animation for StunnedAnimation { let twitch1 = mirror * (twitch * 20.0).cos() * pullback; let twitch2 = mirror * (twitch * 20.0).sin() * pullback; - next.chest.scale = Vec3::one() / s_a.scaler; + next.chest.scale = Vec3::one() * s_a.scaler; next.head.position = Vec3::new(0.0, s_a.head.0, s_a.head.1); next.head.orientation = Quaternion::rotation_z(twitch2 * 0.6); diff --git a/voxygen/anim/src/arthropod/summon.rs b/voxygen/anim/src/arthropod/summon.rs index 50646a4ec0..e0cae2c812 100644 --- a/voxygen/anim/src/arthropod/summon.rs +++ b/voxygen/anim/src/arthropod/summon.rs @@ -39,7 +39,7 @@ impl Animation for SummonAnimation { let movement2abs = movement2 * pullback; let movement3abs = movement3 * pullback; - next.chest.scale = Vec3::one() / s_a.scaler; + next.chest.scale = Vec3::one() * s_a.scaler; next.chest.orientation = Quaternion::rotation_x(movement2abs * 0.3) * Quaternion::rotation_z((movement1abs * 4.0 * PI).sin() * 0.02); diff --git a/voxygen/anim/src/biped_small/combomelee.rs b/voxygen/anim/src/biped_small/combomelee.rs new file mode 100644 index 0000000000..95c296d294 --- /dev/null +++ b/voxygen/anim/src/biped_small/combomelee.rs @@ -0,0 +1,85 @@ +use super::{ + super::{vek::*, Animation}, + BipedSmallSkeleton, SkeletonAttr, +}; +use common::states::utils::{AbilityInfo, StageSection}; + +pub struct ComboAnimation; +impl Animation for ComboAnimation { + type Dependency<'a> = ( + Option<&'a str>, + Option, + Option, + usize, + Vec2, + ); + type Skeleton = BipedSmallSkeleton; + + #[cfg(feature = "use-dyn-lib")] + const UPDATE_FN: &'static [u8] = b"biped_small_combo\0"; + + #[cfg_attr(feature = "be-dyn-lib", export_name = "biped_small_combo")] + fn update_skeleton_inner( + skeleton: &Self::Skeleton, + (ability_id, stage_section, _ability_info, current_strike, _move_dir): Self::Dependency<'_>, + anim_time: f32, + rate: &mut f32, + s_a: &SkeletonAttr, + ) -> Self::Skeleton { + *rate = 1.0; + let mut next = (*skeleton).clone(); + + next.main.position = Vec3::new(0.0, 0.0, 0.0); + next.main.orientation = Quaternion::rotation_z(0.0); + let multi_strike_pullback = 1.0 + - if matches!(stage_section, Some(StageSection::Recover)) { + anim_time.powi(4) + } else { + 0.0 + }; + + for strike in 0..=current_strike { + match ability_id { + Some( + "common.abilities.custom.bushly.singlestrike" + | "common.abilities.custom.irrwurz.singlestrike", + ) => { + let (move1, move2) = if strike == current_strike { + match stage_section { + Some(StageSection::Buildup) => { + (((anim_time.max(0.4) - 0.4) * 1.5).powf(0.5), 0.0) + }, + Some(StageSection::Action) => (1.0, (anim_time.min(0.4) * 2.5).powi(2)), + Some(StageSection::Recover) => (1.0, 1.0), + _ => (0.0, 0.0), + } + } else { + (1.0, 1.0) + }; + let move1 = move1 * multi_strike_pullback; + let move2 = move2 * multi_strike_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 strike { + 0 => { + next.chest.orientation = Quaternion::rotation_x(move2 * -1.0) + * Quaternion::rotation_z(move1 * 1.2 + move2 * -1.8); + 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.2); + 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.2); + }, + _ => {}, + } + }, + _ => {}, + } + } + next + } +} diff --git a/voxygen/anim/src/biped_small/mod.rs b/voxygen/anim/src/biped_small/mod.rs index e4909417d4..b51503739c 100644 --- a/voxygen/anim/src/biped_small/mod.rs +++ b/voxygen/anim/src/biped_small/mod.rs @@ -1,5 +1,6 @@ pub mod alpha; pub mod beam; +pub mod combomelee; pub mod dash; pub mod idle; pub mod leapmelee; @@ -13,10 +14,10 @@ pub mod wield; // Reexports pub use self::{ - alpha::AlphaAnimation, beam::BeamAnimation, dash::DashAnimation, idle::IdleAnimation, - leapmelee::LeapAnimation, run::RunAnimation, shockwave::ShockwaveAnimation, - shoot::ShootAnimation, spinmelee::SpinMeleeAnimation, stunned::StunnedAnimation, - summon::SummonAnimation, wield::WieldAnimation, + alpha::AlphaAnimation, beam::BeamAnimation, combomelee::ComboAnimation, dash::DashAnimation, + idle::IdleAnimation, leapmelee::LeapAnimation, run::RunAnimation, + shockwave::ShockwaveAnimation, shoot::ShootAnimation, spinmelee::SpinMeleeAnimation, + stunned::StunnedAnimation, summon::SummonAnimation, wield::WieldAnimation, }; use super::{make_bone, vek::*, FigureBoneData, Offsets, Skeleton}; @@ -146,6 +147,8 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Myrmidon, _) => (0.0, 8.0), (Husk, _) => (0.5, 8.5), (Boreal, _) => (-0.5, 13.0), + (Bushly, _) => (-1.0, 9.0), + (Irrwurz, _) => (-1.0, 9.0), }, chest: match (body.species, body.body_type) { (Gnome, _) => (0.0, 9.0), @@ -160,6 +163,8 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Myrmidon, _) => (0.0, 11.0), (Husk, _) => (0.0, 13.0), (Boreal, _) => (0.0, 12.0), + (Bushly, _) => (0.0, 4.0), + (Irrwurz, _) => (0.0, 6.0), }, pants: match (body.species, body.body_type) { (Gnome, _) => (0.0, -3.0), @@ -174,6 +179,8 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Myrmidon, _) => (0.0, -3.0), (Husk, _) => (-1.0, -3.0), (Boreal, _) => (1.5, -5.0), + (Bushly, _) => (0.0, 1.0), + (Irrwurz, _) => (-5.5, -0.5), }, tail: match (body.species, body.body_type) { (Gnome, _) => (0.0, 0.0), @@ -188,6 +195,8 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Myrmidon, _) => (-2.5, -1.0), (Husk, _) => (0.0, 0.0), (Boreal, _) => (0.0, 0.0), + (Bushly, _) => (0.0, -1.0), + (Irrwurz, _) => (0.0, -1.0), }, hand: match (body.species, body.body_type) { (Gnome, _) => (4.0, 0.5, -1.0), @@ -202,6 +211,8 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Myrmidon, _) => (3.5, 1.5, 2.0), (Husk, _) => (4.0, 0.0, 1.0), (Boreal, _) => (5.0, 0.5, 5.0), + (Bushly, _) => (5.0, 2.0, 8.0), + (Irrwurz, _) => (3.5, 2.0, 3.0), }, foot: match (body.species, body.body_type) { (Gnome, _) => (3.0, 0.0, 4.0), @@ -216,6 +227,8 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Myrmidon, _) => (3.0, 0.5, 7.0), (Husk, _) => (4.0, 0.5, 7.0), (Boreal, _) => (3.0, 0.0, 9.0), + (Bushly, _) => (2.5, 0.0, 7.0), + (Irrwurz, _) => (4.0, 0.0, 6.0), }, grip: match (body.species, body.body_type) { (Gnome, _) => (0.0, 0.0, 5.0), @@ -230,6 +243,8 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Myrmidon, _) => (0.0, 0.0, 8.0), (Husk, _) => (0.0, 0.0, 8.0), (Boreal, _) => (1.0, 0.0, 5.0), + (Bushly, _) => (0.0, 0.0, 7.0), + (Irrwurz, _) => (0.0, 0.0, 7.0), }, scaler: match (body.species, body.body_type) { (Gnome, _) => 0.8, @@ -244,6 +259,8 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Myrmidon, _) => 1.24, (Husk, _) => 1.12, (Boreal, _) => 1.0, + (Bushly, _) => 1.0, + (Irrwurz, _) => 1.0, }, } } diff --git a/voxygen/anim/src/biped_small/shoot.rs b/voxygen/anim/src/biped_small/shoot.rs index 231f466e97..bdae7523c5 100644 --- a/voxygen/anim/src/biped_small/shoot.rs +++ b/voxygen/anim/src/biped_small/shoot.rs @@ -164,6 +164,65 @@ impl Animation for ShootAnimation { * Quaternion::rotation_y(0.5 * speednorm); }, }, + Some(ToolKind::Natural) => match ability_id { + Some("common.abilities.custom.irrwurz.magicball") => { + 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.main.position = Vec3::new(2.0, -3.0, -3.0); + + next.hand_l.position = Vec3::new(-s_a.hand.0, s_a.hand.1, s_a.hand.2 - 2.0); + next.hand_r.position = Vec3::new( + s_a.hand.0, + s_a.hand.1 + move2abs * 1.5, + s_a.hand.2 - 2.5 + move1abs * 2.5, + ); + + next.hand_r.orientation = + Quaternion::rotation_x(move1abs * 4.0 + move2abs * -0.7); + + next.hand_l.orientation = Quaternion::rotation_x(PI / 3.0 * move1abs) + * Quaternion::rotation_y(-0.7 * move1abs + move2abs * 0.1); + }, + _ => { + 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.control_l.position = Vec3::new( + 1.0 - s_a.grip.0 * 2.0 + move2abs * -4.0, + move2abs * -8.0, + 0.0, + ); + next.control_r.position = Vec3::new(-1.0 + s_a.grip.0 * 2.0, 6.0, -2.0); + + next.control.position = Vec3::new( + -1.0, + 2.0 + move1abs * 3.0 + s_a.grip.2, + 3.0 + move1abs * 7.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.3); + next.control_r.orientation = + Quaternion::rotation_x(PI / 2.0 + s_a.grip.0 * 0.2) + * Quaternion::rotation_y(0.5 + s_a.grip.0 * 0.2); + + 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), diff --git a/voxygen/anim/src/quadruped_low/combomelee.rs b/voxygen/anim/src/quadruped_low/combomelee.rs index ffa6e85d60..cc874bdea9 100644 --- a/voxygen/anim/src/quadruped_low/combomelee.rs +++ b/voxygen/anim/src/quadruped_low/combomelee.rs @@ -41,7 +41,8 @@ impl Animation for ComboAnimation { match ability_id { Some( "common.abilities.custom.icedrake.multi_bite" - | "common.abilities.custom.icedrake.icy_bite", + | "common.abilities.custom.icedrake.icy_bite" + | "common.abilities.custom.driggle.bite", ) => { let (movement1base, movement2base, movement3) = match stage_section { Some(StageSection::Buildup) => (anim_time.sqrt(), 0.0, 0.0), diff --git a/voxygen/anim/src/quadruped_low/mod.rs b/voxygen/anim/src/quadruped_low/mod.rs index 08137af543..a750654d2a 100644 --- a/voxygen/anim/src/quadruped_low/mod.rs +++ b/voxygen/anim/src/quadruped_low/mod.rs @@ -177,6 +177,7 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Basilisk, _) => (5.0, 2.5), (Deadwood, _) => (2.0, -3.0), (Mossdrake, _) => (7.0, 8.0), + (Driggle, _) => (3.0, 4.0), }, head_lower: match (body.species, body.body_type) { (Crocodile, _) => (8.0, 0.0), @@ -200,6 +201,7 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Basilisk, _) => (12.5, -5.5), (Deadwood, _) => (0.0, 0.0), (Mossdrake, _) => (9.0, -6.0), + (Driggle, _) => (6.0, -3.0), }, jaw: match (body.species, body.body_type) { (Crocodile, _) => (2.5, -3.0), @@ -223,6 +225,7 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Basilisk, _) => (0.5, -3.0), (Deadwood, _) => (-1.0, 4.0), (Mossdrake, _) => (3.0, -5.0), + (Driggle, _) => (-2.0, -5.0), }, chest: match (body.species, body.body_type) { (Crocodile, _) => (0.0, 5.0), @@ -246,6 +249,7 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Basilisk, _) => (0.0, 15.0), (Deadwood, _) => (0.0, 12.0), (Mossdrake, _) => (0.0, 16.5), + (Driggle, _) => (0.0, 8.0), }, tail_rear: match (body.species, body.body_type) { (Crocodile, _) => (-12.5, -1.0), @@ -269,6 +273,7 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Basilisk, _) => (-10.0, -4.0), (Deadwood, _) => (-15.0, 4.0), (Mossdrake, _) => (-12.0, -2.0), + (Driggle, _) => (-4.0, 0.0), }, tail_front: match (body.species, body.body_type) { (Crocodile, _) => (-6.0, 0.0), @@ -292,6 +297,7 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Basilisk, _) => (-6.5, -5.5), (Deadwood, _) => (-1.0, 4.0), (Mossdrake, _) => (-7.0, -4.5), + (Driggle, _) => (-5.5, -4.0), }, feet_f: match (body.species, body.body_type) { (Crocodile, _) => (3.5, 6.0, -1.0), @@ -315,6 +321,7 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Basilisk, _) => (6.5, 4.0, -2.0), (Deadwood, _) => (3.5, 4.0, -5.0), (Mossdrake, _) => (4.5, 4.0, -6.5), + (Driggle, _) => (4.5, 2.5, -4.0), }, feet_b: match (body.species, body.body_type) { (Crocodile, _) => (3.5, -6.0, -1.0), @@ -338,6 +345,7 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Basilisk, _) => (5.5, -6.5, -2.0), (Deadwood, _) => (3.5, -6.0, -5.0), (Mossdrake, _) => (3.5, -8.0, -6.5), + (Driggle, _) => (3.5, -3.5, -5.0), }, lean: match (body.species, body.body_type) { (Pangolin, _) => (0.4, 0.0), @@ -412,6 +420,7 @@ fn mount_point(body: &Body) -> Vec3 { (Basilisk, _) => (0.0, -2.0, 5.0), (Deadwood, _) => (0.0, -2.0, -3.0), (Mossdrake, _) => (0.0, 2.0, -0.5), + (Driggle, _) => (0.0, 2.0, 0.0), } .into() } diff --git a/voxygen/anim/src/quadruped_small/combomelee.rs b/voxygen/anim/src/quadruped_small/combomelee.rs new file mode 100644 index 0000000000..bcd8615fee --- /dev/null +++ b/voxygen/anim/src/quadruped_small/combomelee.rs @@ -0,0 +1,81 @@ +use super::{ + super::{vek::*, Animation}, + QuadrupedSmallSkeleton, SkeletonAttr, +}; +use common::states::utils::{AbilityInfo, StageSection}; + +pub struct ComboAnimation; +impl Animation for ComboAnimation { + type Dependency<'a> = ( + Option<&'a str>, + Option, + Option, + usize, + f32, + f32, + ); + type Skeleton = QuadrupedSmallSkeleton; + + #[cfg(feature = "use-dyn-lib")] + const UPDATE_FN: &'static [u8] = b"quadruped_small_combo\0"; + + #[cfg_attr(feature = "be-dyn-lib", export_name = "quadruped_small_combo")] + fn update_skeleton_inner( + skeleton: &Self::Skeleton, + (ability_id, stage_section, _ability_info, current_strike, global_time, timer): Self::Dependency<'_>, + anim_time: f32, + rate: &mut f32, + _s_a: &SkeletonAttr, + ) -> Self::Skeleton { + *rate = 1.0; + let mut next = (*skeleton).clone(); + + let _multi_strike_pullback = 1.0 + - if matches!(stage_section, Some(StageSection::Recover)) { + anim_time.powi(4) + } else { + 0.0 + }; + + for strike in 0..=current_strike { + match ability_id { + Some("common.abilities.custom.mossy_snail.headbutt") => { + let (movement1base, movement2base, movement3) = match stage_section { + Some(StageSection::Buildup) => (anim_time.sqrt(), 0.0, 0.0), + Some(StageSection::Action) => (1.0, anim_time.powi(4), 0.0), + Some(StageSection::Recover) => (1.0, 1.0, anim_time), + _ => (0.0, 0.0, 0.0), + }; + let pullback = 1.0 - movement3; + let subtract = global_time - timer; + let check = subtract - subtract.trunc(); + let mirror = (check - 0.5).signum(); + let _twitch3 = (mirror * movement3 * 9.0).sin(); + let movement1 = mirror * movement1base * pullback; + let movement2 = mirror * movement2base * pullback; + let movement1abs = movement1base * pullback; + let movement2abs = movement2base * pullback; + + match strike { + 0 => { + next.head.orientation = + Quaternion::rotation_x(movement1abs * -0.7 + movement2abs * 2.0) + * Quaternion::rotation_y(movement1 * -0.6 + movement2 * 1.2); + + next.chest.orientation = + Quaternion::rotation_y(movement1 * -0.08 + movement2 * 0.15) + * Quaternion::rotation_z(movement1 * 0.2 + movement2 * -0.6); + + next.tail.orientation = + Quaternion::rotation_x(movement1abs * 0.5 + movement2abs * -1.0) + * Quaternion::rotation_z(movement1 * -0.4 + movement2 * -0.2); + }, + _ => {}, + } + }, + _ => {}, + } + } + next + } +} diff --git a/voxygen/anim/src/quadruped_small/mod.rs b/voxygen/anim/src/quadruped_small/mod.rs index 0ac92a7d21..dd23109e15 100644 --- a/voxygen/anim/src/quadruped_small/mod.rs +++ b/voxygen/anim/src/quadruped_small/mod.rs @@ -1,14 +1,17 @@ pub mod alpha; +pub mod combomelee; pub mod feed; pub mod idle; pub mod jump; pub mod run; +pub mod shockwave; pub mod stunned; // Reexports pub use self::{ - alpha::AlphaAnimation, feed::FeedAnimation, idle::IdleAnimation, jump::JumpAnimation, - run::RunAnimation, stunned::StunnedAnimation, + alpha::AlphaAnimation, combomelee::ComboAnimation, feed::FeedAnimation, idle::IdleAnimation, + jump::JumpAnimation, run::RunAnimation, shockwave::ShockwaveAnimation, + stunned::StunnedAnimation, }; use super::{make_bone, vek::*, FigureBoneData, Offsets, Skeleton}; @@ -154,6 +157,8 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Dog, _) => (3.0, 4.5), (Goat, _) => (3.5, 4.0), (Seal, _) => (4.0, 2.5), + (TreantSapling, _) => (5.0, -2.0), + (MossySnail, _) => (2.0, 2.0), }, chest: match (body.species, body.body_type) { (Pig, _) => (0.0, 6.0), @@ -184,6 +189,8 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Dog, _) => (-2.0, 8.5), (Goat, _) => (2.0, 7.5), (Seal, _) => (-2.0, 4.0), + (TreantSapling, _) => (1.0, 13.0), + (MossySnail, _) => (-2.0, 4.5), }, feet_f: match (body.species, body.body_type) { (Pig, _) => (4.5, 3.5, -1.0), @@ -214,6 +221,8 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Dog, _) => (3.5, 3.0, -2.5), (Goat, _) => (3.0, 2.5, -3.5), (Seal, _) => (6.5, 3.0, -2.0), + (TreantSapling, _) => (5.0, 4.0, -10.0), + (MossySnail, _) => (4.5, 6.5, 0.0), }, feet_b: match (body.species, body.body_type) { (Pig, _) => (3.5, -2.0, 0.0), @@ -244,6 +253,8 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Dog, _) => (3.0, -3.5, -2.5), (Goat, _) => (3.0, -4.0, -2.0), (Seal, _) => (4.5, -6.0, -0.5), + (TreantSapling, _) => (5.5, -4.0, -10.0), + (MossySnail, _) => (5.0, -3.5, 0.0), }, tail: match (body.species, body.body_type) { (Pig, _) => (-4.5, 2.5), @@ -274,6 +285,8 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Dog, _) => (-5.0, 0.5), (Goat, _) => (-7.0, 0.0), (Seal, _) => (-1.0, 4.0), + (TreantSapling, _) => (-6.0, -2.0), + (MossySnail, _) => (0.0, -0.0), }, scaler: match (body.species, body.body_type) { (Pig, _) => 0.72, @@ -313,6 +326,8 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Beaver, _) => 1.2, (Hare, _) => 1.15, (Seal, _) => 2.5, + (TreantSapling, _) => 3.0, + (MossySnail, _) => 0.5, _ => 1.0, }, maximize: match (body.species, body.body_type) { @@ -348,6 +363,7 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Hare, _) => 0.8, (Goat, _) => 0.8, (Seal, _) => 0.7, + (TreantSapling, _) => 0.7, _ => 1.0, }, spring: match (body.species, body.body_type) { @@ -373,6 +389,7 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Hare, Female) => 2.5, (Goat, _) => 1.2, (Seal, _) => 0.7, + (TreantSapling, _) => 0.5, _ => 1.0, }, feed: match (body.species, body.body_type) { @@ -395,6 +412,7 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Gecko, _) => 1.0, (Turtle, _) => 1.0, (Fungome, _) => 1.0, + (TreantSapling, _) => 1.0, _ => 0.0, }, } @@ -431,6 +449,8 @@ fn mount_point(body: &Body) -> Vec3 { (Dog, _) => (0.0, -4.0, -2.5), (Goat, _) => (0.0, -4.0, -3.5), (Seal, _) => (0.0, -2.0, -2.5), + (TreantSapling, _) => (0.0, -4.0, -4.5), + (MossySnail, _) => (0.0, -4.0, -4.5), } .into() } diff --git a/voxygen/anim/src/quadruped_small/shockwave.rs b/voxygen/anim/src/quadruped_small/shockwave.rs new file mode 100644 index 0000000000..6025c1384a --- /dev/null +++ b/voxygen/anim/src/quadruped_small/shockwave.rs @@ -0,0 +1,46 @@ +use super::{ + super::{vek::*, Animation}, + QuadrupedSmallSkeleton, SkeletonAttr, +}; +use common::states::utils::StageSection; +//use std::ops::Rem; + +pub struct ShockwaveAnimation; + +impl Animation for ShockwaveAnimation { + type Dependency<'a> = (f32, f32, Option, f32); + type Skeleton = QuadrupedSmallSkeleton; + + #[cfg(feature = "use-dyn-lib")] + const UPDATE_FN: &'static [u8] = b"quadruped_small_shockwave\0"; + + #[cfg_attr(feature = "be-dyn-lib", export_name = "quadruped_small_shockwave")] + fn update_skeleton_inner( + skeleton: &Self::Skeleton, + (_velocity, global_time, stage_section, timer): Self::Dependency<'_>, + anim_time: f32, + _rate: &mut f32, + _s_a: &SkeletonAttr, + ) -> Self::Skeleton { + let mut next = (*skeleton).clone(); + + let (movement1base, movement2base, movement3) = match stage_section { + Some(StageSection::Buildup) => (anim_time.sqrt(), 0.0, 0.0), + Some(StageSection::Action) => (1.0, anim_time.powi(4), 0.0), + Some(StageSection::Recover) => (1.0, 1.0, anim_time), + _ => (0.0, 0.0, 0.0), + }; + let pullback = 1.0 - movement3; + let subtract = global_time - timer; + let check = subtract - subtract.trunc(); + let mirror = (check - 0.5).signum(); + let _movement1 = mirror * movement1base * pullback; + let _movement2 = mirror * movement2base * pullback; + let _movement1abs = movement1base * pullback; + let movement2abs = movement2base * pullback; + // used by treant_sapling + next.chest.position = Vec3::new(0.0, 0.0, -2.0 + movement2abs * 16.0); + + next + } +} diff --git a/voxygen/src/hud/diary.rs b/voxygen/src/hud/diary.rs index 9c4c3fab3d..1f1bbdb2c2 100644 --- a/voxygen/src/hud/diary.rs +++ b/voxygen/src/hud/diary.rs @@ -1173,7 +1173,7 @@ impl<'a> Widget for Diary<'a> { "Stealth", "Weapon Power", "Weapon Speed", - "Weapon Poise", + "Weapon Effect Power", "Weapon Crit-Chance", ]; @@ -1305,7 +1305,7 @@ impl<'a> Widget for Diary<'a> { _ => String::new(), } }, - "Weapon Poise" => match (main_weap_stats, off_weap_stats) { + "Weapon Effect Power" => match (main_weap_stats, off_weap_stats) { (Some(m_stats), Some(o_stats)) => { format!( "{} {}", diff --git a/voxygen/src/scene/figure/mod.rs b/voxygen/src/scene/figure/mod.rs index d13fb27970..5b5538f5f7 100644 --- a/voxygen/src/scene/figure/mod.rs +++ b/voxygen/src/scene/figure/mod.rs @@ -2344,6 +2344,38 @@ impl FigureMgr { ) } }, + CharacterState::ComboMelee2(s) => { + let timer = s.timer.as_secs_f32(); + let current_strike = s.completed_strikes % s.static_data.strikes.len(); + let strike_data = s.static_data.strikes[current_strike]; + let progress = match s.stage_section { + StageSection::Buildup => { + timer / strike_data.buildup_duration.as_secs_f32() + }, + StageSection::Action => { + timer / strike_data.swing_duration.as_secs_f32() + }, + StageSection::Recover => { + timer / strike_data.recover_duration.as_secs_f32() + }, + _ => 0.0, + }; + + anim::quadruped_small::ComboAnimation::update_skeleton( + &target_base, + ( + ability_id, + Some(s.stage_section), + Some(s.static_data.ability_info), + current_strike, + time, + state.state_time, + ), + progress, + &mut state_animation_rate, + skeleton_attr, + ) + }, CharacterState::Stunned(s) => { let stage_time = s.timer.as_secs_f32(); let stage_progress = match s.stage_section { @@ -2385,6 +2417,34 @@ impl FigureMgr { skeleton_attr, ) }, + CharacterState::Shockwave(s) => { + let stage_time = s.timer.as_secs_f32(); + let stage_progress = match s.stage_section { + StageSection::Buildup => { + stage_time / s.static_data.buildup_duration.as_secs_f32() + }, + StageSection::Charge => stage_time, + StageSection::Action => { + stage_time / s.static_data.swing_duration.as_secs_f32() + }, + StageSection::Recover => { + stage_time / s.static_data.recover_duration.as_secs_f32() + }, + _ => 0.0, + }; + anim::quadruped_small::ShockwaveAnimation::update_skeleton( + &target_base, + ( + rel_vel.magnitude(), + time, + Some(s.stage_section), + state.state_time, + ), + stage_progress, + &mut state_animation_rate, + skeleton_attr, + ) + }, // TODO! _ => target_base, }; @@ -3738,6 +3798,37 @@ impl FigureMgr { skeleton_attr, ) }, + CharacterState::ComboMelee2(s) => { + let timer = s.timer.as_secs_f32(); + let current_strike = s.completed_strikes % s.static_data.strikes.len(); + let strike_data = s.static_data.strikes[current_strike]; + let progress = match s.stage_section { + StageSection::Buildup => { + timer / strike_data.buildup_duration.as_secs_f32() + }, + StageSection::Action => { + timer / strike_data.swing_duration.as_secs_f32() + }, + StageSection::Recover => { + timer / strike_data.recover_duration.as_secs_f32() + }, + _ => 0.0, + }; + + anim::biped_small::ComboAnimation::update_skeleton( + &target_base, + ( + ability_id, + Some(s.stage_section), + Some(s.static_data.ability_info), + current_strike, + move_dir, + ), + progress, + &mut state_animation_rate, + skeleton_attr, + ) + }, CharacterState::Stunned(s) => { let stage_time = s.timer.as_secs_f32(); let wield_status = s.was_wielded;