diff --git a/assets/common/entity/spot/bandit_camp/grim_salvager.ron b/assets/common/entity/spot/bandit_camp/grim_salvager.ron index c6d499ea51..77cf951256 100644 --- a/assets/common/entity/spot/bandit_camp/grim_salvager.ron +++ b/assets/common/entity/spot/bandit_camp/grim_salvager.ron @@ -1,6 +1,6 @@ EntityConfig ( name: Name("Grim Salvager"), - body: RandomWith("human"), + body: RandomWith("humanoid"), alignment: Alignment(Enemy), loot: LootTable("common.loot_tables.creature.biped_large.saurok"), diff --git a/assets/common/entity/spot/bandit_camp/witch_dark.ron b/assets/common/entity/spot/bandit_camp/witch_dark.ron new file mode 100644 index 0000000000..6e3bbcdad5 --- /dev/null +++ b/assets/common/entity/spot/bandit_camp/witch_dark.ron @@ -0,0 +1,24 @@ +EntityConfig ( + name: Name("Witch"), + body: Exact(Humanoid(Body( + species: Human, + body_type: Female, + hair_style: 2, + beard: 0, + eyes: 0, + accessory: 0, + hair_color: 0, + skin: 0, + eye_color: 0, + ))), + alignment: Alignment(Enemy), + + loot: LootTable("common.loot_tables.creature.biped_large.saurok"), + + hands: TwoHanded(Item("common.items.weapons.sceptre.belzeshrub")), + + meta: [ + SkillSetAsset("common.skillset.dungeon.tier-5.sceptre"), + LoadoutAsset("common.loadout.spots.witch"), + ], +) diff --git a/assets/common/entity/wild/peaceful/bear.ron b/assets/common/entity/wild/peaceful/bear.ron new file mode 100644 index 0000000000..3d132caf15 --- /dev/null +++ b/assets/common/entity/wild/peaceful/bear.ron @@ -0,0 +1,11 @@ +EntityConfig ( + name: Name("Well-fed Bear"), + body: RandomWith("bear"), + alignment: Alignment(Wild), + + loot: Uninit, + + hands: Uninit, + + meta: [], +) diff --git a/assets/common/items/armor/witch/back.ron b/assets/common/items/armor/witch/back.ron new file mode 100644 index 0000000000..f8eb96d292 --- /dev/null +++ b/assets/common/items/armor/witch/back.ron @@ -0,0 +1,19 @@ +ItemDef( + name: "Witch Cape", + description: "", + kind: Armor(( + kind: Back("Witch"), + stats: ( + protection: Normal(32.0), + poise_resilience: Normal(5.0), + energy_max: 90, + energy_reward: 0.1, + crit_power: 0.08, + stealth: 0.0, + ), + )), + quality: Epic, + tags: [ + Cultist, + ], +) diff --git a/assets/common/items/armor/witch/belt.ron b/assets/common/items/armor/witch/belt.ron new file mode 100644 index 0000000000..ac07cf922c --- /dev/null +++ b/assets/common/items/armor/witch/belt.ron @@ -0,0 +1,19 @@ +ItemDef( + name: "Witch Belt", + description: "", + kind: Armor(( + kind: Belt("Witch"), + stats: ( + protection: Normal(8.0), + poise_resilience: Normal(1.0), + energy_max: 20, + energy_reward: 0.025, + crit_power: 0.02, + stealth: 0.0, + ), + )), + quality: Epic, + tags: [ + Cultist, + ], +) diff --git a/assets/common/items/armor/witch/chest.ron b/assets/common/items/armor/witch/chest.ron new file mode 100644 index 0000000000..1133e87625 --- /dev/null +++ b/assets/common/items/armor/witch/chest.ron @@ -0,0 +1,19 @@ +ItemDef( + name: "Witch Robe", + description: "", + kind: Armor(( + kind: Chest("Witch"), + stats: ( + protection: Normal(48.0), + poise_resilience: Normal(6.0), + energy_max: 135, + energy_reward: 0.135, + crit_power: 0.125, + stealth: 0.0, + ), + )), + quality: Epic, + tags: [ + Cultist, + ], +) diff --git a/assets/common/items/armor/witch/foot.ron b/assets/common/items/armor/witch/foot.ron new file mode 100644 index 0000000000..f55cd63bba --- /dev/null +++ b/assets/common/items/armor/witch/foot.ron @@ -0,0 +1,19 @@ +ItemDef( + name: "Witch Boots", + description: "", + kind: Armor(( + kind: Foot("Witch"), + stats: ( + protection: Normal(16.0), + poise_resilience: Normal(2.0), + energy_max: 45, + energy_reward: 0.045, + crit_power: 0.04, + stealth: 0.0, + ), + )), + quality: Epic, + tags: [ + Cultist, + ], +) diff --git a/assets/common/items/armor/witch/hand.ron b/assets/common/items/armor/witch/hand.ron new file mode 100644 index 0000000000..e777dfa770 --- /dev/null +++ b/assets/common/items/armor/witch/hand.ron @@ -0,0 +1,19 @@ +ItemDef( + name: "Witch Handwarmers", + description: "", + kind: Armor(( + kind: Hand("Witch"), + stats: ( + protection: Normal(16.0), + poise_resilience: Normal(2.0), + energy_max: 45, + energy_reward: 0.045, + crit_power: 0.04, + stealth: 0.0, + ), + )), + quality: Epic, + tags: [ + Cultist, + ], +) diff --git a/assets/common/items/armor/witch/hat.ron b/assets/common/items/armor/witch/hat.ron new file mode 100644 index 0000000000..567a2dc7ce --- /dev/null +++ b/assets/common/items/armor/witch/hat.ron @@ -0,0 +1,19 @@ +ItemDef( + name: "Witch hat", + description: "", + kind: Armor(( + kind: Head("Witch"), + stats: ( + protection: Normal(32.0), + poise_resilience: Normal(5.0), + energy_max: 90, + energy_reward: 0.1, + crit_power: 0.08, + stealth: 0.0, + ), + )), + quality: Epic, + tags: [ + Cultist, + ], +) diff --git a/assets/common/items/armor/witch/pants.ron b/assets/common/items/armor/witch/pants.ron new file mode 100644 index 0000000000..87df58804a --- /dev/null +++ b/assets/common/items/armor/witch/pants.ron @@ -0,0 +1,19 @@ +ItemDef( + name: "Witch Skirt", + description: "", + kind: Armor(( + kind: Pants("Witch"), + stats: ( + protection: Normal(32.0), + poise_resilience: Normal(4.0), + energy_max: 90, + energy_reward: 0.1, + crit_power: 0.08, + stealth: 0.0, + ), + )), + quality: Epic, + tags: [ + Cultist, + ], +) diff --git a/assets/common/items/armor/witch/shoulder.ron b/assets/common/items/armor/witch/shoulder.ron new file mode 100644 index 0000000000..6c2f6b4528 --- /dev/null +++ b/assets/common/items/armor/witch/shoulder.ron @@ -0,0 +1,19 @@ +ItemDef( + name: "Witch Mantle", + description: "", + kind: Armor(( + kind: Shoulder("Witch"), + stats: ( + protection: Normal(32.0), + poise_resilience: Normal(5.0), + energy_max: 90, + energy_reward: 0.1, + crit_power: 0.08, + stealth: 0.0, + ), + )), + quality: Epic, + tags: [ + Cultist, + ], +) diff --git a/assets/common/items/weapons/sceptre/belzeshrub.ron b/assets/common/items/weapons/sceptre/belzeshrub.ron new file mode 100644 index 0000000000..7d986452e1 --- /dev/null +++ b/assets/common/items/weapons/sceptre/belzeshrub.ron @@ -0,0 +1,21 @@ +ItemDef( + name: "Belzeshrub the Broom God", + description: "'Is it... alive?'", + kind: Tool(( + kind: Sceptre, + hands: Two, + stats: Direct(( + equip_time_secs: 0.4, + power: 2.5, + effect_power: 1.0, + speed: 0.8, + crit_chance: 0.078125, + range: 1.0, + energy_efficiency: 1.0, + buff_strength: 1.0, + )), + )), + quality: Artifact, + tags: [], + ability_spec: None, +) \ No newline at end of file diff --git a/assets/common/loadout/spots/witch.ron b/assets/common/loadout/spots/witch.ron new file mode 100644 index 0000000000..233e207a71 --- /dev/null +++ b/assets/common/loadout/spots/witch.ron @@ -0,0 +1,10 @@ +({ + Armor(Head): Item("common.items.armor.witch.hat"), + Armor(Chest): Item("common.items.armor.witch.chest"), + Armor(Shoulders): Item("common.items.armor.witch.shoulder"), + Armor(Belt): Item("common.items.armor.witch.belt"), + Armor(Hands): Item("common.items.armor.witch.hand"), + Armor(Legs): Item("common.items.armor.witch.pants"), + Armor(Feet): Item("common.items.armor.witch.foot"), + Lantern: Item("common.items.lantern.black_0"), +}) diff --git a/assets/voxygen/voxel/armor/witch/back.vox b/assets/voxygen/voxel/armor/witch/back.vox new file mode 100644 index 0000000000..7f1d426299 Binary files /dev/null and b/assets/voxygen/voxel/armor/witch/back.vox differ diff --git a/assets/voxygen/voxel/armor/witch/belt.vox b/assets/voxygen/voxel/armor/witch/belt.vox new file mode 100644 index 0000000000..323982fc89 Binary files /dev/null and b/assets/voxygen/voxel/armor/witch/belt.vox differ diff --git a/assets/voxygen/voxel/armor/witch/chest.vox b/assets/voxygen/voxel/armor/witch/chest.vox new file mode 100644 index 0000000000..0c60e0b5e0 Binary files /dev/null and b/assets/voxygen/voxel/armor/witch/chest.vox differ diff --git a/assets/voxygen/voxel/armor/witch/foot.vox b/assets/voxygen/voxel/armor/witch/foot.vox new file mode 100644 index 0000000000..41e56743f6 Binary files /dev/null and b/assets/voxygen/voxel/armor/witch/foot.vox differ diff --git a/assets/voxygen/voxel/armor/witch/hand.vox b/assets/voxygen/voxel/armor/witch/hand.vox new file mode 100644 index 0000000000..fa0068888a Binary files /dev/null and b/assets/voxygen/voxel/armor/witch/hand.vox differ diff --git a/assets/voxygen/voxel/armor/witch/hat.vox b/assets/voxygen/voxel/armor/witch/hat.vox new file mode 100644 index 0000000000..a409fa08ce Binary files /dev/null and b/assets/voxygen/voxel/armor/witch/hat.vox differ diff --git a/assets/voxygen/voxel/armor/witch/pants.vox b/assets/voxygen/voxel/armor/witch/pants.vox new file mode 100644 index 0000000000..b23c4d4bb5 Binary files /dev/null and b/assets/voxygen/voxel/armor/witch/pants.vox differ diff --git a/assets/voxygen/voxel/armor/witch/shoulder.vox b/assets/voxygen/voxel/armor/witch/shoulder.vox new file mode 100644 index 0000000000..5efd301697 Binary files /dev/null and b/assets/voxygen/voxel/armor/witch/shoulder.vox differ diff --git a/assets/voxygen/voxel/biped_weapon_manifest.ron b/assets/voxygen/voxel/biped_weapon_manifest.ron index ffc7128cf7..a87845437a 100644 --- a/assets/voxygen/voxel/biped_weapon_manifest.ron +++ b/assets/voxygen/voxel/biped_weapon_manifest.ron @@ -950,6 +950,10 @@ vox_spec: ("weapon.sceptre.root_evil", (-2.5, -2.5, -6.0)), color: None ), + "common.items.weapons.sceptre.belzeshrub": ( + vox_spec: ("weapon.tool.broom_belzeshrub_purple", (-3.0, -4.0, -4.0)), + color: None + ), "common.items.weapons.sceptre.sceptre_velorite_0": ( vox_spec: ("weapon.sceptre.ore-nature", (-2.0, -6.0, -5.0)), color: None diff --git a/assets/voxygen/voxel/humanoid_armor_back_manifest.ron b/assets/voxygen/voxel/humanoid_armor_back_manifest.ron index 1459d036eb..10f0b422df 100644 --- a/assets/voxygen/voxel/humanoid_armor_back_manifest.ron +++ b/assets/voxygen/voxel/humanoid_armor_back_manifest.ron @@ -80,6 +80,10 @@ vox_spec: ("armor.cloth.silken.back", (-4.0, -2.5, -11.5)), color: None ), + "Witch": ( + vox_spec: ("armor.witch.back", (-4.0, -2.5, -11.5)), + color: None + ), "Druid": ( vox_spec: ("armor.cloth.druid.back", (-5.0, -2.5, -11.0)), color: None diff --git a/assets/voxygen/voxel/humanoid_armor_belt_manifest.ron b/assets/voxygen/voxel/humanoid_armor_belt_manifest.ron index e6b95396a8..25062188b9 100644 --- a/assets/voxygen/voxel/humanoid_armor_belt_manifest.ron +++ b/assets/voxygen/voxel/humanoid_armor_belt_manifest.ron @@ -112,6 +112,10 @@ vox_spec: ("armor.cloth.silken.belt", (-4.0, -3.5, -3.0)), color: None ), + "Witch":( + vox_spec: ("armor.witch.belt", (-4.0, -3.5, -3.0)), + color: None + ), "Druid":( vox_spec: ("armor.cloth.druid.belt", (-4.0, -4.0, -0.5)), color: None diff --git a/assets/voxygen/voxel/humanoid_armor_chest_manifest.ron b/assets/voxygen/voxel/humanoid_armor_chest_manifest.ron index db7a6b80ec..7177fd67e5 100644 --- a/assets/voxygen/voxel/humanoid_armor_chest_manifest.ron +++ b/assets/voxygen/voxel/humanoid_armor_chest_manifest.ron @@ -182,6 +182,10 @@ vox_spec: ("armor.cloth.silken.chest", (-7.0, -4.0, 1.0)), color: None ), + "Witch": ( + vox_spec: ("armor.witch.chest", (-7.0, -4.0, 1.0)), + color: None + ), "Druid": ( vox_spec: ("armor.cloth.druid.chest", (-7.0, -4.0, 2.0)), color: None diff --git a/assets/voxygen/voxel/humanoid_armor_foot_manifest.ron b/assets/voxygen/voxel/humanoid_armor_foot_manifest.ron index 617d459fb3..308d1cc255 100644 --- a/assets/voxygen/voxel/humanoid_armor_foot_manifest.ron +++ b/assets/voxygen/voxel/humanoid_armor_foot_manifest.ron @@ -112,6 +112,10 @@ vox_spec: ("armor.cloth.silken.foot", (-2.5, -3.5, -2.0)), color: None ), + "Witch": ( + vox_spec: ("armor.witch.foot", (-2.5, -3.5, -2.0)), + color: None + ), "Druid": ( vox_spec: ("armor.cloth.druid.foot", (-2.5, -3.5, -2.0)), color: None diff --git a/assets/voxygen/voxel/humanoid_armor_hand_manifest.ron b/assets/voxygen/voxel/humanoid_armor_hand_manifest.ron index 7d3bff8625..34ed01d6c3 100644 --- a/assets/voxygen/voxel/humanoid_armor_hand_manifest.ron +++ b/assets/voxygen/voxel/humanoid_armor_hand_manifest.ron @@ -250,6 +250,16 @@ color: None ) ), + "Witch": ( + left: ( + vox_spec: ("armor.witch.hand", (-2.5, -2.5, -4.0)), + color: None + ), + right: ( + vox_spec: ("armor.witch.hand", (-1.5, -2.5, -4.0)), + color: None + ) + ), "Druid": ( left: ( vox_spec: ("armor.cloth.druid.hand", (-2.5, -1.0, -3.0)), diff --git a/assets/voxygen/voxel/humanoid_armor_head_manifest.ron b/assets/voxygen/voxel/humanoid_armor_head_manifest.ron index 6307a9b106..6320b77dda 100644 --- a/assets/voxygen/voxel/humanoid_armor_head_manifest.ron +++ b/assets/voxygen/voxel/humanoid_armor_head_manifest.ron @@ -28,5 +28,9 @@ vox_spec: ("armor.misc.head.exclamation", (-11.0, -11.0, 18.0)), color: None ), + (Human, "Witch"): ( + vox_spec: ("armor.witch.hat", (-2.0, -2.0, 5.0)), + color: None + ), } )) diff --git a/assets/voxygen/voxel/humanoid_armor_pants_manifest.ron b/assets/voxygen/voxel/humanoid_armor_pants_manifest.ron index 9aa5dde696..137b48109c 100644 --- a/assets/voxygen/voxel/humanoid_armor_pants_manifest.ron +++ b/assets/voxygen/voxel/humanoid_armor_pants_manifest.ron @@ -140,6 +140,10 @@ vox_spec: ("armor.cloth.silken.pants", (-5.0, -4.0, 0.5)), color: None ), + "Witch": ( + vox_spec: ("armor.witch.pants", (-5.0, -4.0, 0.5)), + color: None + ), "Druid": ( vox_spec: ("armor.cloth.druid.pants", (-5.0, -4.0, 0.5)), color: None diff --git a/assets/voxygen/voxel/humanoid_armor_shoulder_manifest.ron b/assets/voxygen/voxel/humanoid_armor_shoulder_manifest.ron index 0b027a70a6..3ee73f6cd7 100644 --- a/assets/voxygen/voxel/humanoid_armor_shoulder_manifest.ron +++ b/assets/voxygen/voxel/humanoid_armor_shoulder_manifest.ron @@ -331,6 +331,16 @@ color: None ) ), + "Witch": ( + left: ( + vox_spec: ("armor.witch.shoulder", (-5.0, -4.0 , -2.0)), + color: None + ), + right: ( + vox_spec: ("armor.witch.shoulder", (-1.0, -4.0, -2.0)), + color: None + ) + ), "Druid": ( left: ( vox_spec: ("armor.cloth.druid.shoulder", (-4.5, -4.0 , -3.5)), diff --git a/assets/voxygen/voxel/sprite/window/witch_purple.vox b/assets/voxygen/voxel/sprite/window/witch_purple.vox new file mode 100644 index 0000000000..fd8f3938e5 Binary files /dev/null and b/assets/voxygen/voxel/sprite/window/witch_purple.vox differ diff --git a/assets/voxygen/voxel/sprite_manifest.ron b/assets/voxygen/voxel/sprite_manifest.ron index 36e7be1102..f39631287e 100644 --- a/assets/voxygen/voxel/sprite_manifest.ron +++ b/assets/voxygen/voxel/sprite_manifest.ron @@ -3257,4 +3257,15 @@ EnsnaringVines: Some(( ], wind_sway: 0.0, )), +// WitchWindow +WitchWindow: Some(( + variations: [ + ( + model: "voxygen.voxel.sprite.window.witch_purple", + offset: (-5.5, -5.5, 0.0), + lod_axes: (0.0, 0.0, 0.0), + ), + ], + wind_sway: 0.0, +)), ) diff --git a/assets/world/manifests/spots_general/witch_hut.ron b/assets/world/manifests/spots_general/witch_hut.ron new file mode 100644 index 0000000000..63fa53e5e5 --- /dev/null +++ b/assets/world/manifests/spots_general/witch_hut.ron @@ -0,0 +1,15 @@ +#![enable(unwrap_newtypes)] + +[ + ( + specifier: "world.structure.natural.witch-hut-black_0", + center: (20, 23, 16), + custom_indices: { + 12: Sprite(Cauldron), + 10: Sprite(WitchWindow), + 44: Filled(GlowingRock, (r: 54, g: 180, b: 64)), + 8: Filled(Air, (r: 255, g: 255, b: 255)), + 249: Sprite(PotionMinor), + }, + ), +] diff --git a/assets/world/manifests/trees/quirky.ron b/assets/world/manifests/trees/tree_house.ron similarity index 56% rename from assets/world/manifests/trees/quirky.ron rename to assets/world/manifests/trees/tree_house.ron index c4f9a915f0..44f6d58d47 100644 --- a/assets/world/manifests/trees/quirky.ron +++ b/assets/world/manifests/trees/tree_house.ron @@ -1,10 +1,6 @@ #![enable(unwrap_newtypes)] -[ - ( - specifier: "world.structure.natural.witch-hut", - center: (10, 13, 9) - ), +[ ( specifier: "world.structure.natural.tree-house", center: (20, 15, 10) diff --git a/assets/world/structure/human/blacksmith.vox b/assets/world/structure/human/blacksmith.vox deleted file mode 100644 index 0de90d9cb7..0000000000 Binary files a/assets/world/structure/human/blacksmith.vox and /dev/null differ diff --git a/assets/world/structure/human/house_1.vox b/assets/world/structure/human/house_1.vox deleted file mode 100644 index 3f4f68d609..0000000000 Binary files a/assets/world/structure/human/house_1.vox and /dev/null differ diff --git a/assets/world/structure/human/house_2.vox b/assets/world/structure/human/house_2.vox deleted file mode 100644 index 2f80c03021..0000000000 Binary files a/assets/world/structure/human/house_2.vox and /dev/null differ diff --git a/assets/world/structure/human/mage_tower.vox b/assets/world/structure/human/mage_tower.vox deleted file mode 100644 index beb9925ab1..0000000000 Binary files a/assets/world/structure/human/mage_tower.vox and /dev/null differ diff --git a/assets/world/structure/human/stables_1.vox b/assets/world/structure/human/stables_1.vox deleted file mode 100644 index e1483da127..0000000000 Binary files a/assets/world/structure/human/stables_1.vox and /dev/null differ diff --git a/assets/world/structure/human/town_hall.vox b/assets/world/structure/human/town_hall.vox deleted file mode 100644 index f6c5c37c71..0000000000 Binary files a/assets/world/structure/human/town_hall.vox and /dev/null differ diff --git a/assets/world/structure/human/town_hall_spire.vox b/assets/world/structure/human/town_hall_spire.vox deleted file mode 100644 index 59248a0918..0000000000 Binary files a/assets/world/structure/human/town_hall_spire.vox and /dev/null differ diff --git a/assets/world/structure/natural/witch-hut-black_0.vox b/assets/world/structure/natural/witch-hut-black_0.vox new file mode 100644 index 0000000000..1af075b0ff Binary files /dev/null and b/assets/world/structure/natural/witch-hut-black_0.vox differ diff --git a/common/src/terrain/sprite.rs b/common/src/terrain/sprite.rs index aa20608b5b..347146c682 100644 --- a/common/src/terrain/sprite.rs +++ b/common/src/terrain/sprite.rs @@ -174,6 +174,7 @@ make_case_elim!( CeilingMushroom = 0x93, Orb = 0x94, EnsnaringVines = 0x95, + WitchWindow = 0x96, } ); @@ -244,7 +245,8 @@ impl SpriteKind { | SpriteKind::Window2 | SpriteKind::Window3 | SpriteKind::Window4 - | SpriteKind::DropGate => 1.0, + | SpriteKind::DropGate + | SpriteKind::WitchWindow => 1.0, // TODO: Figure out if this should be solid or not. SpriteKind::Shelf => 1.0, SpriteKind::Lantern => 0.9, diff --git a/world/src/layer/spot.rs b/world/src/layer/spot.rs index cb0a9224d6..68caa89ad0 100644 --- a/world/src/layer/spot.rs +++ b/world/src/layer/spot.rs @@ -34,7 +34,7 @@ pub enum Spot { // *Themed Spots* DwarvenGrave, GnarlingTotem, - //WitchHouse, + WitchHouse, //BanditCamp, //EnchantedRock, //TowerRuin, @@ -49,6 +49,7 @@ pub enum Spot { TreeStumpForest, DesertBones, AirshipCrash, + FruitTree, } // Available Biomes are: @@ -66,7 +67,22 @@ pub enum Spot { impl Spot { pub fn generate(world: &mut WorldSim) { + // Trees/spawn: false => *No* trees around the spot // Themed Spots -> Act as an introduction to themes of sites + Self::generate_spots( + Spot::WitchHouse, + world, + 2.0, + |g, c| { + g < 0.25 + && !c.near_cliffs() + && !c.river.near_water() + && !c.path.0.is_way() + && c.sites.is_empty() + && !matches!(c.get_biome(), BiomeKind::Ocean | BiomeKind::Mountain) + }, + false, + ); Self::generate_spots( Spot::DwarvenGrave, world, @@ -79,7 +95,7 @@ impl Spot { && c.sites.is_empty() && matches!(c.get_biome(), BiomeKind::Jungle | BiomeKind::Forest) }, - true, + false, ); Self::generate_spots( Spot::GnarlingTotem, @@ -93,7 +109,7 @@ impl Spot { && c.sites.is_empty() && matches!(c.get_biome(), BiomeKind::Forest | BiomeKind::Grassland) }, - true, + false, ); // Random World Objects -> Themed to their Biome and the NPCs that regularly // spawn there @@ -109,7 +125,7 @@ impl Spot { && c.sites.is_empty() && matches!(c.get_biome(), BiomeKind::Savannah) }, - true, + false, ); Self::generate_spots( Spot::TreeStumpForest, @@ -123,7 +139,7 @@ impl Spot { && c.sites.is_empty() && matches!(c.get_biome(), BiomeKind::Jungle | BiomeKind::Forest) }, - false, + true, ); Self::generate_spots( Spot::DesertBones, @@ -137,7 +153,7 @@ impl Spot { && c.sites.is_empty() && matches!(c.get_biome(), BiomeKind::Desert) }, - true, + false, ); Self::generate_spots( Spot::AirshipCrash, @@ -154,6 +170,20 @@ impl Spot { BiomeKind::Mountain | BiomeKind::Void | BiomeKind::Ocean ) }, + false, + ); + Self::generate_spots( + Spot::FruitTree, + world, + 20.0, + |g, c| { + g < 0.25 + && !c.near_cliffs() + && !c.river.near_water() + && !c.path.0.is_way() + && c.sites.is_empty() + && matches!(c.get_biome(), BiomeKind::Forest) + }, true, ); @@ -166,15 +196,12 @@ impl Spot { TowerRuinDesert WellOfLight Merchant Outpost -> Near a road! - *Quirky:* TreeHouse (Forest) TreeStump (Forest, Grassland) DesertBones (Desert, Savannah) AirshipCrash (Desert, Savannah, Grassland) EnchantedRock (Forest, Jungle) - - */ } @@ -240,6 +267,11 @@ pub fn apply_spots_to(canvas: &mut Canvas, _dynamic_rng: &mut impl Rng) { entity_radius: 60.0, entities: &[(6..12, "common.entity.spot.bandit_camp.dwarf_grave_robber")], }, + Spot::WitchHouse => SpotConfig { + base_structures: Some("spots_general.witch_hut"), + entity_radius: 1.0, + entities: &[(1..2, "common.entity.spot.bandit_camp.witch_dark")], + }, Spot::GnarlingTotem => SpotConfig { base_structures: Some("spots_grasslands.gnarling_totem"), entity_radius: 30.0, @@ -270,6 +302,11 @@ pub fn apply_spots_to(canvas: &mut Canvas, _dynamic_rng: &mut impl Rng) { entity_radius: 20.0, entities: &[(4..9, "common.entity.spot.bandit_camp.grim_salvager")], }, + Spot::FruitTree => SpotConfig { + base_structures: Some("trees.fruit_trees"), + entity_radius: 2.0, + entities: &[(0..2, "common.entity.wild.peaceful.bear")], + }, }; // Blit base structure if let Some(base_structures) = spot_config.base_structures {