witch stuff

This commit is contained in:
Monty Marz
2021-08-02 22:46:43 +02:00
committed by Joshua Barretto
parent 7ae50e3a9f
commit f3b56796ed
44 changed files with 343 additions and 16 deletions

View File

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

View File

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

View File

@ -0,0 +1,11 @@
EntityConfig (
name: Name("Well-fed Bear"),
body: RandomWith("bear"),
alignment: Alignment(Wild),
loot: Uninit,
hands: Uninit,
meta: [],
)

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

Binary file not shown.

View File

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

View File

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

View File

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

Binary file not shown.

View File

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

View File

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