Merge branch 'slipped/site2' into 'master'

new entities, frostpines

See merge request veloren/veloren!3193
This commit is contained in:
Joshua Barretto 2022-02-10 01:59:20 +00:00
commit 6263942041
44 changed files with 610 additions and 9 deletions

View File

@ -0,0 +1,24 @@
(
name: Name("Alchemist"),
body: RandomWith("humanoid"),
alignment: Alignment(Npc),
loadout: Extended(
hands: TwoHanded(Choice([
(1, Some(Item("common.items.weapons.tool.broom"))),
(1, Some(Item("common.items.weapons.tool.hoe"))),
(1, Some(Item("common.items.weapons.tool.pickaxe"))),
(1, Some(Item("common.items.weapons.tool.rake"))),
(1, Some(Item("common.items.weapons.tool.shovel-0"))),
(1, Some(Item("common.items.weapons.tool.shovel-1"))),
])),
base_asset: Loadout("common.loadout.village.alchemist"),
inventory: [
(10, "common.items.consumable.potion_big"),
],
),
loot: LootTable("common.loot_tables.creature.humanoid"),
meta: [
SkillSetAsset("common.skillset.preset.rank3.fullskill"),
],
)

View File

@ -0,0 +1,24 @@
(
name: Name("Blacksmith"),
body: RandomWith("humanoid"),
alignment: Alignment(Npc),
loadout: Extended(
hands: TwoHanded(Choice([
(1, Some(Item("common.items.weapons.tool.broom"))),
(1, Some(Item("common.items.weapons.tool.hoe"))),
(1, Some(Item("common.items.weapons.tool.pickaxe"))),
(1, Some(Item("common.items.weapons.tool.rake"))),
(1, Some(Item("common.items.weapons.tool.shovel-0"))),
(1, Some(Item("common.items.weapons.tool.shovel-1"))),
])),
base_asset: Loadout("common.loadout.village.blacksmith"),
inventory: [
(10, "common.items.consumable.potion_big"),
],
),
loot: LootTable("common.loot_tables.creature.humanoid"),
meta: [
SkillSetAsset("common.skillset.preset.rank3.fullskill"),
],
)

View File

@ -0,0 +1,24 @@
(
name: Name("Chef"),
body: RandomWith("humanoid"),
alignment: Alignment(Npc),
loadout: Extended(
hands: TwoHanded(Choice([
(1, Some(Item("common.items.weapons.tool.broom"))),
(1, Some(Item("common.items.weapons.tool.hoe"))),
(1, Some(Item("common.items.weapons.tool.pickaxe"))),
(1, Some(Item("common.items.weapons.tool.rake"))),
(1, Some(Item("common.items.weapons.tool.shovel-0"))),
(1, Some(Item("common.items.weapons.tool.shovel-1"))),
])),
base_asset: Loadout("common.loadout.village.chef"),
inventory: [
(10, "common.items.consumable.potion_big"),
],
),
loot: LootTable("common.loot_tables.creature.humanoid"),
meta: [
SkillSetAsset("common.skillset.preset.rank3.fullskill"),
],
)

View File

@ -0,0 +1,17 @@
ItemDef(
name: "Alchemist Belt",
description: "",
kind: Armor((
kind: Belt("Alchemist"),
stats: (
protection: Some(Normal(8.0)),
poise_resilience: Some(Normal(1.0)),
energy_max: Some(2.0),
energy_reward: Some(0.025),
crit_power: Some(0.02),
),
)),
quality: Epic,
tags: [
],
)

View File

@ -0,0 +1,17 @@
ItemDef(
name: "Alchemist Jacket",
description: "",
kind: Armor((
kind: Chest("Alchemist"),
stats: (
protection: Some(Normal(48.0)),
poise_resilience: Some(Normal(6.0)),
energy_max: Some(13.5),
energy_reward: Some(0.135),
crit_power: Some(0.125),
),
)),
quality: Epic,
tags: [
],
)

View File

@ -0,0 +1,17 @@
ItemDef(
name: "Alchemist Hat",
description: "It seems like a parrot was perched up here.",
kind: Armor((
kind: Head("Alchemist"),
stats: (
protection: Some(Normal(4.0)),
poise_resilience: Some(Normal(1.0)),
energy_max: Some(1.0),
energy_reward: Some(0.015),
crit_power: Some(0.02),
),
)),
quality: High,
tags: [
],
)

