witch stuff

This commit is contained in:
Monty Marz 2021-08-02 22:46:43 +02:00 committed by Joshua Barretto
parent 328fc190d1
commit 771a380e6c
44 changed files with 373 additions and 37 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"),
})

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

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

BIN
assets/voxygen/voxel/sprite/window/witch_purple.vox (Stored with Git LFS) Normal file

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.

BIN
assets/world/structure/human/house_1.vox (Stored with Git LFS)

Binary file not shown.

BIN
assets/world/structure/human/house_2.vox (Stored with Git LFS)

Binary file not shown.

Binary file not shown.

BIN
assets/world/structure/human/stables_1.vox (Stored with Git LFS)

Binary file not shown.

BIN
assets/world/structure/human/town_hall.vox (Stored with Git LFS)

Binary file not shown.

Binary file not shown.

BIN
assets/world/structure/natural/witch-hut-black_0.vox (Stored with Git LFS) Normal file

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 {