diff --git a/CHANGELOG.md b/CHANGELOG.md index 85bbf6e562..c387001e17 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,6 +21,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Sneaking with weapons drawn - Stealth stat values on (some) armors - All new dismantling interface found at your nearest dismantling staion +- Wearable headgear, including hood, crown, bandanas ### Changed diff --git a/assets/common/entity/spot/dwarf_grave_robber.ron b/assets/common/entity/spot/dwarf_grave_robber.ron index 48c6f06daa..c9cfb694c2 100644 --- a/assets/common/entity/spot/dwarf_grave_robber.ron +++ b/assets/common/entity/spot/dwarf_grave_robber.ron @@ -3,7 +3,7 @@ EntityConfig ( body: RandomWith("dwarf"), alignment: Alignment(Enemy), - loot: LootTable("common.loot_tables.creature.humanoid"), + loot: LootTable("common.loot_tables.spots.bandit"), hands: TwoHanded(Item("common.items.weapons.hammer.steel_hammer-3")), diff --git a/assets/common/entity/spot/grim_salvager.ron b/assets/common/entity/spot/grim_salvager.ron index 4c599aad84..041151b338 100644 --- a/assets/common/entity/spot/grim_salvager.ron +++ b/assets/common/entity/spot/grim_salvager.ron @@ -3,7 +3,7 @@ EntityConfig ( body: RandomWith("humanoid"), alignment: Alignment(Enemy), - loot: LootTable("common.loot_tables.creature.humanoid"), + loot: LootTable("common.loot_tables.spots.bandit"), hands: TwoHanded(Item("common.items.weapons.hammer.steel_hammer-0")), diff --git a/assets/common/entity/spot/pirate.ron b/assets/common/entity/spot/pirate.ron index 381f06c508..9e449d2bdb 100644 --- a/assets/common/entity/spot/pirate.ron +++ b/assets/common/entity/spot/pirate.ron @@ -1,19 +1,9 @@ EntityConfig ( name: Name("Pirate"), - body: Exact(Humanoid(Body( - species: Human, - body_type: Female, - hair_style: 2, - beard: 0, - eyes: 0, - accessory: 0, - hair_color: 12, - skin: 8, - eye_color: 3, - ))), + body: RandomWith("humanoid"), alignment: Alignment(Enemy), - loot: LootTable("common.loot_tables.creature.biped_large.saurok"), + loot: LootTable("common.loot_tables.spots.pirate"), hands: Paired(Item("common.items.weapons.sword_1h.iron-2")), diff --git a/assets/common/entity/spot/witch_dark.ron b/assets/common/entity/spot/witch_dark.ron index 8b4d39a009..19d3992b32 100644 --- a/assets/common/entity/spot/witch_dark.ron +++ b/assets/common/entity/spot/witch_dark.ron @@ -1,16 +1,6 @@ EntityConfig ( name: Name("Witch"), - body: Exact(Humanoid(Body( - species: Human, - body_type: Female, - hair_style: 15, - beard: 0, - eyes: 0, - accessory: 0, - hair_color: 12, - skin: 0, - eye_color: 1, - ))), + body: RandomWith("humanoid"), alignment: Alignment(Enemy), loot: LootTable("common.loot_tables.spots.witch"), diff --git a/assets/common/items/armor/cultist/bandana.ron b/assets/common/items/armor/cultist/bandana.ron new file mode 100644 index 0000000000..111c15d8de --- /dev/null +++ b/assets/common/items/armor/cultist/bandana.ron @@ -0,0 +1,19 @@ +ItemDef( + name: "Cultist Bandana", + description: "Ceremonial attire used by members.", + kind: Armor(( + kind: Head("Cultist"), + stats: ( + protection: Normal(18.0), + poise_resilience: Normal(3.0), + energy_max: 7.0, + energy_reward: 0.1, + crit_power: 0.06, + stealth: 0.0, + ), + )), + quality: Epic, + tags: [ +Cultist + ], +) diff --git a/assets/common/items/armor/misc/head/bandana/red.ron b/assets/common/items/armor/misc/head/bandana/red.ron new file mode 100644 index 0000000000..63d98343b8 --- /dev/null +++ b/assets/common/items/armor/misc/head/bandana/red.ron @@ -0,0 +1,17 @@ +ItemDef( + name: "Red Bandana", + description: "Very sneaky, but also, bright red.", + kind: Armor(( + kind: Head("Red"), + stats: ( + protection: Normal(0.0), + poise_resilience: Normal(0.0), + energy_max: 0, + energy_reward: 0.0, + crit_power: 0.0, + stealth: 0.15, + ), + )), + quality: Common, + tags: [], +) diff --git a/assets/common/items/armor/misc/head/bandana/thief.ron b/assets/common/items/armor/misc/head/bandana/thief.ron new file mode 100644 index 0000000000..0fda84d087 --- /dev/null +++ b/assets/common/items/armor/misc/head/bandana/thief.ron @@ -0,0 +1,17 @@ +ItemDef( + name: "Thief Bandana", + description: "Common bandit's mask.", + kind: Armor(( + kind: Head("Thief"), + stats: ( + protection: Normal(0.0), + poise_resilience: Normal(0.0), + energy_max: 0, + energy_reward: 0.0, + crit_power: 0.0, + stealth: 0.18, + ), + )), + quality: Common, + tags: [], +) diff --git a/assets/common/items/armor/misc/head/crown.ron b/assets/common/items/armor/misc/head/crown.ron new file mode 100644 index 0000000000..aec605b2a3 --- /dev/null +++ b/assets/common/items/armor/misc/head/crown.ron @@ -0,0 +1,17 @@ +ItemDef( + name: "Crown", + description: "Fit for a king.", + kind: Armor(( + kind: Head("Crown"), + stats: ( + protection: Normal(12.0), + poise_resilience: Normal(0.0), + energy_max: 9.0, + energy_reward: 0.1, + crit_power: 0.12, + stealth: 0.0, + ), + )), + quality: Common, + tags: [], +) diff --git a/assets/common/items/armor/misc/head/headband.ron b/assets/common/items/armor/misc/head/headband.ron new file mode 100644 index 0000000000..6024571501 --- /dev/null +++ b/assets/common/items/armor/misc/head/headband.ron @@ -0,0 +1,17 @@ +ItemDef( + name: "Headband", + description: "yep.", + kind: Armor(( + kind: Head("Headband"), + stats: ( + protection: Normal(0.0), + poise_resilience: Normal(0.0), + energy_max: 0, + energy_reward: 0.0, + crit_power: 0.0, + stealth: 0.0, + ), + )), + quality: Common, + tags: [], +) diff --git a/assets/common/items/armor/misc/head/helmet.ron b/assets/common/items/armor/misc/head/helmet.ron new file mode 100644 index 0000000000..79d40e3194 --- /dev/null +++ b/assets/common/items/armor/misc/head/helmet.ron @@ -0,0 +1,17 @@ +ItemDef( + name: "Helmet", + description: "yep.", + kind: Armor(( + kind: Head("Helmet"), + stats: ( + protection: Normal(0.0), + poise_resilience: Normal(0.0), + energy_max: 0, + energy_reward: 0.0, + crit_power: 0.0, + stealth: 0.0, + ), + )), + quality: Common, + tags: [], +) diff --git a/assets/common/items/armor/misc/head/hood.ron b/assets/common/items/armor/misc/head/hood.ron new file mode 100644 index 0000000000..196d3ed807 --- /dev/null +++ b/assets/common/items/armor/misc/head/hood.ron @@ -0,0 +1,17 @@ +ItemDef( + name: "Hood", + description: "Become one with the treetops.", + kind: Armor(( + kind: Head("Hood"), + stats: ( + protection: Normal(20.0), + poise_resilience: Normal(0.0), + energy_max: 0, + energy_reward: 0.0, + crit_power: 0.0, + stealth: 0.12, + ), + )), + quality: Common, + tags: [], +) diff --git a/assets/common/items/armor/misc/head/hood_dark.ron b/assets/common/items/armor/misc/head/hood_dark.ron new file mode 100644 index 0000000000..beb81878c9 --- /dev/null +++ b/assets/common/items/armor/misc/head/hood_dark.ron @@ -0,0 +1,17 @@ +ItemDef( + name: "Dark Hood", + description: "yep.", + kind: Armor(( + kind: Head("DarkHood"), + stats: ( + protection: Normal(0.0), + poise_resilience: Normal(0.0), + energy_max: 0, + energy_reward: 0.0, + crit_power: 0.0, + stealth: 0.0, + ), + )), + quality: Common, + tags: [], +) diff --git a/assets/common/items/armor/misc/head/mitre.ron b/assets/common/items/armor/misc/head/mitre.ron new file mode 100644 index 0000000000..7d3c3a7963 --- /dev/null +++ b/assets/common/items/armor/misc/head/mitre.ron @@ -0,0 +1,17 @@ +ItemDef( + name: "Mitre", + description: "Calls strength from above.", + kind: Armor(( + kind: Head("Mitre"), + stats: ( + protection: Normal(0.0), + poise_resilience: Normal(0.0), + energy_max: 11.0, + energy_reward: 0.12, + crit_power: 0.1, + stealth: 0.0, + ), + )), + quality: Common, + tags: [], +) diff --git a/assets/common/items/armor/misc/head/spikeguard.ron b/assets/common/items/armor/misc/head/spikeguard.ron new file mode 100644 index 0000000000..329c323a52 --- /dev/null +++ b/assets/common/items/armor/misc/head/spikeguard.ron @@ -0,0 +1,17 @@ +ItemDef( + name: "Spiked Faceguard", + description: "Introvert headgear.", + kind: Armor(( + kind: Head("Spikeguard"), + stats: ( + protection: Normal(0.0), + poise_resilience: Normal(10.0), + energy_max: 0, + energy_reward: 0.0, + crit_power: 0.0, + stealth: 0.0, + ), + )), + quality: Common, + tags: [], +) diff --git a/assets/common/items/armor/misc/head/straw.ron b/assets/common/items/armor/misc/head/straw.ron new file mode 100644 index 0000000000..b55de61781 --- /dev/null +++ b/assets/common/items/armor/misc/head/straw.ron @@ -0,0 +1,17 @@ +ItemDef( + name: "Straw Hat", + description: "Simple and stylish.", + kind: Armor(( + kind: Head("Straw"), + stats: ( + protection: Normal(0.0), + poise_resilience: Normal(0.0), + energy_max: 0, + energy_reward: 0.0, + crit_power: 0.0, + stealth: 0.0, + ), + )), + quality: Common, + tags: [], +) diff --git a/assets/common/items/armor/pirate/hat.ron b/assets/common/items/armor/pirate/hat.ron index 1dafd9addd..58535d64e4 100644 --- a/assets/common/items/armor/pirate/hat.ron +++ b/assets/common/items/armor/pirate/hat.ron @@ -1,14 +1,14 @@ ItemDef( name: "Pirate Hat", - description: "", + description: "It seems like a parrot was perched up here.", kind: Armor(( kind: Head("Pirate"), stats: ( - protection: Normal(32.0), - poise_resilience: Normal(5.0), - energy_max: 9.0, - energy_reward: 0.1, - crit_power: 0.08, + protection: Normal(4.0), + poise_resilience: Normal(1.0), + energy_max: 1.0, + energy_reward: 0.025, + crit_power: 0.02, stealth: 0.0, ), )), diff --git a/assets/common/items/armor/witch/hat.ron b/assets/common/items/armor/witch/hat.ron index 9c07c78e4e..286e2128d4 100644 --- a/assets/common/items/armor/witch/hat.ron +++ b/assets/common/items/armor/witch/hat.ron @@ -1,14 +1,14 @@ ItemDef( - name: "Witch hat", - description: "", + name: "Witch Hat", + description: "Draws strength from dark arts.", kind: Armor(( kind: Head("Witch"), stats: ( - protection: Normal(32.0), - poise_resilience: Normal(5.0), - energy_max: 9.0, - energy_reward: 0.1, - crit_power: 0.08, + protection: Normal(4.0), + poise_resilience: Normal(3.0), + energy_max: 0.0, + energy_reward: 0.08, + crit_power: 0.01, stealth: 0.0, ), )), diff --git a/assets/common/loadout/dungeon/tier-5/cultist.ron b/assets/common/loadout/dungeon/tier-5/cultist.ron index 4634719fee..e96d864080 100644 --- a/assets/common/loadout/dungeon/tier-5/cultist.ron +++ b/assets/common/loadout/dungeon/tier-5/cultist.ron @@ -8,6 +8,8 @@ Armor(Back): Item("common.items.armor.misc.back.dungeon_purple"), + Armor(Head): Item("common.items.armor.cultist.bandana"), + Lantern: Choice([ (1.0, Some(Item("common.items.lantern.black_0"))), (2.0, None), diff --git a/assets/common/loadout/spots/dwarf_graverobber.ron b/assets/common/loadout/spots/dwarf_graverobber.ron index 20fbc4d25d..aab9b883b7 100644 --- a/assets/common/loadout/spots/dwarf_graverobber.ron +++ b/assets/common/loadout/spots/dwarf_graverobber.ron @@ -5,7 +5,11 @@ Armor(Hands): Item("common.items.armor.hide.rawhide.hand"), Armor(Legs): Item("common.items.armor.hide.rawhide.pants"), Armor(Feet): Item("common.items.armor.hide.rawhide.foot"), + Armor(Head): Choice([ + (1.0, Some(Item("common.items.armor.misc.head.bandana.thief"))), + (1.0, Some(Item("common.items.armor.misc.head.bandana.red"))), + ]), Lantern: Choice([ (1.0, Some(Item("common.items.lantern.black_0"))), (2.0, None), diff --git a/assets/common/loadout/village/merchant.ron b/assets/common/loadout/village/merchant.ron index 2f8b2e4cd1..a2a97e41e8 100644 --- a/assets/common/loadout/village/merchant.ron +++ b/assets/common/loadout/village/merchant.ron @@ -5,6 +5,7 @@ Armor(Legs): Item("common.items.armor.twigsflowers.pants"), Armor(Feet): Item("common.items.armor.twigsflowers.foot"), Armor(Belt): Item("common.items.armor.twigsflowers.belt"), + Armor(Head): Item("common.items.armor.misc.head.hood"), Lantern: Item("common.items.lantern.black_0"), Armor(Neck): Item("common.items.armor.misc.neck.gem_of_resilience"), diff --git a/assets/common/loadout/village/villager.ron b/assets/common/loadout/village/villager.ron index 72e88f6be4..2b460e776a 100644 --- a/assets/common/loadout/village/villager.ron +++ b/assets/common/loadout/village/villager.ron @@ -11,4 +11,16 @@ (1.0, Some(Item("common.items.armor.misc.chest.worker_orange_0"))), (1.0, Some(Item("common.items.armor.misc.chest.worker_orange_1"))), ]), + Armor(Legs): Choice([ + (1.0, Some(Item("common.items.armor.misc.pants.worker_blue"))), + (1.0, Some(Item("common.items.armor.misc.pants.worker_brown"))), + ]), + Armor(Feet): Choice([ + (1.0, Some(Item("common.items.armor.misc.foot.sandals"))), + (1.0, Some(Item("common.items.armor.cloth_blue.foot"))), + ]), + Armor(Head): Choice([ + (1.0, Some(Item("common.items.armor.misc.head.spikeguard"))), + + ]), }) diff --git a/assets/common/loot_tables/dungeon/tier-4/chest.ron b/assets/common/loot_tables/dungeon/tier-4/chest.ron index f3c7ab2047..06b6965324 100644 --- a/assets/common/loot_tables/dungeon/tier-4/chest.ron +++ b/assets/common/loot_tables/dungeon/tier-4/chest.ron @@ -2,6 +2,7 @@ // Gear (1.0, LootTable("common.loot_tables.weapons.tier-4")), (1.0, LootTable("common.loot_tables.armor.tier-4")), + (3.0, Item("common.items.armor.misc.head.spikeguard")), // Currency (3.0, ItemQuantity("common.items.utility.coins", 200, 500)), // Materials diff --git a/assets/common/loot_tables/dungeon/tier-4/miniboss.ron b/assets/common/loot_tables/dungeon/tier-4/miniboss.ron index 5bd71fc85f..e384bcaa07 100644 --- a/assets/common/loot_tables/dungeon/tier-4/miniboss.ron +++ b/assets/common/loot_tables/dungeon/tier-4/miniboss.ron @@ -7,4 +7,6 @@ (5.0, LootTable("common.loot_tables.consumable.good")), // lantern (1.0, Item("common.items.lantern.blue_0")), + // gear + (3.0, Item("common.items.armor.misc.head.mitre")), ] diff --git a/assets/common/loot_tables/dungeon/tier-5/chest.ron b/assets/common/loot_tables/dungeon/tier-5/chest.ron index 331c50f82f..457ba90609 100644 --- a/assets/common/loot_tables/dungeon/tier-5/chest.ron +++ b/assets/common/loot_tables/dungeon/tier-5/chest.ron @@ -2,6 +2,7 @@ // Gear (1.0, LootTable("common.loot_tables.weapons.tier-4")), (1.0, LootTable("common.loot_tables.armor.tier-4")), + (0.3, Item("common.items.armor.cultist.bandana")), // Currency (3.0, ItemQuantity("common.items.utility.coins", 200, 500)), // Materials diff --git a/assets/common/loot_tables/spots/bandit.ron b/assets/common/loot_tables/spots/bandit.ron new file mode 100644 index 0000000000..4400ec006c --- /dev/null +++ b/assets/common/loot_tables/spots/bandit.ron @@ -0,0 +1,18 @@ +[ + // Crafting Ingredients + (5.0, LootTable("common.loot_tables.materials.common")), + // Consumables + (0.2, Item("common.items.consumable.potion_minor")), + // Ring + (0.02, Item("common.items.armor.misc.ring.gold")), + // Necklace + (0.02, Item("common.items.armor.misc.neck.gold")), + // Utility + (0.05, Item("common.items.utility.collar")), + // Armor + (0.01, Item("common.items.armor.misc.head.bandana.thief")), + (0.01, Item("common.items.armor.misc.head.bandana.red")), + // Food + (1.0, LootTable("common.loot_tables.food.wild_ingredients")), + (0.25, LootTable("common.loot_tables.food.prepared")), +] \ No newline at end of file diff --git a/assets/common/loot_tables/spots/pirate.ron b/assets/common/loot_tables/spots/pirate.ron new file mode 100644 index 0000000000..231345dc3c --- /dev/null +++ b/assets/common/loot_tables/spots/pirate.ron @@ -0,0 +1,18 @@ +[ + // Crafting Ingredients + (3.0, LootTable("common.loot_tables.materials.common")), + // Consumables + (0.2, Item("common.items.consumable.potion_minor")), + // Ring + (0.02, Item("common.items.armor.misc.ring.gold")), + // Necklace + (0.02, Item("common.items.armor.misc.neck.gold")), + // Utility + (0.05, Item("common.items.utility.collar")), + // Armor + (0.007, Item("common.items.armor.pirate.hat")), + (0.005, Item("common.items.armor.misc.head.crown")), + // Food + (1.0, LootTable("common.loot_tables.food.wild_ingredients")), + (0.25, LootTable("common.loot_tables.food.prepared")), +] \ No newline at end of file diff --git a/assets/common/loot_tables/spots/witch.ron b/assets/common/loot_tables/spots/witch.ron index 117c82b8a3..4cacc46022 100644 --- a/assets/common/loot_tables/spots/witch.ron +++ b/assets/common/loot_tables/spots/witch.ron @@ -5,4 +5,5 @@ (1.0, LootTable("common.loot_tables.weapons.tier-3")), (0.1, LootTable("common.loot_tables.weapons.tier-4")), (1.5, LootTable("common.loot_tables.food.prepared")), + (0.01, Item("common.items.armor.witch.hat")), ] \ No newline at end of file diff --git a/assets/voxygen/item_image_manifest.ron b/assets/voxygen/item_image_manifest.ron index 9d3d8b2c0f..117d8b69f0 100644 --- a/assets/voxygen/item_image_manifest.ron +++ b/assets/voxygen/item_image_manifest.ron @@ -1166,6 +1166,10 @@ "voxel.armor.cultist.shoulder", (0.0, 1.0, 0.0), (-120.0, 210.0,15.0), 1.1, ), + Armor(Head("Cultist")): VoxTrans( + "voxel.armor.cultist.bandana", + (0.0, -2.0, 0.0), (-120.0, 210.0,15.0), 1.9, + ), // Villager Clothing Armor(Pants("WorkerBlue")): VoxTrans( "voxel.armor.misc.pants.worker_blue", @@ -2139,12 +2143,49 @@ ), Armor(Back("Backpack")): VoxTrans( "voxel.armor.misc.back.backpack", - (0.0, 0.0, 0.0), (-120.0, 210.0,15.0), 0.9, + (0.0, 0.0, 0.0), (-75.0, 45.0,0.0), 0.9, ), Armor(Back("BackpackBlue")): VoxTrans( "voxel.armor.misc.back.backpack", (0.0, 0.0, 0.0), (-120.0, 210.0,15.0), 0.9, ), + //Hats + Armor(Head("Witch")): VoxTrans( + "voxel.armor.witch.hat", + (0.0, 0.0, 0.0), (-120.0, 210.0,15.0), 0.9, + ), + Armor(Head("Pirate")): VoxTrans( + "voxel.armor.pirate.hat", + (1.0, 2.0, 0.0), (-120.0, 210.0,15.0), 1.0, + ), + Armor(Head("Thief")): VoxTrans( + "voxel.armor.misc.head.bandana.thief", + (0.0, -2.0, 0.0), (-120.0, 210.0,15.0), 1.9, + ), + Armor(Head("Red")): VoxTrans( + "voxel.armor.misc.head.bandana.red", + (0.0, -2.0, 0.0), (-120.0, 210.0,15.0), 1.9, + ), + Armor(Head("Straw")): VoxTrans( + "voxel.armor.misc.head.straw", + (0.0, 0.0, 0.0), (-120.0, 210.0,15.0), 0.9, + ), + Armor(Head("Hood")): VoxTrans( + "voxel.armor.misc.head.hood", + (0.0, 0.0, 0.0), (-120.0, 210.0,15.0), 1.3, + ), + Armor(Head("Crown")): VoxTrans( + "voxel.armor.misc.head.crown", + (0.0, 4.0, 0.0), (-120.0, 210.0,15.0), 1.3, + ), + Armor(Head("Mitre")): VoxTrans( + "voxel.armor.misc.head.mitre", + (0.0, 4.0, 0.0), (-120.0, 210.0,15.0), 1.3, + ), + Armor(Head("Spikeguard")): VoxTrans( + "voxel.armor.misc.head.spikeguard", + (0.0, 0.0, 0.0), (-120.0, 210.0,15.0), 1.3, + ), // Rings Armor(Ring("Scratched")): VoxTrans( "voxel.armor.misc.ring.scratched", diff --git a/assets/voxygen/voxel/armor/cultist/bandana.vox b/assets/voxygen/voxel/armor/cultist/bandana.vox new file mode 100644 index 0000000000..019f8f86bd Binary files /dev/null and b/assets/voxygen/voxel/armor/cultist/bandana.vox differ diff --git a/assets/voxygen/voxel/armor/misc/head/bandana/red.vox b/assets/voxygen/voxel/armor/misc/head/bandana/red.vox new file mode 100644 index 0000000000..6247ab04de Binary files /dev/null and b/assets/voxygen/voxel/armor/misc/head/bandana/red.vox differ diff --git a/assets/voxygen/voxel/armor/misc/head/bandana/thief.vox b/assets/voxygen/voxel/armor/misc/head/bandana/thief.vox new file mode 100644 index 0000000000..1cdfe57a7d Binary files /dev/null and b/assets/voxygen/voxel/armor/misc/head/bandana/thief.vox differ diff --git a/assets/voxygen/voxel/armor/misc/head/crown.vox b/assets/voxygen/voxel/armor/misc/head/crown.vox new file mode 100644 index 0000000000..8b8977b996 Binary files /dev/null and b/assets/voxygen/voxel/armor/misc/head/crown.vox differ diff --git a/assets/voxygen/voxel/armor/misc/head/headband/danari_f.vox b/assets/voxygen/voxel/armor/misc/head/headband/danari_f.vox new file mode 100644 index 0000000000..9586c7f63c Binary files /dev/null and b/assets/voxygen/voxel/armor/misc/head/headband/danari_f.vox differ diff --git a/assets/voxygen/voxel/armor/misc/head/headband/danari_m.vox b/assets/voxygen/voxel/armor/misc/head/headband/danari_m.vox new file mode 100644 index 0000000000..28c453aabc Binary files /dev/null and b/assets/voxygen/voxel/armor/misc/head/headband/danari_m.vox differ diff --git a/assets/voxygen/voxel/armor/misc/head/headband/dwarf_f.vox b/assets/voxygen/voxel/armor/misc/head/headband/dwarf_f.vox new file mode 100644 index 0000000000..a4ab558dba Binary files /dev/null and b/assets/voxygen/voxel/armor/misc/head/headband/dwarf_f.vox differ diff --git a/assets/voxygen/voxel/armor/misc/head/headband/dwarf_m.vox b/assets/voxygen/voxel/armor/misc/head/headband/dwarf_m.vox new file mode 100644 index 0000000000..3aeea80102 Binary files /dev/null and b/assets/voxygen/voxel/armor/misc/head/headband/dwarf_m.vox differ diff --git a/assets/voxygen/voxel/armor/misc/head/headband/elf_f.vox b/assets/voxygen/voxel/armor/misc/head/headband/elf_f.vox new file mode 100644 index 0000000000..4792f1545d Binary files /dev/null and b/assets/voxygen/voxel/armor/misc/head/headband/elf_f.vox differ diff --git a/assets/voxygen/voxel/armor/misc/head/headband/elf_m.vox b/assets/voxygen/voxel/armor/misc/head/headband/elf_m.vox new file mode 100644 index 0000000000..8542ccf879 Binary files /dev/null and b/assets/voxygen/voxel/armor/misc/head/headband/elf_m.vox differ diff --git a/assets/voxygen/voxel/armor/misc/head/headband/human_f.vox b/assets/voxygen/voxel/armor/misc/head/headband/human_f.vox new file mode 100644 index 0000000000..05d9c16656 Binary files /dev/null and b/assets/voxygen/voxel/armor/misc/head/headband/human_f.vox differ diff --git a/assets/voxygen/voxel/armor/misc/head/headband/human_m.vox b/assets/voxygen/voxel/armor/misc/head/headband/human_m.vox new file mode 100644 index 0000000000..a82a84ca1f Binary files /dev/null and b/assets/voxygen/voxel/armor/misc/head/headband/human_m.vox differ diff --git a/assets/voxygen/voxel/armor/misc/head/headband/orc_f.vox b/assets/voxygen/voxel/armor/misc/head/headband/orc_f.vox new file mode 100644 index 0000000000..620fe21975 Binary files /dev/null and b/assets/voxygen/voxel/armor/misc/head/headband/orc_f.vox differ diff --git a/assets/voxygen/voxel/armor/misc/head/headband/orc_m.vox b/assets/voxygen/voxel/armor/misc/head/headband/orc_m.vox new file mode 100644 index 0000000000..1b7730ec70 Binary files /dev/null and b/assets/voxygen/voxel/armor/misc/head/headband/orc_m.vox differ diff --git a/assets/voxygen/voxel/armor/misc/head/headband/undead_f.vox b/assets/voxygen/voxel/armor/misc/head/headband/undead_f.vox new file mode 100644 index 0000000000..5c1971a47c Binary files /dev/null and b/assets/voxygen/voxel/armor/misc/head/headband/undead_f.vox differ diff --git a/assets/voxygen/voxel/armor/misc/head/headband/undead_m.vox b/assets/voxygen/voxel/armor/misc/head/headband/undead_m.vox new file mode 100644 index 0000000000..8f91d7c5ac Binary files /dev/null and b/assets/voxygen/voxel/armor/misc/head/headband/undead_m.vox differ diff --git a/assets/voxygen/voxel/armor/misc/head/helmet.vox b/assets/voxygen/voxel/armor/misc/head/helmet.vox new file mode 100644 index 0000000000..9b28f45889 Binary files /dev/null and b/assets/voxygen/voxel/armor/misc/head/helmet.vox differ diff --git a/assets/voxygen/voxel/armor/misc/head/hood.vox b/assets/voxygen/voxel/armor/misc/head/hood.vox new file mode 100644 index 0000000000..e918f8e71b Binary files /dev/null and b/assets/voxygen/voxel/armor/misc/head/hood.vox differ diff --git a/assets/voxygen/voxel/armor/misc/head/hood_dark.vox b/assets/voxygen/voxel/armor/misc/head/hood_dark.vox new file mode 100644 index 0000000000..f6561cc48d Binary files /dev/null and b/assets/voxygen/voxel/armor/misc/head/hood_dark.vox differ diff --git a/assets/voxygen/voxel/armor/misc/head/mitre.vox b/assets/voxygen/voxel/armor/misc/head/mitre.vox new file mode 100644 index 0000000000..647d75fcef Binary files /dev/null and b/assets/voxygen/voxel/armor/misc/head/mitre.vox differ diff --git a/assets/voxygen/voxel/armor/misc/head/spikeguard.vox b/assets/voxygen/voxel/armor/misc/head/spikeguard.vox new file mode 100644 index 0000000000..de5a6993c4 Binary files /dev/null and b/assets/voxygen/voxel/armor/misc/head/spikeguard.vox differ diff --git a/assets/voxygen/voxel/armor/misc/head/straw.vox b/assets/voxygen/voxel/armor/misc/head/straw.vox new file mode 100644 index 0000000000..5603ddd411 Binary files /dev/null and b/assets/voxygen/voxel/armor/misc/head/straw.vox differ diff --git a/assets/voxygen/voxel/armor/pirate/hat.vox b/assets/voxygen/voxel/armor/pirate/hat.vox index e0e802f277..dd199052dc 100644 Binary files a/assets/voxygen/voxel/armor/pirate/hat.vox and b/assets/voxygen/voxel/armor/pirate/hat.vox differ diff --git a/assets/voxygen/voxel/armor/witch/hat.vox b/assets/voxygen/voxel/armor/witch/hat.vox index 1c457bd635..4491a21794 100644 Binary files a/assets/voxygen/voxel/armor/witch/hat.vox and b/assets/voxygen/voxel/armor/witch/hat.vox differ diff --git a/assets/voxygen/voxel/humanoid_armor_head_manifest.ron b/assets/voxygen/voxel/humanoid_armor_head_manifest.ron index 1c7d876a40..2f8ecce6a3 100644 --- a/assets/voxygen/voxel/humanoid_armor_head_manifest.ron +++ b/assets/voxygen/voxel/humanoid_armor_head_manifest.ron @@ -4,36 +4,665 @@ color: None ), map: { - (Danari, "Exclamation"): ( + (Danari, Male, "Exclamation"): ( vox_spec: ("armor.misc.head.exclamation", (-10.0, -10.0, 20.0)), color: None ), - (Dwarf, "Exclamation"): ( + (Dwarf, Male, "Exclamation"): ( vox_spec: ("armor.misc.head.exclamation", (-13.0, -10.0, 18.0)), color: None ), - (Human, "Exclamation"): ( + (Human, Male, "Exclamation"): ( vox_spec: ("armor.misc.head.exclamation", (-12.0, -11.0, 18.0)), color: None ), - (Orc, "Exclamation"): ( + (Orc, Male, "Exclamation"): ( vox_spec: ("armor.misc.head.exclamation", (-11.0, -12.0, 18.0)), color: None ), - (Undead, "Exclamation"): ( + (Undead, Male, "Exclamation"): ( vox_spec: ("armor.misc.head.exclamation", (-14.0, -11.0, 18.0)), color: None - ), - (Elf, "Exclamation"): ( + ),//fix + (Elf, Male, "Exclamation"): ( vox_spec: ("armor.misc.head.exclamation", (-11.0, -11.0, 18.0)), color: None ), - (Human, "Witch"): ( - vox_spec: ("armor.witch.hat", (-4.0, -4.0, 5.0)), + // + (Human, Male, "Witch"): ( + vox_spec: ("armor.witch.hat", (-4.0, -5.0, 5.0)), color: None ), - (Human, "Pirate"): ( - vox_spec: ("armor.pirate.hat", (-2.0, -2.0, 5.0)), + (Human, Female, "Witch"): ( + vox_spec: ("armor.witch.hat", (-4.0, -5.0, 5.0)), + color: None + ), + (Elf, Male, "Witch"): ( + vox_spec: ("armor.witch.hat", (-3.0, -5.0, 5.0)), + color: None + ), + (Elf, Female, "Witch"): ( + vox_spec: ("armor.witch.hat", (-3.0, -6.0, 5.0)), + color: None + ), + (Dwarf, Male, "Witch"): ( + vox_spec: ("armor.witch.hat", (-5.0, -4.0, 5.0)), + color: None + ), + (Dwarf, Female, "Witch"): ( + vox_spec: ("armor.witch.hat", (-5.0, -4.0, 5.0)), + color: None + ), + (Danari, Male, "Witch"): ( + vox_spec: ("armor.witch.hat", (-2.0, -5.0, 7.0)), + color: None + ), + (Danari, Female, "Witch"): ( + vox_spec: ("armor.witch.hat", (-2.0, -5.0, 7.0)), + color: None + ), + (Undead, Male, "Witch"): ( + vox_spec: ("armor.witch.hat", (-6.0, -5.0, 7.0)), + color: None + ), + (Undead, Female, "Witch"): ( + vox_spec: ("armor.witch.hat", (-6.0, -5.0, 6.0)), + color: None + ), + (Orc, Male, "Witch"): ( + vox_spec: ("armor.witch.hat", (-3.0, -3.0, 8.0)), + color: None + ), + (Orc, Female, "Witch"): ( + vox_spec: ("armor.witch.hat", (-3.0, -6.0, 5.0)), + color: None + ), + // + (Human, Male, "Pirate"): ( + vox_spec: ("armor.pirate.hat", (-4.0, -4.0, 5.0)), + color: None + ), + (Human, Female, "Pirate"): ( + vox_spec: ("armor.pirate.hat", (-4.0, -4.0, 5.0)), + color: None + ), + (Elf, Male, "Pirate"): ( + vox_spec: ("armor.pirate.hat", (-3.0, -4.0, 5.0)), + color: None + ), + (Elf, Female, "Pirate"): ( + vox_spec: ("armor.pirate.hat", (-3.0, -5.0, 5.0)), + color: None + ), + (Dwarf, Male, "Pirate"): ( + vox_spec: ("armor.pirate.hat", (-5.0, -3.0, 5.0)), + color: None + ), + (Dwarf, Female, "Pirate"): ( + vox_spec: ("armor.pirate.hat", (-5.0, -3.0, 5.0)), + color: None + ), + (Danari, Male, "Pirate"): ( + vox_spec: ("armor.pirate.hat", (-2.0, -4.0, 7.0)), + color: None + ), + (Danari, Female, "Pirate"): ( + vox_spec: ("armor.pirate.hat", (-2.0, -4.0, 7.0)), + color: None + ), + (Undead, Male, "Pirate"): ( + vox_spec: ("armor.pirate.hat", (-6.0, -4.0, 7.0)), + color: None + ), + (Undead, Female, "Pirate"): ( + vox_spec: ("armor.pirate.hat", (-6.0, -4.0, 6.0)), + color: None + ), + (Orc, Male, "Pirate"): ( + vox_spec: ("armor.pirate.hat", (-3.0, -2.0, 8.0)), + color: None + ), + (Orc, Female, "Pirate"): ( + vox_spec: ("armor.pirate.hat", (-3.0, -5.0, 5.0)), + color: None + ), + // + (Human, Male, "Straw"): ( + vox_spec: ("armor.misc.head.straw", (-4.0, -5.0, 5.0)), + color: None + ), + (Human, Female, "Straw"): ( + vox_spec: ("armor.misc.head.straw", (-4.0, -5.0, 5.0)), + color: None + ), + (Elf, Male, "Straw"): ( + vox_spec: ("armor.misc.head.straw", (-3.0, -5.0, 5.0)), + color: None + ), + (Elf, Female, "Straw"): ( + vox_spec: ("armor.misc.head.straw", (-3.0, -6.0, 5.0)), + color: None + ), + (Dwarf, Male, "Straw"): ( + vox_spec: ("armor.misc.head.straw", (-5.0, -4.0, 5.0)), + color: None + ), + (Dwarf, Female, "Straw"): ( + vox_spec: ("armor.misc.head.straw", (-5.0, -4.0, 5.0)), + color: None + ), + (Danari, Male, "Straw"): ( + vox_spec: ("armor.misc.head.straw", (-2.0, -5.0, 7.0)), + color: None + ), + (Danari, Female, "Straw"): ( + vox_spec: ("armor.misc.head.straw", (-2.0, -5.0, 7.0)), + color: None + ), + (Undead, Male, "Straw"): ( + vox_spec: ("armor.misc.head.straw", (-6.0, -5.0, 7.0)), + color: None + ), + (Undead, Female, "Straw"): ( + vox_spec: ("armor.misc.head.straw", (-6.0, -5.0, 6.0)), + color: None + ), + (Orc, Male, "Straw"): ( + vox_spec: ("armor.misc.head.straw", (-3.0, -3.0, 8.0)), + color: None + ), + (Orc, Female, "Straw"): ( + vox_spec: ("armor.misc.head.straw", (-3.0, -6.0, 5.0)), + color: None + ), + // + (Human, Male, "Crown"): ( + vox_spec: ("armor.misc.head.crown", (-4.0, -5.0, 5.0)), + color: None + ), + (Human, Female, "Crown"): ( + vox_spec: ("armor.misc.head.crown", (-4.0, -5.0, 5.0)), + color: None + ), + (Elf, Male, "Crown"): ( + vox_spec: ("armor.misc.head.crown", (-3.0, -5.0, 5.0)), + color: None + ), + (Elf, Female, "Crown"): ( + vox_spec: ("armor.misc.head.crown", (-3.0, -6.0, 5.0)), + color: None + ), + (Dwarf, Male, "Crown"): ( + vox_spec: ("armor.misc.head.crown", (-5.0, -4.0, 5.0)), + color: None + ), + (Dwarf, Female, "Crown"): ( + vox_spec: ("armor.misc.head.crown", (-5.0, -4.0, 5.0)), + color: None + ), + (Danari, Male, "Crown"): ( + vox_spec: ("armor.misc.head.crown", (-2.0, -5.0, 7.0)), + color: None + ), + (Danari, Female, "Crown"): ( + vox_spec: ("armor.misc.head.crown", (-2.0, -5.0, 7.0)), + color: None + ), + (Undead, Male, "Crown"): ( + vox_spec: ("armor.misc.head.crown", (-6.0, -5.0, 7.0)), + color: None + ), + (Undead, Female, "Crown"): ( + vox_spec: ("armor.misc.head.crown", (-6.0, -5.0, 6.0)), + color: None + ), + (Orc, Male, "Crown"): ( + vox_spec: ("armor.misc.head.crown", (-3.0, -3.0, 8.0)), + color: None + ), + (Orc, Female, "Crown"): ( + vox_spec: ("armor.misc.head.crown", (-3.0, -6.0, 5.0)), + color: None + ), + // + (Human, Male, "Mitre"): ( + vox_spec: ("armor.misc.head.mitre", (-4.0, -5.0, 5.0)), + color: None + ), + (Human, Female, "Mitre"): ( + vox_spec: ("armor.misc.head.mitre", (-4.0, -5.0, 5.0)), + color: None + ), + (Elf, Male, "Mitre"): ( + vox_spec: ("armor.misc.head.mitre", (-3.0, -5.0, 5.0)), + color: None + ), + (Elf, Female, "Mitre"): ( + vox_spec: ("armor.misc.head.mitre", (-3.0, -6.0, 5.0)), + color: None + ), + (Dwarf, Male, "Mitre"): ( + vox_spec: ("armor.misc.head.mitre", (-5.0, -4.0, 5.0)), + color: None + ), + (Dwarf, Female, "Mitre"): ( + vox_spec: ("armor.misc.head.mitre", (-5.0, -4.0, 5.0)), + color: None + ), + (Danari, Male, "Mitre"): ( + vox_spec: ("armor.misc.head.mitre", (-2.0, -5.0, 7.0)), + color: None + ), + (Danari, Female, "Mitre"): ( + vox_spec: ("armor.misc.head.mitre", (-2.0, -5.0, 7.0)), + color: None + ), + (Undead, Male, "Mitre"): ( + vox_spec: ("armor.misc.head.mitre", (-6.0, -5.0, 7.0)), + color: None + ), + (Undead, Female, "Mitre"): ( + vox_spec: ("armor.misc.head.mitre", (-6.0, -5.0, 6.0)), + color: None + ), + (Orc, Male, "Mitre"): ( + vox_spec: ("armor.misc.head.mitre", (-3.0, -3.0, 8.0)), + color: None + ), + (Orc, Female, "Mitre"): ( + vox_spec: ("armor.misc.head.mitre", (-3.0, -6.0, 5.0)), + color: None + ), + // + (Danari, Male, "Headband"): ( + vox_spec: ("armor.misc.head.headband.danari_m", (4.0, 2.0, 7.0)), + color: None + ), + (Danari, Female, "Headband"): ( + vox_spec: ("armor.misc.head.headband.danari_f", (4.0, 2.0, 7.0)), + color: None + ), + (Dwarf, Male, "Headband"): ( + vox_spec: ("armor.misc.head.headband.dwarf_m", (2.0, 3.0, 6.0)), + color: None + ), + (Dwarf, Female, "Headband"): ( + vox_spec: ("armor.misc.head.headband.dwarf_f", (2.0, 3.0, 5.0)), + color: None + ), + (Human, Male, "Headband"): ( + vox_spec: ("armor.misc.head.headband.human_m", (2.0, 2.0, 5.0)), + color: None + ), + (Human, Female, "Headband"): ( + vox_spec: ("armor.misc.head.headband.human_f", (2.0, 3.0, 5.0)), + color: None + ), + (Orc, Male, "Headband"): ( + vox_spec: ("armor.misc.head.headband.orc_m", (4.0, 3.0, 7.0)), + color: None + ), + (Orc, Female, "Headband"): ( + vox_spec: ("armor.misc.head.headband.orc_f", (3.0, 1.0, 5.0)), + color: None + ), + (Undead, Male, "Headband"): ( + vox_spec: ("armor.misc.head.headband.undead_m", (0.0, 2.0, 7.0)), + color: Some((44, 74, 109)) + ), + (Undead, Female, "Headband"): ( + vox_spec: ("armor.misc.head.headband.undead_f", (0.0, 2.0, 6.0)), + color: None + ), + (Elf, Male, "Headband"): ( + vox_spec: ("armor.misc.head.headband.elf_m", (3.0, 2.0, 5.0)), + color: None + ), + (Elf, Female, "Headband"): ( + vox_spec: ("armor.misc.head.headband.elf_f", (3.0, 2.0, 5.0)), + color: None + ), + // + (Human, Female, "Helmet"): ( + vox_spec: ("armor.misc.head.helmet", (-4.0, -5.0, -1.0)), + color: None + ), + (Human, Male, "Helmet"): ( + vox_spec: ("armor.misc.head.helmet", (-4.0, -5.0, -1.0)), + color: None + ), + (Elf, Female, "Helmet"): ( + vox_spec: ("armor.misc.head.helmet", (-3.0, -5.0, -1.0)), + color: None + ), + (Elf, Male, "Helmet"): ( + vox_spec: ("armor.misc.head.helmet", (-3.0, -5.0, -1.0)), + color: None + ), + (Orc, Female, "Helmet"): ( + vox_spec: ("armor.misc.head.helmet", (-3.0, -3.0, -1.0)), + color: None + ), + (Orc, Male, "Helmet"): ( + vox_spec: ("armor.misc.head.helmet", (-3.0, -6.0, 2.0)), + color: None + ), + (Dwarf, Female, "Helmet"): ( + vox_spec: ("armor.misc.head.helmet", (-5.0, -4.0, -1.0)), + color: None + ), + (Dwarf, Male, "Helmet"): ( + vox_spec: ("armor.misc.head.helmet", (-3.0, -3.0, -1.0)), + color: None + ), + (Undead, Female, "Helmet"): ( + vox_spec: ("armor.misc.head.helmet", (-6.0, -5.0, -1.0)), + color: None + ), + (Undead, Male, "Helmet"): ( + vox_spec: ("armor.misc.head.helmet", (-6.0, -5.0, 1.0)), + color: None + ), + (Danari, Female, "Helmet"): ( + vox_spec: ("armor.misc.head.helmet", (-2.0, -5.0, 1.0)), + color: None + ), + (Danari, Male, "Helmet"): ( + vox_spec: ("armor.misc.head.helmet", (-2.0, -5.0, -1.0)), + color: None + ), + // + (Danari, Male, "Red"): ( + vox_spec: ("armor.misc.head.bandana.red", (-2.0, -2.0, -8.0)), + color: None + ), + (Danari, Female, "Red"): ( + vox_spec: ("armor.misc.head.bandana.red", (-2.0, -2.0, -8.0)), + color: None + ), + (Dwarf, Male, "Red"): ( + vox_spec: ("armor.misc.head.bandana.red", (-5.0, -1.0, -10.0)), + color: None + ), + (Dwarf, Female, "Red"): ( + vox_spec: ("armor.misc.head.bandana.red", (-5.0, -1.0, -10.0)), + color: None + ), + (Human, Male, "Red"): ( + vox_spec: ("armor.misc.head.bandana.red", (-4.0, -2.0, -10.0)), + color: None + ), + (Human, Female, "Red"): ( + vox_spec: ("armor.misc.head.bandana.red", (-4.0, -2.0, -10.0)), + color: None + ), + (Undead, Male, "Red"): ( + vox_spec: ("armor.misc.head.bandana.red", (-6.0, -2.0, -8.0)), + color: None + ), + (Undead, Female, "Red"): ( + vox_spec: ("armor.misc.head.bandana.red", (-6.0, -2.0, -9.0)), + color: None + ), + (Elf, Male, "Red"): ( + vox_spec: ("armor.misc.head.bandana.red", (-3.0, -2.0, -10.0)), + color: None + ), + (Elf, Female, "Red"): ( + vox_spec: ("armor.misc.head.bandana.red", (-3.0, -2.0, -10.0)), + color: None + ), + (Orc, Male, "Red"): ( + vox_spec: ("armor.misc.head.bandana.red", (-3.0, 0.0, -8.0)), + color: None + ), + (Orc, Female, "Red"): ( + vox_spec: ("armor.misc.head.bandana.red", (-3.0, -3.0, -10.0)), + color: None + ), + // + (Danari, Male, "Thief"): ( + vox_spec: ("armor.misc.head.bandana.thief", (-2.0, -2.0, -8.0)), + color: None + ), + (Danari, Female, "Thief"): ( + vox_spec: ("armor.misc.head.bandana.thief", (-2.0, -2.0, -8.0)), + color: None + ), + (Dwarf, Male, "Thief"): ( + vox_spec: ("armor.misc.head.bandana.thief", (-5.0, -1.0, -10.0)), + color: None + ), + (Dwarf, Female, "Thief"): ( + vox_spec: ("armor.misc.head.bandana.thief", (-5.0, -1.0, -10.0)), + color: None + ), + (Human, Male, "Thief"): ( + vox_spec: ("armor.misc.head.bandana.thief", (-4.0, -2.0, -10.0)), + color: None + ), + (Human, Female, "Thief"): ( + vox_spec: ("armor.misc.head.bandana.thief", (-4.0, -2.0, -10.0)), + color: None + ), + (Undead, Male, "Thief"): ( + vox_spec: ("armor.misc.head.bandana.thief", (-6.0, -2.0, -8.0)), + color: None + ), + (Undead, Female, "Thief"): ( + vox_spec: ("armor.misc.head.bandana.thief", (-6.0, -2.0, -9.0)), + color: None + ), + (Elf, Male, "Thief"): ( + vox_spec: ("armor.misc.head.bandana.thief", (-3.0, -2.0, -10.0)), + color: None + ), + (Elf, Female, "Thief"): ( + vox_spec: ("armor.misc.head.bandana.thief", (-3.0, -2.0, -10.0)), + color: None + ), + (Orc, Male, "Thief"): ( + vox_spec: ("armor.misc.head.bandana.thief", (-3.0, 0.0, -8.0)), + color: None + ), + (Orc, Female, "Thief"): ( + vox_spec: ("armor.misc.head.bandana.thief", (-3.0, -3.0, -10.0)), + color: None + ), +// + (Danari, Male, "Cultist"): ( + vox_spec: ("armor.cultist.bandana", (-2.0, -2.0, -8.0)), + color: None + ), + (Danari, Female, "Cultist"): ( + vox_spec: ("armor.cultist.bandana", (-2.0, -2.0, -8.0)), + color: None + ), + (Dwarf, Male, "Cultist"): ( + vox_spec: ("armor.cultist.bandana", (-5.0, -1.0, -10.0)), + color: None + ), + (Dwarf, Female, "Cultist"): ( + vox_spec: ("armor.cultist.bandana", (-5.0, -1.0, -10.0)), + color: None + ), + (Human, Male, "Cultist"): ( + vox_spec: ("armor.cultist.bandana", (-4.0, -2.0, -11.0)), + color: None + ), + (Human, Female, "Cultist"): ( + vox_spec: ("armor.cultist.bandana", (-4.0, -2.0, -10.0)), + color: None + ), + (Undead, Male, "Cultist"): ( + vox_spec: ("armor.cultist.bandana", (-6.0, -2.0, -8.0)), + color: None + ), + (Undead, Female, "Cultist"): ( + vox_spec: ("armor.cultist.bandana", (-6.0, -2.0, -9.0)), + color: None + ), + (Elf, Male, "Cultist"): ( + vox_spec: ("armor.cultist.bandana", (-3.0, -2.0, -10.0)), + color: None + ), + (Elf, Female, "Cultist"): ( + vox_spec: ("armor.cultist.bandana", (-3.0, -2.0, -10.0)), + color: None + ), + (Orc, Male, "Cultist"): ( + vox_spec: ("armor.cultist.bandana", (-3.0, 0.0, -8.0)), + color: None + ), + (Orc, Female, "Cultist"): ( + vox_spec: ("armor.cultist.bandana", (-3.0, -3.0, -10.0)), + color: None + ), + // + (Human, Male, "Hood"): ( + vox_spec: ("armor.misc.head.hood", (-4.0, -6.0, -4.0)), + color: None + ), + (Human, Female, "Hood"): ( + vox_spec: ("armor.misc.head.hood", (-4.0, -6.0, -4.0)), + color: None + ), + (Elf, Male, "Hood"): ( + vox_spec: ("armor.misc.head.hood", (-3.0, -6.0, -4.0)), + color: None + ), + (Elf, Female, "Hood"): ( + vox_spec: ("armor.misc.head.hood", (-3.0, -7.0, -4.0)), + color: None + ), + (Dwarf, Male, "Hood"): ( + vox_spec: ("armor.misc.head.hood", (-5.0, -5.0, -4.0)), + color: None + ), + (Dwarf, Female, "Hood"): ( + vox_spec: ("armor.misc.head.hood", (-5.0, -5.0, -4.0)), + color: None + ), + (Danari, Male, "Hood"): ( + vox_spec: ("armor.misc.head.hood", (-2.0, -6.0, -2.0)), + color: None + ), + (Danari, Female, "Hood"): ( + vox_spec: ("armor.misc.head.hood", (-2.0, -6.0, -2.0)), + color: None + ), + (Undead, Male, "Hood"): ( + vox_spec: ("armor.misc.head.hood", (-6.0, -6.0, -2.0)), + color: None + ), + (Undead, Female, "Hood"): ( + vox_spec: ("armor.misc.head.hood", (-6.0, -6.0, -3.0)), + color: None + ), + (Orc, Male, "Hood"): ( + vox_spec: ("armor.misc.head.hood", (-3.0, -5.0, -2.0)), + color: None + ), + (Orc, Female, "Hood"): ( + vox_spec: ("armor.misc.head.hood", (-3.0, -7.0, -4.0)), + color: None + ), + // + (Human, Male, "DarkHood"): ( + vox_spec: ("armor.misc.head.hood_dark", (-4.0, -4.0, -1.0)), + color: None + ), + (Human, Female, "DarkHood"): ( + vox_spec: ("armor.misc.head.hood_dark", (-4.0, -4.0, -1.0)), + color: None + ), + (Elf, Male, "DarkHood"): ( + vox_spec: ("armor.misc.head.hood_dark", (-3.0, -4.0, -1.0)), + color: None + ), + (Elf, Female, "DarkHood"): ( + vox_spec: ("armor.misc.head.hood_dark", (-3.0, -5.0, -1.0)), + color: None + ), + (Dwarf, Male, "DarkHood"): ( + vox_spec: ("armor.misc.head.hood_dark", (-5.0, -3.0, -1.0)), + color: None + ), + (Dwarf, Female, "DarkHood"): ( + vox_spec: ("armor.misc.head.hood_dark", (-5.0, -3.0, -1.0)), + color: None + ), + (Danari, Male, "DarkHood"): ( + vox_spec: ("armor.misc.head.hood_dark", (-2.0, -4.0, 1.0)), + color: None + ), + (Danari, Female, "DarkHood"): ( + vox_spec: ("armor.misc.head.hood_dark", (-2.0, -4.0, 1.0)), + color: None + ), + (Undead, Male, "DarkHood"): ( + vox_spec: ("armor.misc.head.hood_dark", (-6.0, -4.0, 1.0)), + color: None + ), + (Undead, Female, "DarkHood"): ( + vox_spec: ("armor.misc.head.hood_dark", (-6.0, -4.0, -0.0)), + color: None + ), + (Orc, Male, "DarkHood"): ( + vox_spec: ("armor.misc.head.hood_dark", (-3.0, -2.0, 1.0)), + color: None + ), + (Orc, Female, "DarkHood"): ( + vox_spec: ("armor.misc.head.hood_dark", (-3.0, -5.0, -1.0)), + color: None + ), + // + (Human, Male, "Spikeguard"): ( + vox_spec: ("armor.misc.head.spikeguard", (-4.0, -4.0, -2.0)), + color: None + ), + (Human, Female, "Spikeguard"): ( + vox_spec: ("armor.misc.head.spikeguard", (-4.0, -4.0, -2.0)), + color: None + ), + (Elf, Male, "Spikeguard"): ( + vox_spec: ("armor.misc.head.spikeguard", (-3.0, -4.0, -2.0)), + color: None + ), + (Elf, Female, "Spikeguard"): ( + vox_spec: ("armor.misc.head.spikeguard", (-3.0, -5.0, -2.0)), + color: None + ), + (Dwarf, Male, "Spikeguard"): ( + vox_spec: ("armor.misc.head.spikeguard", (-5.0, -3.0, -2.0)), + color: None + ), + (Dwarf, Female, "Spikeguard"): ( + vox_spec: ("armor.misc.head.spikeguard", (-5.0, -3.0, -2.0)), + color: None + ), + (Danari, Male, "Spikeguard"): ( + vox_spec: ("armor.misc.head.spikeguard", (-2.0, -4.0, -0.0)), + color: None + ), + (Danari, Female, "Spikeguard"): ( + vox_spec: ("armor.misc.head.spikeguard", (-2.0, -4.0, -0.0)), + color: None + ), + (Undead, Male, "Spikeguard"): ( + vox_spec: ("armor.misc.head.spikeguard", (-6.0, -4.0, -0.0)), + color: None + ), + (Undead, Female, "Spikeguard"): ( + vox_spec: ("armor.misc.head.spikeguard", (-6.0, -4.0, -1.0)), + color: None + ), + (Orc, Male, "Spikeguard"): ( + vox_spec: ("armor.misc.head.spikeguard", (-3.0, -2.0, -0.0)), + color: None + ), + (Orc, Female, "Spikeguard"): ( + vox_spec: ("armor.misc.head.spikeguard", (-3.0, -5.0, -2.0)), color: None ), } diff --git a/assets/voxygen/voxel/humanoid_head_manifest.ron b/assets/voxygen/voxel/humanoid_head_manifest.ron index 05956dce02..47c00b6117 100644 --- a/assets/voxygen/voxel/humanoid_head_manifest.ron +++ b/assets/voxygen/voxel/humanoid_head_manifest.ron @@ -1,6 +1,6 @@ ({ (Human, Male): ( - offset: (-7.0, -4.0, -2.0), + offset: (-7.0, -2.5, -2.0), head: ("figure.head.human.male", (0, 2, 0)), eyes: [ Some(("figure.eyes.general.male_default-0", (3, 9, 2))), @@ -142,7 +142,7 @@ ], ), (Elf, Male): ( - offset: (-8.0, -4.0, -2.0), + offset: (-8.0, -2.5, -2.0), head: ("figure.head.elf.male", (0, 2, 0)), eyes: [ Some(("figure.eyes.general.male_default-0", (4, 9, 2))), @@ -290,7 +290,7 @@ ] ), (Undead, Male): ( - offset: (-5.0, -4.0, -2.0), + offset: (-5.0, -4.0, -1.5), head: ("figure.head.undead.male", (0, 2, 0)), eyes: [ Some(("figure.eyes.undead.male-0", (2, 8, 4))), diff --git a/common/src/figure/cell.rs b/common/src/figure/cell.rs index 2cb7ad6e4c..0cc010e25a 100644 --- a/common/src/figure/cell.rs +++ b/common/src/figure/cell.rs @@ -5,24 +5,30 @@ use vek::*; const GLOWY: u8 = 1 << 1; const SHINY: u8 = 1 << 2; +const HOLLOW: u8 = 1 << 3; #[derive(Copy, Clone, Debug, PartialEq, Eq)] pub struct CellData { pub col: Rgb, - pub attr: NonZeroU8, // 1 = glowy, 2 = shiny + pub attr: NonZeroU8, // 1 = glowy, 2 = shiny, 3 = hollow } impl CellData { - pub(super) fn new(col: Rgb, glowy: bool, shiny: bool) -> Self { + pub(super) fn new(col: Rgb, glowy: bool, shiny: bool, hollow: bool) -> Self { CellData { col, - attr: NonZeroU8::new(1 + glowy as u8 * GLOWY + shiny as u8 * SHINY).unwrap(), + attr: NonZeroU8::new( + 1 + glowy as u8 * GLOWY + shiny as u8 * SHINY + hollow as u8 * HOLLOW, + ) + .unwrap(), } } + + pub fn is_hollow(&self) -> bool { self.attr.get() & HOLLOW != 0 } } impl Default for CellData { - fn default() -> Self { Self::new(Rgb::broadcast(255), false, false) } + fn default() -> Self { Self::new(Rgb::broadcast(255), false, false, false) } } /// A type representing a single voxel in a figure. @@ -33,8 +39,8 @@ pub enum Cell { } impl Cell { - pub fn new(col: Rgb, glowy: bool, shiny: bool) -> Self { - Cell::Filled(CellData::new(col, glowy, shiny)) + pub fn new(col: Rgb, glowy: bool, shiny: bool, hollow: bool) -> Self { + Cell::Filled(CellData::new(col, glowy, shiny, hollow)) } pub fn get_color(&self) -> Option> { @@ -57,6 +63,13 @@ impl Cell { Cell::Empty => false, } } + + pub fn is_hollow(&self) -> bool { + match self { + Cell::Filled(data) => data.is_hollow(), + Cell::Empty => false, + } + } } impl Vox for Cell { diff --git a/common/src/figure/mod.rs b/common/src/figure/mod.rs index b16d43730f..1a68004d04 100644 --- a/common/src/figure/mod.rs +++ b/common/src/figure/mod.rs @@ -67,6 +67,7 @@ impl Segment { color, (13..16).contains(&voxel.i), // Glowy (8..13).contains(&voxel.i), // Shiny + voxel.i == 16, //Hollow ), ) .unwrap(); @@ -93,8 +94,14 @@ impl Segment { /// Transform cell colors pub fn map_rgb(self, transform: impl Fn(Rgb) -> Rgb) -> Self { self.map(|cell| { - cell.get_color() - .map(|rgb| Cell::new(transform(rgb), cell.is_glowy(), cell.is_shiny())) + cell.get_color().map(|rgb| { + Cell::new( + transform(rgb), + cell.is_glowy(), + cell.is_shiny(), + cell.is_hollow(), + ) + }) }) } } @@ -119,7 +126,9 @@ impl DynaUnionizer { } } - pub fn unify(self) -> (Dyna, Vec3) { + pub fn unify(self) -> (Dyna, Vec3) { self.unify_with(|v| v) } + + pub fn unify_with(self, mut f: impl FnMut(V) -> V) -> (Dyna, Vec3) { if self.0.is_empty() { return (Dyna::filled(Vec3::zero(), V::empty(), ()), Vec3::zero()); } @@ -140,7 +149,7 @@ impl DynaUnionizer { for (dyna, offset) in self.0 { for (pos, vox) in dyna.full_vol_iter() { if !vox.is_empty() { - combined.set(origin + offset + pos, *vox).unwrap(); + combined.set(origin + offset + pos, f(*vox)).unwrap(); } } } @@ -157,7 +166,7 @@ impl MatSegment { for (pos, vox) in self.full_vol_iter() { let data = match vox { MatCell::None => continue, - MatCell::Mat(mat) => CellData::new(map(*mat), false, false), + MatCell::Mat(mat) => CellData::new(map(*mat), false, false, false), MatCell::Normal(data) => *data, }; vol.set(pos, Cell::Filled(data)).unwrap(); @@ -221,6 +230,7 @@ impl MatSegment { color, (13..16).contains(&index), (8..13).contains(&index), + index == 16, // Hollow )) }, }; diff --git a/voxygen/src/hud/item_imgs.rs b/voxygen/src/hud/item_imgs.rs index 443cee23c8..0bb5d4410f 100644 --- a/voxygen/src/hud/item_imgs.rs +++ b/voxygen/src/hud/item_imgs.rs @@ -212,7 +212,7 @@ fn graceful_load_segment_no_skin(specifier: &str) -> Arc { .map(|mat_cell| match mat_cell { MatCell::None => None, MatCell::Mat(_) => Some(MatCell::None), - MatCell::Normal(_) => None, + MatCell::Normal(data) => data.is_hollow().then(|| MatCell::None), }) .to_segment(|_| Default::default()); Arc::new(seg) diff --git a/voxygen/src/scene/figure/load.rs b/voxygen/src/scene/figure/load.rs index dda604e939..a249148052 100644 --- a/voxygen/src/scene/figure/load.rs +++ b/voxygen/src/scene/figure/load.rs @@ -22,7 +22,8 @@ use common::{ }, theropod::{self, BodyType as TBodyType, Species as TSpecies}, }, - figure::{DynaUnionizer, MatSegment, Material, Segment}, + figure::{Cell, DynaUnionizer, MatSegment, Material, Segment}, + vol::Vox, }; use hashbrown::HashMap; use serde::Deserialize; @@ -317,8 +318,7 @@ impl HumHeadSpec { .maybe_add(beard) .maybe_add(accessory) .maybe_add(helmet) - .unify(); - + .unify_with(|v| if v.is_hollow() { Cell::empty() } else { v }); ( head, Vec3::from(spec.offset) + origin_offset.map(|e| e as f32 * -1.0), @@ -359,7 +359,7 @@ struct HumArmorLanternSpec(ArmorVoxSpecMap); #[derive(Deserialize)] struct HumArmorGliderSpec(ArmorVoxSpecMap); #[derive(Deserialize)] -struct HumArmorHeadSpec(ArmorVoxSpecMap<(Species, String), ArmorVoxSpec>); +struct HumArmorHeadSpec(ArmorVoxSpecMap<(Species, BodyType, String), ArmorVoxSpec>); #[derive(Deserialize)] struct HumArmorTabardSpec(ArmorVoxSpecMap); @@ -969,7 +969,11 @@ impl HumArmorLanternSpec { } impl HumArmorHeadSpec { fn load_head(&self, body: &Body, head: Option<&str>) -> Option<(Segment, Vec3)> { - match self.0.map.get(&(body.species, head?.to_string())) { + match self + .0 + .map + .get(&(body.species, body.body_type, head?.to_string())) + { Some(spec) => Some(( graceful_load_segment(&spec.vox_spec.0), Vec3::::from(spec.vox_spec.1).as_(), @@ -981,6 +985,7 @@ impl HumArmorHeadSpec { } } } + impl HumArmorTabardSpec { /// FIXME: Either use this, or remove it. #[allow(dead_code)] diff --git a/world/src/layer/spot.rs b/world/src/layer/spot.rs index 6e5276ba2d..46b516d5ba 100644 --- a/world/src/layer/spot.rs +++ b/world/src/layer/spot.rs @@ -101,7 +101,7 @@ impl Spot { Self::generate_spots( Spot::PirateHideout, world, - 2.0, + 1.3, |g, c| { g < 0.25 && !c.near_cliffs() @@ -115,7 +115,7 @@ impl Spot { Self::generate_spots( Spot::DwarvenGrave, world, - 1.0, + 1.3, |g, c| { g < 0.25 && !c.near_cliffs() @@ -284,7 +284,7 @@ impl Spot { Self::generate_spots( Spot::AirshipCrash, world, - 0.5, + 0.7, |g, c| { g < 0.25 && !c.near_cliffs()