More spots

This commit is contained in:
Joshua Barretto 2021-08-28 16:48:34 +01:00
parent 7ced7e184e
commit e05ca1f308
11 changed files with 156 additions and 12 deletions

View File

@ -0,0 +1,13 @@
EntityConfig (
name: Name("Myrmidon Hoplite"),
body: RandomWith("myrmidon"),
alignment: Alignment(Enemy),
loot: LootTable("common.loot_tables.dungeon.tier-4.enemy"),
hands: TwoHanded(Item("common.items.npc_weapons.biped_small.myrmidon.wooden_spear")),
meta: [
LoadoutAsset("common.loadout.dungeon.tier-4.myrmidon"),
],
)

View File

@ -0,0 +1,8 @@
#![enable(unwrap_newtypes)]
[
(
specifier: "world.structure.natural.saurok-altar",
center: (10, 13, 3),
),
]

View File

@ -0,0 +1,8 @@
#![enable(unwrap_newtypes)]
[
(
specifier: "world.structure.natural.myrmidon-temple",
center: (13, 23, 5),
),
]

View File

@ -0,0 +1,8 @@
#![enable(unwrap_newtypes)]
[
(
specifier: "world.structure.natural.rock-circle",
center: (30, 30, 4),
),
]

View File

@ -0,0 +1,8 @@
#![enable(unwrap_newtypes)]
[
(
specifier: "world.structure.natural.shipwreck",
center: (32, 14, 6),
),
]

View File

@ -3,6 +3,10 @@
[
(
specifier: "world.structure.natural.dwarven_grave",
center: (20, 23, 5)
center: (20, 23, 5),
custom_indices: {
151: Filled(GlowingRock, (r: 50, g: 255, b: 210)),
152: Filled(GlowingRock, (r: 36, g: 187, b: 151)),
},
),
]

BIN
assets/world/structure/natural/myrmidon-temple.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/world/structure/natural/rock-circle.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/world/structure/natural/saurok-altar.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/world/structure/natural/shipwreck.vox (Stored with Git LFS) Normal file

Binary file not shown.

View File