View File

@ -0,0 +1,17 @@
ItemDef(
name: "Alchemist Pants",
description: "",
kind: Armor((
kind: Pants("Alchemist"),
stats: (
protection: Some(Normal(32.0)),
poise_resilience: Some(Normal(4.0)),
energy_max: Some(9.0),
energy_reward: Some(0.1),
crit_power: Some(0.08),
),
)),
quality: Epic,
tags: [
],
)

View File

@ -0,0 +1,17 @@
ItemDef(
name: "Blacksmith Belt",
description: "",
kind: Armor((
kind: Belt("Blacksmith"),
stats: (
protection: Some(Normal(8.0)),
poise_resilience: Some(Normal(1.0)),
energy_max: Some(2.0),
energy_reward: Some(0.025),
crit_power: Some(0.02),
),
)),
quality: Epic,
tags: [
],
)

View File

@ -0,0 +1,17 @@
ItemDef(
name: "Blacksmith Jacket",
description: "",
kind: Armor((
kind: Chest("Blacksmith"),
stats: (
protection: Some(Normal(48.0)),
poise_resilience: Some(Normal(6.0)),
energy_max: Some(13.5),
energy_reward: Some(0.135),
crit_power: Some(0.125),
),
)),
quality: Epic,
tags: [
],
)

View File

@ -0,0 +1,17 @@
ItemDef(
name: "Blacksmith Gloves",
description: "",
kind: Armor((
kind: Hand("Blacksmith"),
stats: (
protection: Some(Normal(16.0)),
poise_resilience: Some(Normal(2.0)),
energy_max: Some(4.5),
energy_reward: Some(0.045),
crit_power: Some(0.04),
),
)),
quality: Epic,
tags: [
],
)

View File

@ -0,0 +1,17 @@
ItemDef(
name: "Blacksmith Hat",
description: "",
kind: Armor((
kind: Head("Blacksmith"),
stats: (
protection: Some(Normal(4.0)),
poise_resilience: Some(Normal(1.0)),
energy_max: Some(1.0),
energy_reward: Some(0.015),
crit_power: Some(0.02),
),
)),
quality: High,
tags: [
],
)

View File

@ -0,0 +1,17 @@
ItemDef(
name: "Blacksmith Pants",
description: "",
kind: Armor((
kind: Pants("Blacksmith"),
stats: (
protection: Some(Normal(32.0)),
poise_resilience: Some(Normal(4.0)),
energy_max: Some(9.0),
energy_reward: Some(0.1),
crit_power: Some(0.08),
),
)),
quality: Epic,
tags: [
],
)

View File

@ -0,0 +1,17 @@
ItemDef(
name: "Chef Belt",
description: "",
kind: Armor((
kind: Belt("Chef"),
stats: (
protection: Some(Normal(8.0)),
poise_resilience: Some(Normal(1.0)),
energy_max: Some(2.0),
energy_reward: Some(0.025),
crit_power: Some(0.02),
),
)),
quality: Epic,
tags: [
],
)

View File

@ -0,0 +1,17 @@
ItemDef(
name: "Chef Jacket",
description: "",
kind: Armor((
kind: Chest("Chef"),
stats: (
protection: Some(Normal(48.0)),
poise_resilience: Some(Normal(6.0)),
energy_max: Some(13.5),
energy_reward: Some(0.135),
crit_power: Some(0.125),
),
)),
quality: Epic,
tags: [
],
)

View File

@ -0,0 +1,17 @@
ItemDef(
name: "Chef Hat",
description: "",
kind: Armor((
kind: Head("Chef"),
stats: (
protection: Some(Normal(4.0)),
poise_resilience: Some(Normal(1.0)),
energy_max: Some(1.0),
energy_reward: Some(0.015),
crit_power: Some(0.02),
),
)),
quality: High,
tags: [
],
)

View File

@ -0,0 +1,17 @@
ItemDef(
name: "Chef Pants",
description: "",
kind: Armor((
kind: Pants("Chef"),
stats: (
protection: Some(Normal(32.0)),
poise_resilience: Some(Normal(4.0)),
energy_max: Some(9.0),
energy_reward: Some(0.1),
crit_power: Some(0.08),
),
)),
quality: Epic,
tags: [
],
)

View File

