Merge branch 'slipped/tweaks' into 'master'

hats

See merge request veloren/veloren!2966
This commit is contained in:
Samuel Keiffer 2021-10-31 05:35:11 +00:00
commit be64c3687e
60 changed files with 1071 additions and 77 deletions

View File

@ -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

View File

@ -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")),

View File

@ -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")),

View File

@ -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")),

View File

@ -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"),

View File

@ -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
],
)

View File

@ -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: [],
)

View File

@ -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: [],
)

View File

@ -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: [],
)

View File

@ -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: [],
)

View File

@ -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: [],
)

View File

@ -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: [],
)

View File

@ -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: [],
)

View File

@ -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: [],
)

View File

@ -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: [],
)

View File

@ -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: [],
)

View File

@ -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,
),
)),

View File

@ -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,
),
)),

View File

@ -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),

View File

@ -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),

View File

@ -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"),

View File

@ -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"))),
]),
})

View File

@ -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

View File

@ -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")),
]

View File

@ -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

View File

@ -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")),
]

View File

@ -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")),
]

View File

@ -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")),
]

View File

@ -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",

BIN
assets/voxygen/voxel/armor/cultist/bandana.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/armor/misc/head/bandana/red.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/armor/misc/head/bandana/thief.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/armor/misc/head/crown.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/armor/misc/head/headband/danari_f.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/armor/misc/head/headband/danari_m.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/armor/misc/head/headband/dwarf_f.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/armor/misc/head/headband/dwarf_m.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/armor/misc/head/headband/elf_f.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/armor/misc/head/headband/elf_m.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/armor/misc/head/headband/human_f.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/armor/misc/head/headband/human_m.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/armor/misc/head/headband/orc_f.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/armor/misc/head/headband/orc_m.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/armor/misc/head/headband/undead_f.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/armor/misc/head/headband/undead_m.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/armor/misc/head/helmet.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/armor/misc/head/hood.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/armor/misc/head/hood_dark.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/armor/misc/head/mitre.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/armor/misc/head/spikeguard.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/armor/misc/head/straw.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/armor/pirate/hat.vox (Stored with Git LFS)

Binary file not shown.

BIN
assets/voxygen/voxel/armor/witch/hat.vox (Stored with Git LFS)

Binary file not shown.

View File

@ -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
),
}

View File

@ -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))),

View File

@ -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<u8>,
pub attr: NonZeroU8, // 1 = glowy, 2 = shiny
pub attr: NonZeroU8, // 1 = glowy, 2 = shiny, 3 = hollow
}
impl CellData {
pub(super) fn new(col: Rgb<u8>, glowy: bool, shiny: bool) -> Self {
pub(super) fn new(col: Rgb<u8>, 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<u8>, glowy: bool, shiny: bool) -> Self {
Cell::Filled(CellData::new(col, glowy, shiny))
pub fn new(col: Rgb<u8>, glowy: bool, shiny: bool, hollow: bool) -> Self {
Cell::Filled(CellData::new(col, glowy, shiny, hollow))
}
pub fn get_color(&self) -> Option<Rgb<u8>> {
@ -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 {

View File

@ -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<u8>) -> Rgb<u8>) -> 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<V: Vox + Copy> DynaUnionizer<V> {
}
}
pub fn unify(self) -> (Dyna<V, ()>, Vec3<i32>) {
pub fn unify(self) -> (Dyna<V, ()>, Vec3<i32>) { self.unify_with(|v| v) }
pub fn unify_with(self, mut f: impl FnMut(V) -> V) -> (Dyna<V, ()>, Vec3<i32>) {
if self.0.is_empty() {
return (Dyna::filled(Vec3::zero(), V::empty(), ()), Vec3::zero());
}
@ -140,7 +149,7 @@ impl<V: Vox + Copy> DynaUnionizer<V> {
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
))
},
};

View File

@ -212,7 +212,7 @@ fn graceful_load_segment_no_skin(specifier: &str) -> Arc<Segment> {
.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)

View File

@ -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<String, ArmorVoxSpec>);
#[derive(Deserialize)]
struct HumArmorGliderSpec(ArmorVoxSpecMap<String, ArmorVoxSpec>);
#[derive(Deserialize)]
struct HumArmorHeadSpec(ArmorVoxSpecMap<(Species, String), ArmorVoxSpec>);
struct HumArmorHeadSpec(ArmorVoxSpecMap<(Species, BodyType, String), ArmorVoxSpec>);
#[derive(Deserialize)]
struct HumArmorTabardSpec(ArmorVoxSpecMap<String, ArmorVoxSpec>);
@ -969,7 +969,11 @@ impl HumArmorLanternSpec {
}
impl HumArmorHeadSpec {
fn load_head(&self, body: &Body, head: Option<&str>) -> Option<(Segment, Vec3<i32>)> {
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::<f32>::from(spec.vox_spec.1).as_(),
@ -981,6 +985,7 @@ impl HumArmorHeadSpec {
}
}
}
impl HumArmorTabardSpec {
/// FIXME: Either use this, or remove it.
#[allow(dead_code)]

View File

@ -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()