@ -33,6 +33,9 @@ use vek::*;
pub enum Spot {
// *Themed Spots*
DwarvenGrave,
SaurokAltar,
RockCircle,
MyrmidonTemple,
GnarlingTotem,
WitchHouse,
//BanditCamp,
@ -50,6 +53,7 @@ pub enum Spot {
DesertBones,
AirshipCrash,
FruitTree,
Shipwreck,
}
// Available Biomes are:
@ -67,6 +71,7 @@ pub enum Spot {
impl Spot {
pub fn generate(world: &mut WorldSim) {
use BiomeKind::*;
// Trees/spawn: false => *No* trees around the spot
// Themed Spots -> Act as an introduction to themes of sites
Self::generate_spots(
@ -79,7 +84,10 @@ impl Spot {
&& !c.river.near_water()
&& !c.path.0.is_way()
&& c.sites.is_empty()
&& !matches!(c.get_biome(), BiomeKind::Ocean | BiomeKind::Mountain)
&& matches!(
c.get_biome(),
Grassland | Forest | Taiga | Snowland | Jungle
)
},
false,
);
@ -93,7 +101,48 @@ impl Spot {
&& !c.river.near_water()
&& !c.path.0.is_way()
&& c.sites.is_empty()
&& matches!(c.get_biome(), BiomeKind::Jungle | BiomeKind::Forest)
&& matches!(c.get_biome(), Jungle | Forest)
},
false,
);
Self::generate_spots(
Spot::SaurokAltar,
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(), Jungle | Forest)
},
false,
);
Self::generate_spots(
Spot::RockCircle,
world,
2.0,
|g, c| {
g < 0.1
&& !c.near_cliffs()
&& !c.river.near_water()
&& !c.path.0.is_way()
&& c.sites.is_empty()
},
false,
);
Self::generate_spots(
Spot::MyrmidonTemple,
world,
3.0,
|g, c| {
g < 0.1
&& !c.near_cliffs()
&& !c.river.near_water()
&& !c.path.0.is_way()
&& c.sites.is_empty()
&& matches!(c.get_biome(), Desert | Jungle)
},
false,
);
@ -107,7 +156,7 @@ impl Spot {
&& !c.river.near_water()
&& !c.path.0.is_way()
&& c.sites.is_empty()
&& matches!(c.get_biome(), BiomeKind::Forest | BiomeKind::Grassland)
&& matches!(c.get_biome(), Forest | Grassland)
},
false,
);
@ -123,7 +172,7 @@ impl Spot {
&& !c.river.near_water()
&& !c.path.0.is_way()
&& c.sites.is_empty()
&& matches!(c.get_biome(), BiomeKind::Savannah)
&& matches!(c.get_biome(), Savannah)
},
false,
);
@ -137,7 +186,7 @@ impl Spot {
&& !c.river.near_water()
&& !c.path.0.is_way()
&& c.sites.is_empty()
&& matches!(c.get_biome(), BiomeKind::Jungle | BiomeKind::Forest)
&& matches!(c.get_biome(), Jungle | Forest)
},
true,
);
@ -151,7 +200,7 @@ impl Spot {
&& !c.river.near_water()
&& !c.path.0.is_way()
&& c.sites.is_empty()
&& matches!(c.get_biome(), BiomeKind::Desert)
&& matches!(c.get_biome(), Desert)
},
false,
);
@ -165,10 +214,7 @@ impl Spot {
&& !c.river.near_water()
&& !c.path.0.is_way()
&& c.sites.is_empty()
&& !matches!(
c.get_biome(),
BiomeKind::Mountain | BiomeKind::Void | BiomeKind::Ocean
)
&& !matches!(c.get_biome(), Mountain | Void | Ocean)
},
false,
);
@ -182,7 +228,16 @@ impl Spot {
&& !c.river.near_water()
&& !c.path.0.is_way()
&& c.sites.is_empty()
&& matches!(c.get_biome(), BiomeKind::Forest)
&& matches!(c.get_biome(), Forest)
},
true,
);
Self::generate_spots(
Spot::Shipwreck,
world,
4.0,
|g, c| {
g < 0.25 && c.is_underwater() && c.sites.is_empty() && c.water_alt > c.alt + 30.0
},
true,
);
@ -267,6 +322,29 @@ 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::SaurokAltar => SpotConfig {
base_structures: Some("spots.jungle.saurok-altar"),
entity_radius: 6.0,
entities: &[
(2..4, "common.entity.wild.aggressive.occult_saurok"),
(2..4, "common.entity.wild.aggressive.sly_saurok"),
(2..4, "common.entity.wild.aggressive.mighty_saurok"),
],
},
Spot::RockCircle => SpotConfig {
base_structures: Some("spots.rock-circle"),
entity_radius: 20.0,
entities: &[
(0..2, "common.entity.wild.aggressive.archaeos"),
(0..2, "common.entity.wild.aggressive.ntouka"),
(0..2, "common.entity.wild.aggressive.dreadhorn"),
],
},
Spot::MyrmidonTemple => SpotConfig {
base_structures: Some("spots.myrmidon-temple"),
entity_radius: 10.0,
entities: &[(8..10, "common.entity.spot.myrmidon.spear")],
},
Spot::WitchHouse => SpotConfig {
base_structures: Some("spots_general.witch_hut"),
entity_radius: 1.0,
@ -311,6 +389,11 @@ pub fn apply_spots_to(canvas: &mut Canvas, _dynamic_rng: &mut impl Rng) {
entity_radius: 2.0,
entities: &[(0..2, "common.entity.wild.peaceful.bear")],
},
Spot::Shipwreck => SpotConfig {
base_structures: Some("spots.water.shipwreck"),
entity_radius: 2.0,
entities: &[(0..2, "common.entity.wild.peaceful.clownfish")],
},
};
// Blit base structure
if let Some(base_structures) = spot_config.base_structures {