@ -0,0 +1,9 @@
({
Armor(Chest): Item("common.items.armor.alchemist.chest"),
Armor(Hands): Item("common.items.armor.cloth.druid.hand"),
Armor(Legs): Item("common.items.armor.alchemist.pants"),
Armor(Belt): Item("common.items.armor.alchemist.belt"),
Armor(Feet): Item("common.items.armor.ferocious.foot"),
Armor(Head): Item("common.items.armor.alchemist.hat"),
Lantern: Item("common.items.lantern.black_0"),
})

View File

@ -0,0 +1,9 @@
({
Armor(Chest): Item("common.items.armor.blacksmith.chest"),
Armor(Hands): Item("common.items.armor.blacksmith.hand"),
Armor(Legs): Item("common.items.armor.blacksmith.pants"),
Armor(Belt): Item("common.items.armor.blacksmith.belt"),
Armor(Feet): Item("common.items.armor.mail.iron.foot"),
Armor(Head): Item("common.items.armor.blacksmith.hat"),
Lantern: Item("common.items.lantern.black_0"),
})

View File

@ -0,0 +1,7 @@
({
Armor(Chest): Item("common.items.armor.chef.chest"),
Armor(Hands): Item("common.items.armor.cloth.linen.hand"),
Armor(Legs): Item("common.items.armor.chef.pants"),
Armor(Belt): Item("common.items.armor.chef.belt"),
Armor(Feet): Item("common.items.armor.cloth.linen.foot"),
Armor(Head): Item("common.items.armor.chef.hat"),})

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

View File

