diff --git a/assets/common/entity/spot/gnome/spear.ron b/assets/common/entity/spot/gnome/spear.ron new file mode 100644 index 0000000000..ea08b14ffb --- /dev/null +++ b/assets/common/entity/spot/gnome/spear.ron @@ -0,0 +1,13 @@ +EntityConfig ( + name: Name("Gnome"), + body: RandomWith("gnome"), + alignment: Alignment(Wild), + + loot: LootTable("common.loot_tables.dungeon.tier-4.enemy"), + + hands: TwoHanded(Item("common.items.npc_weapons.biped_small.myrmidon.wooden_spear")), + + meta: [ + LoadoutAsset("common.loadout.spots.gnome"), + ], +) diff --git a/assets/common/entity/spot/myrmidon/spear.ron b/assets/common/entity/spot/myrmidon/spear.ron index 579f971a70..d7937f7097 100644 --- a/assets/common/entity/spot/myrmidon/spear.ron +++ b/assets/common/entity/spot/myrmidon/spear.ron @@ -9,5 +9,6 @@ EntityConfig ( meta: [ LoadoutAsset("common.loadout.dungeon.tier-4.myrmidon"), + ], ) diff --git a/assets/common/entity/spot/pirate.ron b/assets/common/entity/spot/pirate.ron new file mode 100644 index 0000000000..330bc5df87 --- /dev/null +++ b/assets/common/entity/spot/pirate.ron @@ -0,0 +1,24 @@ +EntityConfig ( + name: Name("Pirate"), + body: Exact(Humanoid(Body( + species: Human, + body_type: Female, + hair_style: 2, + beard: 0, + eyes: 0, + accessory: 0, + hair_color: 0, + skin: 0, + eye_color: 0, + ))), + alignment: Alignment(Enemy), + + loot: LootTable("common.loot_tables.creature.biped_large.saurok"), + + hands: Paired(Item("common.items.weapons.sword_1h.iron-2")), + + meta: [ + SkillSetAsset("common.skillset.dungeon.tier-5.sword"), + LoadoutAsset("common.loadout.spots.pirate"), + ], +) diff --git a/assets/common/items/armor/pirate/belt.ron b/assets/common/items/armor/pirate/belt.ron new file mode 100644 index 0000000000..0357a62dfa --- /dev/null +++ b/assets/common/items/armor/pirate/belt.ron @@ -0,0 +1,19 @@ +ItemDef( + name: "Pirate Belt", + description: "", + kind: Armor(( + kind: Belt("Pirate"), + stats: ( + protection: Normal(8.0), + poise_resilience: Normal(1.0), + energy_max: 20, + energy_reward: 0.025, + crit_power: 0.02, + stealth: 0.0, + ), + )), + quality: Epic, + tags: [ + + ], +) diff --git a/assets/common/items/armor/pirate/chest.ron b/assets/common/items/armor/pirate/chest.ron new file mode 100644 index 0000000000..ef04ede29a --- /dev/null +++ b/assets/common/items/armor/pirate/chest.ron @@ -0,0 +1,19 @@ +ItemDef( + name: "Pirate Jacket", + description: "", + kind: Armor(( + kind: Chest("Pirate"), + stats: ( + protection: Normal(48.0), + poise_resilience: Normal(6.0), + energy_max: 135, + energy_reward: 0.135, + crit_power: 0.125, + stealth: 0.0, + ), + )), + quality: Epic, + tags: [ + + ], +) diff --git a/assets/common/items/armor/pirate/foot.ron b/assets/common/items/armor/pirate/foot.ron new file mode 100644 index 0000000000..0a4cb0d41b --- /dev/null +++ b/assets/common/items/armor/pirate/foot.ron @@ -0,0 +1,19 @@ +ItemDef( + name: "Pirate Boots", + description: "", + kind: Armor(( + kind: Foot("Pirate"), + stats: ( + protection: Normal(16.0), + poise_resilience: Normal(2.0), + energy_max: 45, + energy_reward: 0.045, + crit_power: 0.04, + stealth: 0.0, + ), + )), + quality: Epic, + tags: [ + + ], +) diff --git a/assets/common/items/armor/pirate/hand.ron b/assets/common/items/armor/pirate/hand.ron new file mode 100644 index 0000000000..f79a1ede29 --- /dev/null +++ b/assets/common/items/armor/pirate/hand.ron @@ -0,0 +1,19 @@ +ItemDef( + name: "Pirate Gloves", + description: "", + kind: Armor(( + kind: Hand("Pirate"), + stats: ( + protection: Normal(16.0), + poise_resilience: Normal(2.0), + energy_max: 45, + energy_reward: 0.045, + crit_power: 0.04, + stealth: 0.0, + ), + )), + quality: Epic, + tags: [ + + ], +) diff --git a/assets/common/items/armor/pirate/hat.ron b/assets/common/items/armor/pirate/hat.ron new file mode 100644 index 0000000000..531f6d437f --- /dev/null +++ b/assets/common/items/armor/pirate/hat.ron @@ -0,0 +1,19 @@ +ItemDef( + name: "Pirate Hat", + description: "", + kind: Armor(( + kind: Head("Pirate"), + stats: ( + protection: Normal(32.0), + poise_resilience: Normal(5.0), + energy_max: 90, + energy_reward: 0.1, + crit_power: 0.08, + stealth: 0.0, + ), + )), + quality: Epic, + tags: [ + + ], +) diff --git a/assets/common/items/armor/pirate/pants.ron b/assets/common/items/armor/pirate/pants.ron new file mode 100644 index 0000000000..06647a6cce --- /dev/null +++ b/assets/common/items/armor/pirate/pants.ron @@ -0,0 +1,19 @@ +ItemDef( + name: "Pirate Pants", + description: "", + kind: Armor(( + kind: Pants("Pirate"), + stats: ( + protection: Normal(32.0), + poise_resilience: Normal(4.0), + energy_max: 90, + energy_reward: 0.1, + crit_power: 0.08, + stealth: 0.0, + ), + )), + quality: Epic, + tags: [ + + ], +) diff --git a/assets/common/items/armor/pirate/shoulder.ron b/assets/common/items/armor/pirate/shoulder.ron new file mode 100644 index 0000000000..81d40d728d --- /dev/null +++ b/assets/common/items/armor/pirate/shoulder.ron @@ -0,0 +1,19 @@ +ItemDef( + name: "Pirate Mantle", + description: "", + kind: Armor(( + kind: Shoulder("Pirate"), + stats: ( + protection: Normal(32.0), + poise_resilience: Normal(5.0), + energy_max: 90, + energy_reward: 0.1, + crit_power: 0.08, + stealth: 0.0, + ), + )), + quality: Epic, + tags: [ + + ], +) diff --git a/assets/common/items/armor/witch/back.ron b/assets/common/items/armor/witch/back.ron index f8eb96d292..18cd167dbe 100644 --- a/assets/common/items/armor/witch/back.ron +++ b/assets/common/items/armor/witch/back.ron @@ -14,6 +14,6 @@ ItemDef( )), quality: Epic, tags: [ - Cultist, + ], ) diff --git a/assets/common/items/armor/witch/belt.ron b/assets/common/items/armor/witch/belt.ron index ac07cf922c..0f371fc99c 100644 --- a/assets/common/items/armor/witch/belt.ron +++ b/assets/common/items/armor/witch/belt.ron @@ -14,6 +14,6 @@ ItemDef( )), quality: Epic, tags: [ - Cultist, + ], ) diff --git a/assets/common/items/armor/witch/chest.ron b/assets/common/items/armor/witch/chest.ron index 1133e87625..801df9f900 100644 --- a/assets/common/items/armor/witch/chest.ron +++ b/assets/common/items/armor/witch/chest.ron @@ -14,6 +14,6 @@ ItemDef( )), quality: Epic, tags: [ - Cultist, + ], ) diff --git a/assets/common/items/armor/witch/foot.ron b/assets/common/items/armor/witch/foot.ron index f55cd63bba..4459722774 100644 --- a/assets/common/items/armor/witch/foot.ron +++ b/assets/common/items/armor/witch/foot.ron @@ -14,6 +14,6 @@ ItemDef( )), quality: Epic, tags: [ - Cultist, + ], ) diff --git a/assets/common/items/armor/witch/hand.ron b/assets/common/items/armor/witch/hand.ron index e777dfa770..7f17d65f3a 100644 --- a/assets/common/items/armor/witch/hand.ron +++ b/assets/common/items/armor/witch/hand.ron @@ -14,6 +14,6 @@ ItemDef( )), quality: Epic, tags: [ - Cultist, + ], ) diff --git a/assets/common/items/armor/witch/hat.ron b/assets/common/items/armor/witch/hat.ron index 567a2dc7ce..1a679bcfe4 100644 --- a/assets/common/items/armor/witch/hat.ron +++ b/assets/common/items/armor/witch/hat.ron @@ -14,6 +14,6 @@ ItemDef( )), quality: Epic, tags: [ - Cultist, + ], ) diff --git a/assets/common/items/armor/witch/pants.ron b/assets/common/items/armor/witch/pants.ron index 87df58804a..1b19308180 100644 --- a/assets/common/items/armor/witch/pants.ron +++ b/assets/common/items/armor/witch/pants.ron @@ -14,6 +14,6 @@ ItemDef( )), quality: Epic, tags: [ - Cultist, + ], ) diff --git a/assets/common/items/armor/witch/shoulder.ron b/assets/common/items/armor/witch/shoulder.ron index 6c2f6b4528..59121af896 100644 --- a/assets/common/items/armor/witch/shoulder.ron +++ b/assets/common/items/armor/witch/shoulder.ron @@ -14,6 +14,6 @@ ItemDef( )), quality: Epic, tags: [ - Cultist, + ], ) diff --git a/assets/common/items/npc_armor/biped_small/gnome/chest/gnome.ron b/assets/common/items/npc_armor/biped_small/gnome/chest/gnome.ron new file mode 100644 index 0000000000..afcb9f9fef --- /dev/null +++ b/assets/common/items/npc_armor/biped_small/gnome/chest/gnome.ron @@ -0,0 +1,17 @@ +ItemDef( + name: "Gnome", + description: "Ceremonial attire used by members.", + kind: Armor(( + kind: Chest("Gnome"), + stats: ( + protection: Normal(36.0), + poise_resilience: Normal(1.0), + energy_max: 0, + energy_reward: 0.0, + crit_power: 0.0, + stealth: 0.0, + ), + )), + quality: Low, + tags: [], +) \ No newline at end of file diff --git a/assets/common/items/npc_armor/biped_small/gnome/foot/gnome.ron b/assets/common/items/npc_armor/biped_small/gnome/foot/gnome.ron new file mode 100644 index 0000000000..3fa455a654 --- /dev/null +++ b/assets/common/items/npc_armor/biped_small/gnome/foot/gnome.ron @@ -0,0 +1,17 @@ +ItemDef( + name: "Gnome", + description: "Ceremonial attire used by members.", + kind: Armor(( + kind: Foot("Gnome"), + stats: ( + protection: Normal(1.0), + poise_resilience: Normal(1.0), + energy_max: 0, + energy_reward: 0.0, + crit_power: 0.0, + stealth: 0.0, + ), + )), + quality: Low, + tags: [], +) \ No newline at end of file diff --git a/assets/common/items/npc_armor/biped_small/gnome/hand/gnome.ron b/assets/common/items/npc_armor/biped_small/gnome/hand/gnome.ron new file mode 100644 index 0000000000..830423314f --- /dev/null +++ b/assets/common/items/npc_armor/biped_small/gnome/hand/gnome.ron @@ -0,0 +1,17 @@ +ItemDef( + name: "Gnome", + description: "Ceremonial attire used by members..", + kind: Armor(( + kind: Hand("Gnome"), + stats: ( + protection: Normal(1.0), + poise_resilience: Normal(1.0), + energy_max: 0, + energy_reward: 0.0, + crit_power: 0.0, + stealth: 0.0, + ), + )), + quality: Low, + tags: [], +) \ No newline at end of file diff --git a/assets/common/items/npc_armor/biped_small/gnome/head/gnome.ron b/assets/common/items/npc_armor/biped_small/gnome/head/gnome.ron new file mode 100644 index 0000000000..7862d261fd --- /dev/null +++ b/assets/common/items/npc_armor/biped_small/gnome/head/gnome.ron @@ -0,0 +1,17 @@ +ItemDef( + name: "Gnome", + description: "Ceremonial attire used by members.", + kind: Armor(( + kind: Head("Gnome"), + stats: ( + protection: Normal(1.0), + poise_resilience: Normal(1.0), + energy_max: 0, + energy_reward: 0.0, + crit_power: 0.0, + stealth: 0.0, + ), + )), + quality: Low, + tags: [], +) \ No newline at end of file diff --git a/assets/common/items/npc_armor/biped_small/gnome/pants/gnome.ron b/assets/common/items/npc_armor/biped_small/gnome/pants/gnome.ron new file mode 100644 index 0000000000..758d9466e2 --- /dev/null +++ b/assets/common/items/npc_armor/biped_small/gnome/pants/gnome.ron @@ -0,0 +1,17 @@ +ItemDef( + name: "Gnome", + description: "Ceremonial attire used by members..", + kind: Armor(( + kind: Pants("Gnome"), + stats: ( + protection: Normal(1.0), + poise_resilience: Normal(1.0), + energy_max: 0, + energy_reward: 0.0, + crit_power: 0.0, + stealth: 0.0, + ), + )), + quality: Low, + tags: [], +) \ No newline at end of file diff --git a/assets/common/loadout/spots/gnome.ron b/assets/common/loadout/spots/gnome.ron new file mode 100644 index 0000000000..45b35a1896 --- /dev/null +++ b/assets/common/loadout/spots/gnome.ron @@ -0,0 +1,7 @@ +({ + Armor(Head): Item("common.items.npc_armor.biped_small.gnome.head.gnome"), + Armor(Feet): Item("common.items.npc_armor.biped_small.gnome.foot.gnome"), + Armor(Hands): Item("common.items.npc_armor.biped_small.gnome.hand.gnome"), + Armor(Chest): Item("common.items.npc_armor.biped_small.gnome.chest.gnome"), + Armor(Legs): Item("common.items.npc_armor.biped_small.gnome.pants.gnome"), +}) diff --git a/assets/common/loadout/spots/pirate.ron b/assets/common/loadout/spots/pirate.ron new file mode 100644 index 0000000000..edebca72c4 --- /dev/null +++ b/assets/common/loadout/spots/pirate.ron @@ -0,0 +1,10 @@ +({ + Armor(Head): Item("common.items.armor.pirate.hat"), + Armor(Chest): Item("common.items.armor.pirate.chest"), + Armor(Shoulders): Item("common.items.armor.pirate.shoulder"), + Armor(Belt): Item("common.items.armor.pirate.belt"), + Armor(Hands): Item("common.items.armor.pirate.hand"), + Armor(Legs): Item("common.items.armor.pirate.pants"), + Armor(Feet): Item("common.items.armor.pirate.foot"), + Lantern: Item("common.items.lantern.black_0"), +}) diff --git a/assets/voxygen/voxel/armor/pirate/belt.vox b/assets/voxygen/voxel/armor/pirate/belt.vox new file mode 100644 index 0000000000..cce88561da Binary files /dev/null and b/assets/voxygen/voxel/armor/pirate/belt.vox differ diff --git a/assets/voxygen/voxel/armor/pirate/chest.vox b/assets/voxygen/voxel/armor/pirate/chest.vox new file mode 100644 index 0000000000..bf018d9480 Binary files /dev/null and b/assets/voxygen/voxel/armor/pirate/chest.vox differ diff --git a/assets/voxygen/voxel/armor/pirate/foot.vox b/assets/voxygen/voxel/armor/pirate/foot.vox new file mode 100644 index 0000000000..54c2fe689c Binary files /dev/null and b/assets/voxygen/voxel/armor/pirate/foot.vox differ diff --git a/assets/voxygen/voxel/armor/pirate/hand.vox b/assets/voxygen/voxel/armor/pirate/hand.vox new file mode 100644 index 0000000000..58d44798d5 Binary files /dev/null and b/assets/voxygen/voxel/armor/pirate/hand.vox differ diff --git a/assets/voxygen/voxel/armor/pirate/hat.vox b/assets/voxygen/voxel/armor/pirate/hat.vox new file mode 100644 index 0000000000..e0e802f277 Binary files /dev/null and b/assets/voxygen/voxel/armor/pirate/hat.vox differ diff --git a/assets/voxygen/voxel/armor/pirate/pants.vox b/assets/voxygen/voxel/armor/pirate/pants.vox new file mode 100644 index 0000000000..45fa5c5f74 Binary files /dev/null and b/assets/voxygen/voxel/armor/pirate/pants.vox differ diff --git a/assets/voxygen/voxel/armor/pirate/shoulder.vox b/assets/voxygen/voxel/armor/pirate/shoulder.vox new file mode 100644 index 0000000000..9350536f57 Binary files /dev/null and b/assets/voxygen/voxel/armor/pirate/shoulder.vox differ diff --git a/assets/voxygen/voxel/humanoid_armor_belt_manifest.ron b/assets/voxygen/voxel/humanoid_armor_belt_manifest.ron index 25062188b9..abccd52507 100644 --- a/assets/voxygen/voxel/humanoid_armor_belt_manifest.ron +++ b/assets/voxygen/voxel/humanoid_armor_belt_manifest.ron @@ -100,6 +100,14 @@ vox_spec: ("armor.savage.belt", (-4.0, -4.0, 1.0)), color: None ), + "Witch":( + vox_spec: ("armor.witch.belt", (-4.0, -3.5, -2.0)), + color: None + ), + "Pirate":( + vox_spec: ("armor.pirate.belt", (-4.0, -4.0, 2.5)), + color: None + ), "Linen":( vox_spec: ("armor.cloth.linen.belt", (-4.0, -4.0, 0.0)), color: None @@ -112,10 +120,6 @@ vox_spec: ("armor.cloth.silken.belt", (-4.0, -3.5, -3.0)), color: None ), - "Witch":( - vox_spec: ("armor.witch.belt", (-4.0, -3.5, -3.0)), - color: None - ), "Druid":( vox_spec: ("armor.cloth.druid.belt", (-4.0, -4.0, -0.5)), color: None diff --git a/assets/voxygen/voxel/humanoid_armor_chest_manifest.ron b/assets/voxygen/voxel/humanoid_armor_chest_manifest.ron index 7177fd67e5..150d9eef14 100644 --- a/assets/voxygen/voxel/humanoid_armor_chest_manifest.ron +++ b/assets/voxygen/voxel/humanoid_armor_chest_manifest.ron @@ -170,6 +170,14 @@ vox_spec: ("armor.hide.savage.chest", (-7.0, -4.0, 1.0)), color: None ), + "Witch": ( + vox_spec: ("armor.witch.chest", (-7.0, -4.0, 2.0)), + color: None + ), + "Pirate": ( + vox_spec: ("armor.pirate.chest", (-7.0, -4.0, 2.0)), + color: None + ), "Linen": ( vox_spec: ("armor.cloth.linen.chest", (-7.0, -4.0, 2.0)), color: None @@ -182,10 +190,6 @@ vox_spec: ("armor.cloth.silken.chest", (-7.0, -4.0, 1.0)), color: None ), - "Witch": ( - vox_spec: ("armor.witch.chest", (-7.0, -4.0, 1.0)), - color: None - ), "Druid": ( vox_spec: ("armor.cloth.druid.chest", (-7.0, -4.0, 2.0)), color: None diff --git a/assets/voxygen/voxel/humanoid_armor_foot_manifest.ron b/assets/voxygen/voxel/humanoid_armor_foot_manifest.ron index 308d1cc255..bcf204c131 100644 --- a/assets/voxygen/voxel/humanoid_armor_foot_manifest.ron +++ b/assets/voxygen/voxel/humanoid_armor_foot_manifest.ron @@ -100,6 +100,14 @@ vox_spec: ("armor.savage.foot", (-2.5, -3.5, -2.0)), color: None ), + "Witch": ( + vox_spec: ("armor.witch.foot", (-2.5, -3.5, -2.0)), + color: None + ), + "Pirate": ( + vox_spec: ("armor.pirate.foot", (-2.5, -3.5, -2.0)), + color: None + ), "Linen": ( vox_spec: ("armor.cloth.linen.foot", (-2.5, -3.5, -2.0)), color: None @@ -112,10 +120,6 @@ vox_spec: ("armor.cloth.silken.foot", (-2.5, -3.5, -2.0)), color: None ), - "Witch": ( - vox_spec: ("armor.witch.foot", (-2.5, -3.5, -2.0)), - color: None - ), "Druid": ( vox_spec: ("armor.cloth.druid.foot", (-2.5, -3.5, -2.0)), color: None diff --git a/assets/voxygen/voxel/humanoid_armor_hand_manifest.ron b/assets/voxygen/voxel/humanoid_armor_hand_manifest.ron index 34ed01d6c3..403df3fcc5 100644 --- a/assets/voxygen/voxel/humanoid_armor_hand_manifest.ron +++ b/assets/voxygen/voxel/humanoid_armor_hand_manifest.ron @@ -220,6 +220,26 @@ color: None ) ), + "Witch": ( + left: ( + vox_spec: ("armor.witch.hand", (-2.5, -2.5, -4.0)), + color: None + ), + right: ( + vox_spec: ("armor.witch.hand", (-1.5, -2.5, -4.0)), + color: None + ) + ), + "Pirate": ( + left: ( + vox_spec: ("armor.pirate.hand", (-2.5, -2.5, -4.0)), + color: None + ), + right: ( + vox_spec: ("armor.pirate.hand", (-1.5, -2.5, -4.0)), + color: None + ) + ), "Linen": ( left: ( vox_spec: ("armor.cloth.linen.hand", (-1.5, -2.0, -3.0)), @@ -250,16 +270,6 @@ color: None ) ), - "Witch": ( - left: ( - vox_spec: ("armor.witch.hand", (-2.5, -2.5, -4.0)), - color: None - ), - right: ( - vox_spec: ("armor.witch.hand", (-1.5, -2.5, -4.0)), - color: None - ) - ), "Druid": ( left: ( vox_spec: ("armor.cloth.druid.hand", (-2.5, -1.0, -3.0)), diff --git a/assets/voxygen/voxel/humanoid_armor_head_manifest.ron b/assets/voxygen/voxel/humanoid_armor_head_manifest.ron index 6320b77dda..93486d9ade 100644 --- a/assets/voxygen/voxel/humanoid_armor_head_manifest.ron +++ b/assets/voxygen/voxel/humanoid_armor_head_manifest.ron @@ -32,5 +32,9 @@ vox_spec: ("armor.witch.hat", (-2.0, -2.0, 5.0)), color: None ), + (Human, "Pirate"): ( + vox_spec: ("armor.pirate.hat", (-2.0, -2.0, 5.0)), + color: None + ), } )) diff --git a/assets/voxygen/voxel/humanoid_armor_pants_manifest.ron b/assets/voxygen/voxel/humanoid_armor_pants_manifest.ron index 137b48109c..47e10db1d1 100644 --- a/assets/voxygen/voxel/humanoid_armor_pants_manifest.ron +++ b/assets/voxygen/voxel/humanoid_armor_pants_manifest.ron @@ -128,6 +128,14 @@ vox_spec: ("armor.savage.pants", (-5.0, -4.0, 0.5)), color: None ), + "Witch": ( + vox_spec: ("armor.witch.pants", (-5.0, -4.0, 0.5)), + color: None + ), + "Pirate": ( + vox_spec: ("armor.pirate.pants", (-5.0, -4.0, 1.5)), + color: None + ), "Linen": ( vox_spec: ("armor.cloth.linen.pants", (-5.0, -4.0, 0.5)), color: None @@ -140,10 +148,6 @@ vox_spec: ("armor.cloth.silken.pants", (-5.0, -4.0, 0.5)), color: None ), - "Witch": ( - vox_spec: ("armor.witch.pants", (-5.0, -4.0, 0.5)), - color: None - ), "Druid": ( vox_spec: ("armor.cloth.druid.pants", (-5.0, -4.0, 0.5)), color: None diff --git a/assets/voxygen/voxel/humanoid_armor_shoulder_manifest.ron b/assets/voxygen/voxel/humanoid_armor_shoulder_manifest.ron index 3ee73f6cd7..8e0c946767 100644 --- a/assets/voxygen/voxel/humanoid_armor_shoulder_manifest.ron +++ b/assets/voxygen/voxel/humanoid_armor_shoulder_manifest.ron @@ -301,6 +301,26 @@ color: None ) ), + "Witch": ( + left: ( + vox_spec: ("armor.witch.shoulder", (-5.0, -4.0 , -2.0)), + color: None + ), + right: ( + vox_spec: ("armor.witch.shoulder", (-1.0, -4.0 , -2.0)), + color: None + ) + ), + "Pirate": ( + left: ( + vox_spec: ("armor.pirate.shoulder", (-5.0, -4.0 , -2.0)), + color: None + ), + right: ( + vox_spec: ("armor.empty", (-3.0, -3.5, 1.0)), + color: None + ) + ), "Linen": ( left: ( vox_spec: ("armor.cloth.linen.shoulder", (-3.5, -4.0 , -1.0)), @@ -331,16 +351,6 @@ color: None ) ), - "Witch": ( - left: ( - vox_spec: ("armor.witch.shoulder", (-5.0, -4.0 , -2.0)), - color: None - ), - right: ( - vox_spec: ("armor.witch.shoulder", (-1.0, -4.0, -2.0)), - color: None - ) - ), "Druid": ( left: ( vox_spec: ("armor.cloth.druid.shoulder", (-4.5, -4.0 , -3.5)), diff --git a/assets/voxygen/voxel/npc/gnome/male/shorts.vox b/assets/voxygen/voxel/npc/gnome/male/pants.vox similarity index 100% rename from assets/voxygen/voxel/npc/gnome/male/shorts.vox rename to assets/voxygen/voxel/npc/gnome/male/pants.vox diff --git a/assets/world/manifests/spots/arch.ron b/assets/world/manifests/spots/arch.ron new file mode 100644 index 0000000000..15e0d54744 --- /dev/null +++ b/assets/world/manifests/spots/arch.ron @@ -0,0 +1,12 @@ +#![enable(unwrap_newtypes)] + +[ + ( + specifier: "world.structure.natural.arch", + center: (32, 14, 10) + ), + ( + specifier: "world.structure.natural.arch-1", + center: (14, 12, 10) + ), +] diff --git a/assets/world/manifests/spots/big-mushroom.ron b/assets/world/manifests/spots/big-mushroom.ron new file mode 100644 index 0000000000..731ffa5e71 --- /dev/null +++ b/assets/world/manifests/spots/big-mushroom.ron @@ -0,0 +1,8 @@ +#![enable(unwrap_newtypes)] + +[ + ( + specifier: "world.structure.natural.big_mushroom", + center: (12, 12, 4), + ), +] diff --git a/assets/world/manifests/trees/quirky_dry.ron b/assets/world/manifests/spots/bones.ron similarity index 100% rename from assets/world/manifests/trees/quirky_dry.ron rename to assets/world/manifests/spots/bones.ron diff --git a/assets/world/manifests/spots/water/shipwreck.ron b/assets/world/manifests/spots/water/shipwreck.ron index 03ea8cab34..352bd0439c 100644 --- a/assets/world/manifests/spots/water/shipwreck.ron +++ b/assets/world/manifests/spots/water/shipwreck.ron @@ -3,6 +3,6 @@ [ ( specifier: "world.structure.natural.shipwreck", - center: (32, 14, 6), + center: (32, 14, 16), ), ] diff --git a/assets/world/manifests/spots_general/igloo.ron b/assets/world/manifests/spots_general/igloo.ron new file mode 100644 index 0000000000..4f0a4aaf01 --- /dev/null +++ b/assets/world/manifests/spots_general/igloo.ron @@ -0,0 +1,8 @@ +#![enable(unwrap_newtypes)] + +[ + ( + specifier: "world.structure.natural.igloo", + center: (13, 10, 2), + ), +] diff --git a/assets/world/manifests/spots_general/pirate_hideout.ron b/assets/world/manifests/spots_general/pirate_hideout.ron new file mode 100644 index 0000000000..70120b05e7 --- /dev/null +++ b/assets/world/manifests/spots_general/pirate_hideout.ron @@ -0,0 +1,16 @@ +#![enable(unwrap_newtypes)] + +[ + ( + specifier: "world.structure.natural.pirate_hideout", + center: (32, 27, 5), + custom_indices: { + 12: Sprite(Cauldron), + 10: Sprite(WitchWindow), + 44: Filled(GlowingRock, (r: 54, g: 180, b: 64)), + 8: Filled(Air, (r: 255, g: 255, b: 255)), + 249: Sprite(PotionMinor), + 251: Sprite(Ember), + }, + ), +] diff --git a/assets/world/manifests/spots_savannah/wolf_burrow.ron b/assets/world/manifests/spots_savannah/wolf_burrow.ron new file mode 100644 index 0000000000..85d2d6fc60 --- /dev/null +++ b/assets/world/manifests/spots_savannah/wolf_burrow.ron @@ -0,0 +1,8 @@ +#![enable(unwrap_newtypes)] + +[ + ( + specifier: "world.structure.natural.wolf_burrow", + center: (10, 10, 0), + ), +] diff --git a/assets/world/structure/natural/arch-1.vox b/assets/world/structure/natural/arch-1.vox new file mode 100644 index 0000000000..aef3b7f100 Binary files /dev/null and b/assets/world/structure/natural/arch-1.vox differ diff --git a/assets/world/structure/natural/arch.vox b/assets/world/structure/natural/arch.vox new file mode 100644 index 0000000000..1ce22cd99b Binary files /dev/null and b/assets/world/structure/natural/arch.vox differ diff --git a/assets/world/structure/natural/big_mushroom.vox b/assets/world/structure/natural/big_mushroom.vox new file mode 100644 index 0000000000..69248db0fd Binary files /dev/null and b/assets/world/structure/natural/big_mushroom.vox differ diff --git a/assets/world/structure/natural/dock.vox b/assets/world/structure/natural/dock.vox new file mode 100644 index 0000000000..5b9ef01f25 Binary files /dev/null and b/assets/world/structure/natural/dock.vox differ diff --git a/assets/world/structure/natural/igloo.vox b/assets/world/structure/natural/igloo.vox new file mode 100644 index 0000000000..787c6e0f11 Binary files /dev/null and b/assets/world/structure/natural/igloo.vox differ diff --git a/assets/world/structure/natural/pirate_hideout.vox b/assets/world/structure/natural/pirate_hideout.vox new file mode 100644 index 0000000000..6cb1138df2 Binary files /dev/null and b/assets/world/structure/natural/pirate_hideout.vox differ diff --git a/assets/world/structure/natural/wolf_burrow.vox b/assets/world/structure/natural/wolf_burrow.vox new file mode 100644 index 0000000000..ec84d5170b Binary files /dev/null and b/assets/world/structure/natural/wolf_burrow.vox differ diff --git a/assets/world/wildlife/spawn/jungle/rainforest.ron b/assets/world/wildlife/spawn/jungle/rainforest.ron index 14b85d0145..45f70e6dfc 100644 --- a/assets/world/wildlife/spawn/jungle/rainforest.ron +++ b/assets/world/wildlife/spawn/jungle/rainforest.ron @@ -7,6 +7,7 @@ SpawnEntry ( // Casual (5, (1, 1, "common.entity.wild.aggressive.asp")), (5, (1, 1, "common.entity.wild.aggressive.tiger")), + (5, (1, 1, "common.entity.wild.aggressive.maneater")), // Rare (1, (1, 1, "common.entity.wild.aggressive.sunlizard")), (1, (1, 1, "common.entity.wild.aggressive.odonto")), diff --git a/voxygen/anim/src/biped_small/beam.rs b/voxygen/anim/src/biped_small/beam.rs new file mode 100644 index 0000000000..b00e9f0bed --- /dev/null +++ b/voxygen/anim/src/biped_small/beam.rs @@ -0,0 +1,116 @@ +use super::{ + super::{vek::*, Animation}, + BipedSmallSkeleton, SkeletonAttr, +}; +use common::{comp::item::ToolKind, states::utils::StageSection}; +use std::f32::consts::PI; + +pub struct BeamAnimation; + +type BeamAnimationDependency = ( + Option, + Vec3, + Vec3, + Vec3, + f32, + Vec3, + f32, + Option, + f32, +); + +impl Animation for BeamAnimation { + type Dependency<'a> = BeamAnimationDependency; + type Skeleton = BipedSmallSkeleton; + + #[cfg(feature = "use-dyn-lib")] + const UPDATE_FN: &'static [u8] = b"biped_small_beam\0"; + + #[cfg_attr(feature = "be-dyn-lib", export_name = "biped_small_beam")] + + fn update_skeleton_inner<'a>( + skeleton: &Self::Skeleton, + ( + _active_tool_kind, + velocity, + _orientation, + _last_ori, + _global_time, + _avg_vel, + _acc_vel, + stage_section, + _timer, + ): Self::Dependency<'a>, + anim_time: f32, + _rate: &mut f32, + s_a: &SkeletonAttr, + ) -> Self::Skeleton { + let mut next = (*skeleton).clone(); + let speed = Vec2::::from(velocity).magnitude(); + + let fast = (anim_time * 10.0).sin(); + let fastalt = (anim_time * 10.0 + PI / 2.0).sin(); + + let speednorm = speed / 9.4; + let speednormcancel = 1.0 - speednorm; + + next.head.position = Vec3::new(0.0, s_a.head.0, s_a.head.1 + fast * -0.1 * speednormcancel); + next.head.orientation = Quaternion::rotation_x(0.45 * speednorm) + * Quaternion::rotation_y(fast * 0.07 * speednormcancel); + next.chest.position = Vec3::new( + 0.0, + s_a.chest.0, + s_a.chest.1 + fastalt * 0.4 * speednormcancel + speednormcancel * -0.5, + ); + + next.pants.position = Vec3::new(0.0, s_a.pants.0, s_a.pants.1); + + next.tail.position = Vec3::new(0.0, s_a.tail.0, s_a.tail.1); + next.tail.orientation = Quaternion::rotation_x(0.05 * fastalt * speednormcancel) + * Quaternion::rotation_z(fast * 0.15 * speednormcancel); + + next.main.position = Vec3::new(0.0, 0.0, 0.0); + next.main.orientation = Quaternion::rotation_x(0.0); + + next.hand_l.position = Vec3::new(s_a.grip.0 * 4.0, 0.0, s_a.grip.2); + next.hand_r.position = Vec3::new(-s_a.grip.0 * 4.0, 0.0, s_a.grip.2); + + next.hand_l.orientation = Quaternion::rotation_x(0.0); + next.hand_r.orientation = Quaternion::rotation_x(0.0); + + let (move1base, move2base, move3) = match stage_section { + Some(StageSection::Buildup) => (anim_time.powf(0.25), 0.0, 0.0), + Some(StageSection::Action) => (1.0, (anim_time * 4.0).sin(), 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; + next.control_l.position = Vec3::new(2.0 - s_a.grip.0 * 2.0, 1.0, 3.0); + next.control_r.position = Vec3::new( + 7.0 + s_a.grip.0 * 2.0 + move1abs * -8.0, + -4.0 + move1abs * 0.0, + 3.0 + move1abs * 10.0, + ); + + next.control.position = Vec3::new( + -5.0, + -1.0 + s_a.grip.2, + -2.0 + -s_a.grip.2 / 2.5 + s_a.grip.0 * -2.0 + move1abs * 5.0, + ); + + next.control_l.orientation = Quaternion::rotation_x(PI / 2.0 + move1abs * 0.8) + * Quaternion::rotation_y(-0.3) + * Quaternion::rotation_z(-0.3); + next.control_r.orientation = + Quaternion::rotation_x(PI / 2.0 + s_a.grip.0 * 0.2 + move1abs * 0.8) + * Quaternion::rotation_y(-0.4 + s_a.grip.0 * 0.2 + move1abs * 0.8) + * Quaternion::rotation_z(-0.0 + move1abs * 2.0 + move2base * 0.6); + + next.control.orientation = Quaternion::rotation_x(-0.3 + move1abs * -0.6) + * Quaternion::rotation_y(-0.2 * speednorm + move1abs * 0.8) + * Quaternion::rotation_z(0.5 + move1abs * 0.6); + + next + } +} diff --git a/voxygen/anim/src/biped_small/mod.rs b/voxygen/anim/src/biped_small/mod.rs index 1188cb19f3..2c533da2d6 100644 --- a/voxygen/anim/src/biped_small/mod.rs +++ b/voxygen/anim/src/biped_small/mod.rs @@ -1,4 +1,5 @@ pub mod alpha; +pub mod beam; pub mod dash; pub mod idle; pub mod run; @@ -8,8 +9,8 @@ pub mod wield; // Reexports pub use self::{ - alpha::AlphaAnimation, dash::DashAnimation, idle::IdleAnimation, run::RunAnimation, - shoot::ShootAnimation, stunned::StunnedAnimation, wield::WieldAnimation, + alpha::AlphaAnimation, beam::BeamAnimation, dash::DashAnimation, idle::IdleAnimation, + run::RunAnimation, shoot::ShootAnimation, stunned::StunnedAnimation, wield::WieldAnimation, }; use super::{make_bone, vek::*, FigureBoneData, Offsets, Skeleton}; diff --git a/voxygen/anim/src/character/roll.rs b/voxygen/anim/src/character/roll.rs index 55302c5c06..fd176ff319 100644 --- a/voxygen/anim/src/character/roll.rs +++ b/voxygen/anim/src/character/roll.rs @@ -55,13 +55,14 @@ impl Animation for RollAnimation { Some(StageSection::Recover) => (1.0, 1.0, anim_time.powf(0.75)), _ => (0.0, 0.0, 0.0), }; - let movement1 = movement1base * (1.0 - movement3); + let pullback = 1.0 - movement3; + let movement1 = movement1base * pullback; next.head.position = Vec3::new( 0.0, - s_a.head.0 + 3.0 * movement1, + s_a.head.0 + 1.5 * movement1, s_a.head.1 - 1.0 * movement1, ); - next.head.orientation = Quaternion::rotation_x(-0.75 * movement1base + 0.75 * movement2); + next.head.orientation = Quaternion::rotation_x(-0.3 * movement1); next.chest.position = Vec3::new(0.0, s_a.chest.0, -9.5 * movement1 + s_a.chest.1); next.chest.orientation = Quaternion::rotation_x(-0.2 * movement1); diff --git a/voxygen/src/scene/figure/mod.rs b/voxygen/src/scene/figure/mod.rs index 12e6d8b15f..26b4c755eb 100644 --- a/voxygen/src/scene/figure/mod.rs +++ b/voxygen/src/scene/figure/mod.rs @@ -2893,6 +2893,37 @@ impl FigureMgr { skeleton_attr, ) }, + CharacterState::RepeaterRanged(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::Recover => { + stage_time / s.static_data.recover_duration.as_secs_f32() + }, + + _ => 0.0, + }; + anim::biped_small::ShootAnimation::update_skeleton( + &target_base, + ( + active_tool_kind, + rel_vel, + ori * anim::vek::Vec3::::unit_y(), + state.last_ori * anim::vek::Vec3::::unit_y(), + time, + rel_avg_vel, + state.acc_vel, + Some(s.stage_section), + state.state_time, + ), + stage_progress, + &mut state_animation_rate, + skeleton_attr, + ) + }, CharacterState::BasicRanged(s) => { let stage_time = s.timer.as_secs_f32(); @@ -2924,6 +2955,36 @@ impl FigureMgr { skeleton_attr, ) }, + CharacterState::BasicBeam(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::Action => s.timer.as_secs_f32(), + StageSection::Recover => { + stage_time / s.static_data.recover_duration.as_secs_f32() + }, + _ => 0.0, + }; + anim::biped_small::BeamAnimation::update_skeleton( + &target_base, + ( + active_tool_kind, + rel_vel, + ori * anim::vek::Vec3::::unit_y(), + state.last_ori * anim::vek::Vec3::::unit_y(), + time, + rel_avg_vel, + state.acc_vel, + Some(s.stage_section), + state.state_time, + ), + stage_progress, + &mut state_animation_rate, + skeleton_attr, + ) + }, CharacterState::ComboMelee(s) => { let stage_index = (s.stage - 1) as usize; let stage_time = s.timer.as_secs_f32(); diff --git a/world/src/layer/spot.rs b/world/src/layer/spot.rs index 42c9aed703..5015e91846 100644 --- a/world/src/layer/spot.rs +++ b/world/src/layer/spot.rs @@ -37,6 +37,10 @@ pub enum Spot { MyrmidonTemple, GnarlingTotem, WitchHouse, + PirateHideout, + BigMushroom, + WolfBurrow, + Igloo, //BanditCamp, //EnchantedRock, //TowerRuin, @@ -50,6 +54,7 @@ pub enum Spot { LionRock, TreeStumpForest, DesertBones, + Arch, AirshipCrash, FruitTree, Shipwreck, @@ -77,6 +82,34 @@ impl Spot { }, false, ); + Self::generate_spots( + Spot::Igloo, + world, + 100.0, + |g, c| { + g < 0.5 + && !c.near_cliffs() + && !c.river.near_water() + && !c.path.0.is_way() + && c.sites.is_empty() + && matches!(c.get_biome(), Snowland) + }, + false, + ); + Self::generate_spots( + Spot::PirateHideout, + world, + 3.0, + |g, c| { + g < 0.25 + && !c.near_cliffs() + && !c.river.near_water() + && !c.path.0.is_way() + && c.sites.is_empty() + && matches!(c.get_biome(), Forest | Jungle) + }, + false, + ); Self::generate_spots( Spot::DwarvenGrave, world, @@ -162,6 +195,20 @@ impl Spot { }, false, ); + Self::generate_spots( + Spot::WolfBurrow, + world, + 10.0, + |g, c| { + g < 0.25 + && !c.near_cliffs() + && !c.river.near_water() + && !c.path.0.is_way() + && c.sites.is_empty() + && matches!(c.get_biome(), Forest | Grassland) + }, + false, + ); Self::generate_spots( Spot::TreeStumpForest, world, @@ -190,6 +237,20 @@ impl Spot { }, false, ); + Self::generate_spots( + Spot::Arch, + world, + 2.0, + |g, c| { + g < 0.25 + && !c.near_cliffs() + && !c.river.near_water() + && !c.path.0.is_way() + && c.sites.is_empty() + && matches!(c.get_biome(), Desert) + }, + false, + ); Self::generate_spots( Spot::AirshipCrash, world, @@ -218,6 +279,20 @@ impl Spot { }, true, ); + Self::generate_spots( + Spot::BigMushroom, + world, + 20.0, + |g, c| { + g < 0.25 + && !c.near_cliffs() + && !c.river.near_water() + && !c.path.0.is_way() + && c.sites.is_empty() + && matches!(c.get_biome(), Forest) + }, + true, + ); Self::generate_spots( Spot::Shipwreck, world, @@ -342,6 +417,24 @@ pub fn apply_spots_to(canvas: &mut Canvas, _dynamic_rng: &mut impl Rng) { (0..3, "common.entity.wild.peaceful.frog"), ], }, + Spot::Igloo => SpotConfig { + base_structures: Some("spots_general.igloo"), + entity_radius: 2.0, + entities: &[ + (3..5, "common.entity.dungeon.tier-1.spear"), + (3..5, "common.entity.dungeon.tier-1.bow"), + (2..3, "common.entity.dungeon.tier-1.staff"), + ], + }, + Spot::PirateHideout => SpotConfig { + base_structures: Some("spots_general.pirate_hideout"), + entity_radius: 70.0, + entities: &[ + (12..16, "common.entity.spot.pirate"), + (2..4, "common.entity.wild.peaceful.parrot"), + (4..6, "common.entity.wild.peaceful.rat"), + ], + }, Spot::GnarlingTotem => SpotConfig { base_structures: Some("spots_grasslands.gnarling_totem"), entity_radius: 30.0, @@ -357,16 +450,26 @@ pub fn apply_spots_to(canvas: &mut Canvas, _dynamic_rng: &mut impl Rng) { entity_radius: 20.0, entities: &[(5..8, "common.entity.wild.aggressive.lion")], }, + Spot::WolfBurrow => SpotConfig { + base_structures: Some("spots_savannah.wolf_burrow"), + entity_radius: 0.2, + entities: &[(5..8, "common.entity.wild.aggressive.wolf")], + }, Spot::TreeStumpForest => SpotConfig { base_structures: Some("trees.oak_stumps"), entity_radius: 30.0, entities: &[(0..2, "common.entity.wild.aggressive.deadwood")], }, Spot::DesertBones => SpotConfig { - base_structures: Some("trees.quirky_dry"), + base_structures: Some("spots.bones"), entity_radius: 40.0, entities: &[(4..9, "common.entity.wild.aggressive.hyena")], }, + Spot::Arch => SpotConfig { + base_structures: Some("spots.arch"), + entity_radius: 50.0, + entities: &[(2..3, "common.entity.wild.aggressive.ngoubou")], + }, Spot::AirshipCrash => SpotConfig { base_structures: Some("trees.airship_crash"), entity_radius: 20.0, @@ -377,6 +480,11 @@ pub fn apply_spots_to(canvas: &mut Canvas, _dynamic_rng: &mut impl Rng) { entity_radius: 2.0, entities: &[(0..2, "common.entity.wild.peaceful.bear")], }, + Spot::BigMushroom => SpotConfig { + base_structures: Some("spots.big-mushroom"), + entity_radius: 40.0, + entities: &[(7..10, "common.entity.spot.gnome.spear")], + }, Spot::Shipwreck => SpotConfig { base_structures: Some("spots.water.shipwreck"), entity_radius: 2.0,