@ -108,6 +108,18 @@
vox_spec: ("armor.pirate.belt", (-4.0, -4.0, 2.5)),
color: None
),
"Alchemist":(
vox_spec: ("armor.alchemist.belt", (-4.0, -4.0, 2.5)),
color: None
),
"Blacksmith":(
vox_spec: ("armor.blacksmith.belt", (-4.0, -4.0, 2.0)),
color: None
),
"Chef":(
vox_spec: ("armor.chef.belt", (-4.0, -4.0, 2.0)),
color: None
),
"Linen":(
vox_spec: ("armor.cloth.linen.belt", (-4.0, -4.0, 0.0)),
color: None

View File

@ -178,6 +178,18 @@
vox_spec: ("armor.pirate.chest", (-7.0, -4.0, 2.0)),
color: None
),
"Alchemist": (
vox_spec: ("armor.alchemist.chest", (-7.0, -4.0, 2.0)),
color: None
),
"Blacksmith": (
vox_spec: ("armor.blacksmith.chest", (-7.0, -4.0, 2.0)),
color: None
),
"Chef": (
vox_spec: ("armor.chef.chest", (-7.0, -4.0, 2.0)),
color: None
),
"Linen": (
vox_spec: ("armor.cloth.linen.chest", (-7.0, -4.0, 2.0)),
color: None

View File

@ -240,6 +240,16 @@
color: None
)
),
"Blacksmith": (
left: (
vox_spec: ("armor.blacksmith.hand", (-1.5, -2.5, -4.0)),
color: None
),
right: (
vox_spec: ("armor.blacksmith.hand", (-1.5, -2.5, -4.0)),
color: None
)
),
"Linen": (
left: (
vox_spec: ("armor.cloth.linen.hand", (-1.5, -2.0, -3.0)),

View File

@ -274,6 +274,153 @@
vox_spec: ("armor.pirate.hat", (-3.0, -5.0, 5.0)),
color: None
),
//
(Human, Male, "Blacksmith"): (
vox_spec: ("armor.blacksmith.hat", (-4.0, 0.0, -3.0)),
color: None
),
(Human, Female, "Blacksmith"): (
vox_spec: ("armor.blacksmith.hat", (-4.0, 1.0, -3.0)),
color: None
),
(Elf, Male, "Blacksmith"): (
vox_spec: ("armor.blacksmith.hat", (-3.0, 0.0, -3.0)),
color: None
),
(Elf, Female, "Blacksmith"): (
vox_spec: ("armor.blacksmith.hat", (-3.0, -1.0, -3.0)),
color: None
),
(Dwarf, Male, "Blacksmith"): (
vox_spec: ("armor.blacksmith.hat", (-5.0, 1.0, -3.0)),
color: None
),
(Dwarf, Female, "Blacksmith"): (
vox_spec: ("armor.blacksmith.hat", (-5.0, 1.0, -3.0)),
color: None
),
(Danari, Male, "Blacksmith"): (
vox_spec: ("armor.blacksmith.hat", (-2.0, 0.0, -1.0)),
color: None
),
(Danari, Female, "Blacksmith"): (
vox_spec: ("armor.blacksmith.hat", (-2.0, 1.0, -1.0)),
color: None
),
(Undead, Male, "Blacksmith"): (
vox_spec: ("armor.blacksmith.hat", (-6.0, 0.0, -1.0)),
color: None
),
(Undead, Female, "Blacksmith"): (
vox_spec: ("armor.blacksmith.hat", (-6.0, 0.0, -2.0)),
color: None
),
(Orc, Male, "Blacksmith"): (
vox_spec: ("armor.blacksmith.hat", (-3.0, 2.0, 0.0)),
color: None
),
(Orc, Female, "Blacksmith"): (
vox_spec: ("armor.blacksmith.hat", (-3.0, -1.0, -3.0)),
color: None
),
// Alchemist Goggles
(Human, Male, "Alchemist"): (
vox_spec: ("armor.alchemist.hat", (-4.0, 0.0, 1.0)),
color: None
),
(Human, Female, "Alchemist"): (
vox_spec: ("armor.alchemist.hat", (-4.0, 1.0, 1.0)),
color: None
),
(Elf, Male, "Alchemist"): (
vox_spec: ("armor.alchemist.hat", (-3.0, 0.0, 1.0)),
color: None
),
(Elf, Female, "Alchemist"): (
vox_spec: ("armor.alchemist.hat", (-3.0, -1.0, 1.0)),
color: None
),
(Dwarf, Male, "Alchemist"): (
vox_spec: ("armor.alchemist.hat", (-5.0, 1.0, 1.0)),
color: None
),
(Dwarf, Female, "Alchemist"): (
vox_spec: ("armor.alchemist.hat", (-5.0, 1.0, 1.0)),
color: None
),
(Danari, Male, "Alchemist"): (
vox_spec: ("armor.alchemist.hat", (-2.0, 0.0, 3.0)),
color: None
),
(Danari, Female, "Alchemist"): (
vox_spec: ("armor.alchemist.hat", (-2.0, 1.0, 3.0)),
color: None
),
(Undead, Male, "Alchemist"): (
vox_spec: ("armor.alchemist.hat", (-6.0, 0.0, 3.0)),
color: None
),
(Undead, Female, "Alchemist"): (
vox_spec: ("armor.alchemist.hat", (-6.0, 0.0, 2.0)),
color: None
),
(Orc, Male, "Alchemist"): (
vox_spec: ("armor.alchemist.hat", (-3.0, 2.0, 4.0)),
color: None
),
(Orc, Female, "Alchemist"): (
vox_spec: ("armor.alchemist.hat", (-3.0, -1.0, 1.0)),
color: None
),
// Chef hat
(Human, Male, "Chef"): (
vox_spec: ("armor.chef.hat", (-4.0, -5.0, 5.0)),
color: None
),
(Human, Female, "Chef"): (
vox_spec: ("armor.chef.hat", (-4.0, -5.0, 5.0)),
color: None
),
(Elf, Male, "Chef"): (
vox_spec: ("armor.chef.hat", (-3.0, -5.0, 5.0)),
color: None
),
(Elf, Female, "Chef"): (
vox_spec: ("armor.chef.hat", (-3.0, -6.0, 5.0)),
color: None
),
(Dwarf, Male, "Chef"): (
vox_spec: ("armor.chef.hat", (-5.0, -4.0, 5.0)),
color: None
),
(Dwarf, Female, "Chef"): (
vox_spec: ("armor.chef.hat", (-5.0, -4.0, 5.0)),
color: None
),
(Danari, Male, "Chef"): (
vox_spec: ("armor.chef.hat", (-2.0, -5.0, 7.0)),
color: None
),
(Danari, Female, "Chef"): (
vox_spec: ("armor.chef.hat", (-2.0, -5.0, 7.0)),
color: None
),
(Undead, Male, "Chef"): (
vox_spec: ("armor.chef.hat", (-6.0, -5.0, 7.0)),
color: None
),
(Undead, Female, "Chef"): (
vox_spec: ("armor.chef.hat", (-6.0, -5.0, 6.0)),
color: None
),
(Orc, Male, "Chef"): (
vox_spec: ("armor.chef.hat", (-3.0, -3.0, 8.0)),
color: None
),
(Orc, Female, "Chef"): (
vox_spec: ("armor.chef.hat", (-3.0, -6.0, 5.0)),
color: None
),
// Straw hat
(Human, Male, "Straw"): (
vox_spec: ("armor.misc.head.straw", (-4.0, -5.0, 5.0)),

View File

@ -136,6 +136,18 @@
vox_spec: ("armor.pirate.pants", (-5.0, -4.0, 1.5)),
color: None
),
"Alchemist": (
vox_spec: ("armor.alchemist.pants", (-5.0, -4.0, 0.5)),
color: None
),
"Blacksmith": (
vox_spec: ("armor.blacksmith.pants", (-5.0, -4.0, 0.5)),
color: None
),
"Chef": (
vox_spec: ("armor.chef.pants", (-5.0, -4.0, 0.0)),
color: None
),
"Linen": (
vox_spec: ("armor.cloth.linen.pants", (-5.0, -4.0, 0.5)),
color: None

View File

@ -25,6 +25,7 @@
//(start: (168, 81, 0), end: (54, 150, 31)),
],
PineLeaves: [(start: (0, 60, 50), end: (30, 80, 10))],
FrostpineLeaves: [(start: (24, 89, 85), end: (67, 22, 82))],
PalmLeavesInner: [(start: (70, 140, 43), end: (55, 140, 32))],
PalmLeavesOuter: [(start: (60, 130, 38), end: (30, 130, 65))],
Acacia: [(start: (35, 70, 0), end: (100, 120, 30))],

View File

@ -37,6 +37,7 @@ make_case_elim!(
Chestnut = 19,
Baobab = 20,
BirchWood = 21,
FrostpineLeaves = 22,
}
);

View File

@ -31,6 +31,9 @@ pub enum RtSimEntityKind {
Cultist,
Villager,
Merchant,
Blacksmith,
Chef,
Alchemist,
}
const BIRD_MEDIUM_ROSTER: &[comp::bird_medium::Species] = &[
@ -90,7 +93,12 @@ impl Entity {
},
}
},
RtSimEntityKind::Cultist | RtSimEntityKind::Villager | RtSimEntityKind::Merchant => {
RtSimEntityKind::Cultist
| RtSimEntityKind::Villager
| RtSimEntityKind::Chef
| RtSimEntityKind::Alchemist
| RtSimEntityKind::Blacksmith
| RtSimEntityKind::Merchant => {
let species = *(&comp::humanoid::ALL_SPECIES)
.choose(&mut self.rng(PERM_SPECIES))
.unwrap();
@ -813,6 +821,9 @@ fn humanoid_config(kind: RtSimEntityKind, rank: TravelerRank) -> &'static str {
},
RtSimEntityKind::Villager => "common.entity.village.villager",
RtSimEntityKind::Merchant => "common.entity.village.merchant",
RtSimEntityKind::Blacksmith => "common.entity.village.blacksmith",
RtSimEntityKind::Chef => "common.entity.village.chef",
RtSimEntityKind::Alchemist => "common.entity.village.alchemist",
}
}

View File

@ -16,6 +16,7 @@ pub enum ForestKind {
Mangrove,
Giant,
Swamp,
Frostpine,
}
pub struct Environment {
@ -34,6 +35,7 @@ impl ForestKind {
ForestKind::Chestnut => 0.35..1.5,
ForestKind::Cedar => 0.275..1.45,
ForestKind::Pine => 0.2..1.4,
ForestKind::Frostpine => 0.2..1.4,
ForestKind::Birch => 0.0..0.6,
ForestKind::Mangrove => 0.5..1.3,
ForestKind::Swamp => 0.5..1.1,
@ -49,7 +51,8 @@ impl ForestKind {
ForestKind::Oak => -0.35..0.45,
ForestKind::Chestnut => -0.35..0.45,
ForestKind::Cedar => -0.65..0.15,
ForestKind::Pine => -1.8..-0.2,
ForestKind::Pine => -0.85..-0.2,
ForestKind::Frostpine => -1.8..-0.8,
ForestKind::Birch => -0.7..0.25,
ForestKind::Mangrove => 0.35..1.6,
ForestKind::Swamp => -0.6..0.8,
@ -75,6 +78,7 @@ impl ForestKind {
ForestKind::Chestnut => 0.3,
ForestKind::Cedar => 0.3,
ForestKind::Pine => 1.0,
ForestKind::Frostpine => 1.0,
ForestKind::Birch => 0.65,
ForestKind::Mangrove => 2.0,
ForestKind::Swamp => 1.0,
@ -90,7 +94,8 @@ impl ForestKind {
ForestKind::Oak => 0.4,
ForestKind::Chestnut => 0.3,
ForestKind::Cedar => 0.3,
ForestKind::Pine => 0.4,
ForestKind::Pine => 0.5,
ForestKind::Frostpine => 0.3,
ForestKind::Birch => 0.65,
ForestKind::Mangrove => 1.0,
ForestKind::Swamp => 0.4,

View File

@ -308,6 +308,7 @@ pub fn block_from_structure(
// We interpolate all these BlockKinds as needed.
StructureBlock::TemperateLeaves
| StructureBlock::PineLeaves
| StructureBlock::FrostpineLeaves
| StructureBlock::PalmLeavesInner
| StructureBlock::PalmLeavesOuter
| StructureBlock::Acacia

View File

@ -168,6 +168,16 @@ pub fn apply_trees_to(
StructureBlock::TemperateLeaves,
);
},
ForestKind::Frostpine => {
break 'model TreeModel::Procedural(
ProceduralTree::generate(
TreeConfig::frostpine(&mut RandomPerm::new(seed), scale),
&mut RandomPerm::new(seed),
),
StructureBlock::FrostpineLeaves,
);
},
ForestKind::Mangrove => {
break 'model TreeModel::Procedural(
ProceduralTree::generate(
@ -407,6 +417,31 @@ impl TreeConfig {
}
}
pub fn frostpine(rng: &mut impl Rng, scale: f32) -> Self {
let scale = scale * (0.8 + rng.gen::<f32>().powi(2) * 0.5);
let log_scale = 1.0 + scale.log2().max(0.0);
Self {
trunk_len: 36.0 * scale,
trunk_radius: 2.3 * scale,
branch_child_len: 0.25 / scale,
branch_child_radius: 0.0,
branch_child_radius_lerp: false,
leaf_radius: 1.3..2.2,
leaf_radius_scaled: 0.4 * log_scale,
straightness: 0.3,
max_depth: 1,
splits: 34.0 * scale..35.0 * scale,
split_range: 0.1..1.2,
branch_len_bias: 0.75,
leaf_vertical_scale: 0.6,
proportionality: 1.0,
inhabited: false,
hanging_sprites: &[(0.0001, SpriteKind::Beehive)],
trunk_block: StructureBlock::Filled(BlockKind::Wood, Rgb::new(79, 102, 105)),
}
}
pub fn jungle(rng: &mut impl Rng, scale: f32) -> Self {
let scale = scale * (0.8 + rng.gen::<f32>() * 0.5);
let log_scale = 1.0 + scale.log2().max(0.0);

View File

@ -324,7 +324,7 @@ impl Structure for House {
let roof_rear = painter.prim(Primitive::intersect(roof_empty, roof_rear_wall));
painter.fill(
roof_primitive,
Fill::Block(Block::new(BlockKind::Wood, self.roof_color)),
Fill::Brick(BlockKind::Wood, self.roof_color, 24),
);
painter.fill(roof_empty, Fill::Block(Block::empty()));
let roof_walls = painter.prim(Primitive::union(roof_front, roof_rear));
@ -1084,10 +1084,7 @@ impl Structure for House {
dir: Dir::X,
}),
};
painter.fill(
shed,
Fill::Block(Block::new(BlockKind::Wood, self.roof_color)),
);
painter.fill(shed, Fill::Brick(BlockKind::Wood, self.roof_color, 24));
painter.fill(shed_empty, Fill::Block(Block::empty()));
let shed_left_wall = match self.front {
0 => painter.prim(Primitive::Aabb(Aabb {
@ -1435,7 +1432,7 @@ impl Structure for House {
);
painter.fill(
painter.prim(Primitive::without(dormer_roof, shed)),
Fill::Block(Block::new(BlockKind::Wood, self.roof_color)),
Fill::Brick(BlockKind::Wood, self.roof_color, 24),
);
painter.fill(window_cavity, Fill::Block(Block::empty()));
painter.fill(