Merge branch 'slipped/tweaks' into 'master'

more spots

See merge request veloren/veloren!2806
This commit is contained in:
Joshua Barretto 2021-09-04 18:16:10 +00:00
commit 7538f29b9e
60 changed files with 746 additions and 51 deletions

View File

@ -0,0 +1,13 @@
EntityConfig (
name: Name("Gnome"),
body: RandomWith("gnome"),
alignment: Alignment(Wild),
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.spots.gnome"),
],
)

View File

@ -9,5 +9,6 @@ EntityConfig (
meta: [
LoadoutAsset("common.loadout.dungeon.tier-4.myrmidon"),
],
)

View File

@ -0,0 +1,24 @@
EntityConfig (
name: Name("Pirate"),
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: Paired(Item("common.items.weapons.sword_1h.iron-2")),
meta: [
SkillSetAsset("common.skillset.dungeon.tier-5.sword"),
LoadoutAsset("common.loadout.spots.pirate"),
],
)

View File

@ -0,0 +1,19 @@
ItemDef(
name: "Pirate Belt",
description: "",
kind: Armor((
kind: Belt("Pirate"),
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: [
],
)

View File

@ -0,0 +1,19 @@
ItemDef(
name: "Pirate Jacket",
description: "",
kind: Armor((
kind: Chest("Pirate"),
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: [
],
)

View File

@ -0,0 +1,19 @@
ItemDef(
name: "Pirate Boots",
description: "",
kind: Armor((
kind: Foot("Pirate"),
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: [
],
)

View File

@ -0,0 +1,19 @@
ItemDef(
name: "Pirate Gloves",
description: "",
kind: Armor((
kind: Hand("Pirate"),
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: [
],
)

View File

@ -0,0 +1,19 @@
ItemDef(
name: "Pirate Hat",
description: "",
kind: Armor((
kind: Head("Pirate"),
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: [
],
)

View File

@ -0,0 +1,19 @@
ItemDef(
name: "Pirate Pants",
description: "",
kind: Armor((
kind: Pants("Pirate"),
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: [
],
)

View File

@ -0,0 +1,19 @@
ItemDef(
name: "Pirate Mantle",
description: "",
kind: Armor((
kind: Shoulder("Pirate"),
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: [
],
)

View File

@ -14,6 +14,6 @@ ItemDef(
)),
quality: Epic,
tags: [
Cultist,
],
)

View File

@ -14,6 +14,6 @@ ItemDef(
)),
quality: Epic,
tags: [
Cultist,
],
)

View File

@ -14,6 +14,6 @@ ItemDef(
)),
quality: Epic,
tags: [
Cultist,
],
)

View File

@ -14,6 +14,6 @@ ItemDef(
)),
quality: Epic,
tags: [
Cultist,
],
)

View File

@ -14,6 +14,6 @@ ItemDef(
)),
quality: Epic,
tags: [
Cultist,
],
)

View File

@ -14,6 +14,6 @@ ItemDef(
)),
quality: Epic,
tags: [
Cultist,
],
)

View File

@ -14,6 +14,6 @@ ItemDef(
)),
quality: Epic,
tags: [
Cultist,
],
)

View File

@ -14,6 +14,6 @@ ItemDef(
)),
quality: Epic,
tags: [
Cultist,
],
)

View File

@ -0,0 +1,17 @@
ItemDef(
name: "Gnome",
description: "Ceremonial attire used by members.",
kind: Armor((
kind: Chest("Gnome"),
stats: (
protection: Normal(36.0),
poise_resilience: Normal(1.0),
energy_max: 0,
energy_reward: 0.0,
crit_power: 0.0,
stealth: 0.0,
),
)),
quality: Low,
tags: [],
)

View File

@ -0,0 +1,17 @@
ItemDef(
name: "Gnome",
description: "Ceremonial attire used by members.",
kind: Armor((
kind: Foot("Gnome"),
stats: (
protection: Normal(1.0),
poise_resilience: Normal(1.0),
energy_max: 0,
energy_reward: 0.0,
crit_power: 0.0,
stealth: 0.0,
),
)),
quality: Low,
tags: [],
)

View File

@ -0,0 +1,17 @@
ItemDef(
name: "Gnome",
description: "Ceremonial attire used by members..",
kind: Armor((
kind: Hand("Gnome"),
stats: (
protection: Normal(1.0),
poise_resilience: Normal(1.0),
energy_max: 0,
energy_reward: 0.0,
crit_power: 0.0,
stealth: 0.0,
),
)),
quality: Low,
tags: [],
)

View File

@ -0,0 +1,17 @@
ItemDef(
name: "Gnome",
description: "Ceremonial attire used by members.",
kind: Armor((
kind: Head("Gnome"),
stats: (
protection: Normal(1.0),
poise_resilience: Normal(1.0),
energy_max: 0,
energy_reward: 0.0,
crit_power: 0.0,
stealth: 0.0,
),
)),
quality: Low,
tags: [],
)

View File

@ -0,0 +1,17 @@
ItemDef(
name: "Gnome",
description: "Ceremonial attire used by members..",
kind: Armor((
kind: Pants("Gnome"),
stats: (
protection: Normal(1.0),
poise_resilience: Normal(1.0),
energy_max: 0,
energy_reward: 0.0,
crit_power: 0.0,
stealth: 0.0,
),
)),
quality: Low,
tags: [],
)

View File

@ -0,0 +1,7 @@
({
Armor(Head): Item("common.items.npc_armor.biped_small.gnome.head.gnome"),
Armor(Feet): Item("common.items.npc_armor.biped_small.gnome.foot.gnome"),
Armor(Hands): Item("common.items.npc_armor.biped_small.gnome.hand.gnome"),
Armor(Chest): Item("common.items.npc_armor.biped_small.gnome.chest.gnome"),
Armor(Legs): Item("common.items.npc_armor.biped_small.gnome.pants.gnome"),
})

View File

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

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

View File

@ -100,6 +100,14 @@
vox_spec: ("armor.savage.belt", (-4.0, -4.0, 1.0)),
color: None
),
"Witch":(
vox_spec: ("armor.witch.belt", (-4.0, -3.5, -2.0)),
color: None
),
"Pirate":(
vox_spec: ("armor.pirate.belt", (-4.0, -4.0, 2.5)),
color: None
),
"Linen":(
vox_spec: ("armor.cloth.linen.belt", (-4.0, -4.0, 0.0)),
color: None
@ -112,10 +120,6 @@
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

@ -170,6 +170,14 @@
vox_spec: ("armor.hide.savage.chest", (-7.0, -4.0, 1.0)),
color: None
),
"Witch": (
vox_spec: ("armor.witch.chest", (-7.0, -4.0, 2.0)),
color: None
),
"Pirate": (
vox_spec: ("armor.pirate.chest", (-7.0, -4.0, 2.0)),
color: None
),
"Linen": (
vox_spec: ("armor.cloth.linen.chest", (-7.0, -4.0, 2.0)),
color: None
@ -182,10 +190,6 @@
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

@ -100,6 +100,14 @@
vox_spec: ("armor.savage.foot", (-2.5, -3.5, -2.0)),
color: None
),
"Witch": (
vox_spec: ("armor.witch.foot", (-2.5, -3.5, -2.0)),
color: None
),
"Pirate": (
vox_spec: ("armor.pirate.foot", (-2.5, -3.5, -2.0)),
color: None
),
"Linen": (
vox_spec: ("armor.cloth.linen.foot", (-2.5, -3.5, -2.0)),
color: None
@ -112,10 +120,6 @@
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

@ -220,6 +220,26 @@
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
)
),
"Pirate": (
left: (
vox_spec: ("armor.pirate.hand", (-2.5, -2.5, -4.0)),
color: None
),
right: (
vox_spec: ("armor.pirate.hand", (-1.5, -2.5, -4.0)),
color: None
)
),
"Linen": (
left: (
vox_spec: ("armor.cloth.linen.hand", (-1.5, -2.0, -3.0)),
@ -250,16 +270,6 @@
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

@ -32,5 +32,9 @@
vox_spec: ("armor.witch.hat", (-2.0, -2.0, 5.0)),
color: None
),
(Human, "Pirate"): (
vox_spec: ("armor.pirate.hat", (-2.0, -2.0, 5.0)),
color: None
),
}
))

View File

@ -128,6 +128,14 @@
vox_spec: ("armor.savage.pants", (-5.0, -4.0, 0.5)),
color: None
),
"Witch": (
vox_spec: ("armor.witch.pants", (-5.0, -4.0, 0.5)),
color: None
),
"Pirate": (
vox_spec: ("armor.pirate.pants", (-5.0, -4.0, 1.5)),
color: None
),
"Linen": (
vox_spec: ("armor.cloth.linen.pants", (-5.0, -4.0, 0.5)),
color: None
@ -140,10 +148,6 @@
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

@ -301,6 +301,26 @@
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
)
),
"Pirate": (
left: (
vox_spec: ("armor.pirate.shoulder", (-5.0, -4.0 , -2.0)),
color: None
),
right: (
vox_spec: ("armor.empty", (-3.0, -3.5, 1.0)),
color: None
)
),
"Linen": (
left: (
vox_spec: ("armor.cloth.linen.shoulder", (-3.5, -4.0 , -1.0)),
@ -331,16 +351,6 @@
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)),

View File

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

View File

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

View File

@ -3,6 +3,6 @@
[
(
specifier: "world.structure.natural.shipwreck",
center: (32, 14, 6),
center: (32, 14, 16),
),
]

View File

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

View File

@ -0,0 +1,16 @@
#![enable(unwrap_newtypes)]
[
(
specifier: "world.structure.natural.pirate_hideout",
center: (32, 27, 5),
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),
251: Sprite(Ember),
},
),
]

View File

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

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

View File

@ -7,6 +7,7 @@ SpawnEntry (
// Casual
(5, (1, 1, "common.entity.wild.aggressive.asp")),
(5, (1, 1, "common.entity.wild.aggressive.tiger")),
(5, (1, 1, "common.entity.wild.aggressive.maneater")),
// Rare
(1, (1, 1, "common.entity.wild.aggressive.sunlizard")),
(1, (1, 1, "common.entity.wild.aggressive.odonto")),

View File

@ -0,0 +1,116 @@
use super::{
super::{vek::*, Animation},
BipedSmallSkeleton, SkeletonAttr,
};
use common::{comp::item::ToolKind, states::utils::StageSection};
use std::f32::consts::PI;
pub struct BeamAnimation;
type BeamAnimationDependency = (
Option<ToolKind>,
Vec3<f32>,
Vec3<f32>,
Vec3<f32>,
f32,
Vec3<f32>,
f32,
Option<StageSection>,
f32,
);
impl Animation for BeamAnimation {
type Dependency<'a> = BeamAnimationDependency;
type Skeleton = BipedSmallSkeleton;
#[cfg(feature = "use-dyn-lib")]
const UPDATE_FN: &'static [u8] = b"biped_small_beam\0";
#[cfg_attr(feature = "be-dyn-lib", export_name = "biped_small_beam")]
fn update_skeleton_inner<'a>(
skeleton: &Self::Skeleton,
(
_active_tool_kind,
velocity,
_orientation,
_last_ori,
_global_time,
_avg_vel,
_acc_vel,
stage_section,
_timer,
): Self::Dependency<'a>,
anim_time: f32,
_rate: &mut f32,
s_a: &SkeletonAttr,
) -> Self::Skeleton {
let mut next = (*skeleton).clone();
let speed = Vec2::<f32>::from(velocity).magnitude();
let fast = (anim_time * 10.0).sin();
let fastalt = (anim_time * 10.0 + PI / 2.0).sin();
let speednorm = speed / 9.4;
let speednormcancel = 1.0 - speednorm;
next.head.position = Vec3::new(0.0, s_a.head.0, s_a.head.1 + fast * -0.1 * speednormcancel);
next.head.orientation = Quaternion::rotation_x(0.45 * speednorm)
* Quaternion::rotation_y(fast * 0.07 * speednormcancel);
next.chest.position = Vec3::new(
0.0,
s_a.chest.0,
s_a.chest.1 + fastalt * 0.4 * speednormcancel + speednormcancel * -0.5,
);
next.pants.position = Vec3::new(0.0, s_a.pants.0, s_a.pants.1);
next.tail.position = Vec3::new(0.0, s_a.tail.0, s_a.tail.1);
next.tail.orientation = Quaternion::rotation_x(0.05 * fastalt * speednormcancel)
* Quaternion::rotation_z(fast * 0.15 * speednormcancel);
next.main.position = Vec3::new(0.0, 0.0, 0.0);
next.main.orientation = Quaternion::rotation_x(0.0);
next.hand_l.position = Vec3::new(s_a.grip.0 * 4.0, 0.0, s_a.grip.2);
next.hand_r.position = Vec3::new(-s_a.grip.0 * 4.0, 0.0, s_a.grip.2);
next.hand_l.orientation = Quaternion::rotation_x(0.0);
next.hand_r.orientation = Quaternion::rotation_x(0.0);
let (move1base, move2base, move3) = match stage_section {
Some(StageSection::Buildup) => (anim_time.powf(0.25), 0.0, 0.0),
Some(StageSection::Action) => (1.0, (anim_time * 4.0).sin(), 0.0),
Some(StageSection::Recover) => (1.0, 1.0, anim_time),
_ => (0.0, 0.0, 0.0),
};
let pullback = 1.0 - move3;
let move1abs = move1base * pullback;
next.control_l.position = Vec3::new(2.0 - s_a.grip.0 * 2.0, 1.0, 3.0);
next.control_r.position = Vec3::new(
7.0 + s_a.grip.0 * 2.0 + move1abs * -8.0,
-4.0 + move1abs * 0.0,
3.0 + move1abs * 10.0,
);
next.control.position = Vec3::new(
-5.0,
-1.0 + s_a.grip.2,
-2.0 + -s_a.grip.2 / 2.5 + s_a.grip.0 * -2.0 + move1abs * 5.0,
);
next.control_l.orientation = Quaternion::rotation_x(PI / 2.0 + move1abs * 0.8)
* Quaternion::rotation_y(-0.3)
* Quaternion::rotation_z(-0.3);
next.control_r.orientation =
Quaternion::rotation_x(PI / 2.0 + s_a.grip.0 * 0.2 + move1abs * 0.8)
* Quaternion::rotation_y(-0.4 + s_a.grip.0 * 0.2 + move1abs * 0.8)
* Quaternion::rotation_z(-0.0 + move1abs * 2.0 + move2base * 0.6);
next.control.orientation = Quaternion::rotation_x(-0.3 + move1abs * -0.6)
* Quaternion::rotation_y(-0.2 * speednorm + move1abs * 0.8)
* Quaternion::rotation_z(0.5 + move1abs * 0.6);
next
}
}

View File

@ -1,4 +1,5 @@
pub mod alpha;
pub mod beam;
pub mod dash;
pub mod idle;
pub mod run;
@ -8,8 +9,8 @@ pub mod wield;
// Reexports
pub use self::{
alpha::AlphaAnimation, dash::DashAnimation, idle::IdleAnimation, run::RunAnimation,
shoot::ShootAnimation, stunned::StunnedAnimation, wield::WieldAnimation,
alpha::AlphaAnimation, beam::BeamAnimation, dash::DashAnimation, idle::IdleAnimation,
run::RunAnimation, shoot::ShootAnimation, stunned::StunnedAnimation, wield::WieldAnimation,
};
use super::{make_bone, vek::*, FigureBoneData, Offsets, Skeleton};

View File

@ -55,13 +55,14 @@ impl Animation for RollAnimation {
Some(StageSection::Recover) => (1.0, 1.0, anim_time.powf(0.75)),
_ => (0.0, 0.0, 0.0),
};
let movement1 = movement1base * (1.0 - movement3);
let pullback = 1.0 - movement3;
let movement1 = movement1base * pullback;
next.head.position = Vec3::new(
0.0,
s_a.head.0 + 3.0 * movement1,
s_a.head.0 + 1.5 * movement1,
s_a.head.1 - 1.0 * movement1,
);
next.head.orientation = Quaternion::rotation_x(-0.75 * movement1base + 0.75 * movement2);
next.head.orientation = Quaternion::rotation_x(-0.3 * movement1);
next.chest.position = Vec3::new(0.0, s_a.chest.0, -9.5 * movement1 + s_a.chest.1);
next.chest.orientation = Quaternion::rotation_x(-0.2 * movement1);

View File

@ -2893,6 +2893,37 @@ impl FigureMgr {
skeleton_attr,
)
},
CharacterState::RepeaterRanged(s) => {
let stage_time = s.timer.as_secs_f32();
let stage_progress = match s.stage_section {
StageSection::Buildup => {
stage_time / s.static_data.buildup_duration.as_secs_f32()
},
StageSection::Recover => {
stage_time / s.static_data.recover_duration.as_secs_f32()
},
_ => 0.0,
};
anim::biped_small::ShootAnimation::update_skeleton(
&target_base,
(
active_tool_kind,
rel_vel,
ori * anim::vek::Vec3::<f32>::unit_y(),
state.last_ori * anim::vek::Vec3::<f32>::unit_y(),
time,
rel_avg_vel,
state.acc_vel,
Some(s.stage_section),
state.state_time,
),
stage_progress,
&mut state_animation_rate,
skeleton_attr,
)
},
CharacterState::BasicRanged(s) => {
let stage_time = s.timer.as_secs_f32();
@ -2924,6 +2955,36 @@ impl FigureMgr {
skeleton_attr,
)
},
CharacterState::BasicBeam(s) => {
let stage_time = s.timer.as_secs_f32();
let stage_progress = match s.stage_section {
StageSection::Buildup => {
stage_time / s.static_data.buildup_duration.as_secs_f32()
},
StageSection::Action => s.timer.as_secs_f32(),
StageSection::Recover => {
stage_time / s.static_data.recover_duration.as_secs_f32()
},
_ => 0.0,
};
anim::biped_small::BeamAnimation::update_skeleton(
&target_base,
(
active_tool_kind,
rel_vel,
ori * anim::vek::Vec3::<f32>::unit_y(),
state.last_ori * anim::vek::Vec3::<f32>::unit_y(),
time,
rel_avg_vel,
state.acc_vel,
Some(s.stage_section),
state.state_time,
),
stage_progress,
&mut state_animation_rate,
skeleton_attr,
)
},
CharacterState::ComboMelee(s) => {
let stage_index = (s.stage - 1) as usize;
let stage_time = s.timer.as_secs_f32();

View File

@ -37,6 +37,10 @@ pub enum Spot {
MyrmidonTemple,
GnarlingTotem,
WitchHouse,
PirateHideout,
BigMushroom,
WolfBurrow,
Igloo,
//BanditCamp,
//EnchantedRock,
//TowerRuin,
@ -50,6 +54,7 @@ pub enum Spot {
LionRock,
TreeStumpForest,
DesertBones,
Arch,
AirshipCrash,
FruitTree,
Shipwreck,
@ -77,6 +82,34 @@ impl Spot {
},
false,
);
Self::generate_spots(
Spot::Igloo,
world,
100.0,
|g, c| {
g < 0.5
&& !c.near_cliffs()
&& !c.river.near_water()
&& !c.path.0.is_way()
&& c.sites.is_empty()
&& matches!(c.get_biome(), Snowland)
},
false,
);
Self::generate_spots(
Spot::PirateHideout,
world,
3.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(), Forest | Jungle)
},
false,
);
Self::generate_spots(
Spot::DwarvenGrave,
world,
@ -162,6 +195,20 @@ impl Spot {
},
false,
);
Self::generate_spots(
Spot::WolfBurrow,
world,
10.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(), Forest | Grassland)
},
false,
);
Self::generate_spots(
Spot::TreeStumpForest,
world,
@ -190,6 +237,20 @@ impl Spot {
},
false,
);
Self::generate_spots(
Spot::Arch,
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(), Desert)
},
false,
);
Self::generate_spots(
Spot::AirshipCrash,
world,
@ -218,6 +279,20 @@ impl Spot {
},
true,
);
Self::generate_spots(
Spot::BigMushroom,
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(), Forest)
},
true,
);
Self::generate_spots(
Spot::Shipwreck,
world,
@ -342,6 +417,24 @@ pub fn apply_spots_to(canvas: &mut Canvas, _dynamic_rng: &mut impl Rng) {
(0..3, "common.entity.wild.peaceful.frog"),
],
},
Spot::Igloo => SpotConfig {
base_structures: Some("spots_general.igloo"),
entity_radius: 2.0,
entities: &[
(3..5, "common.entity.dungeon.tier-1.spear"),
(3..5, "common.entity.dungeon.tier-1.bow"),
(2..3, "common.entity.dungeon.tier-1.staff"),
],
},
Spot::PirateHideout => SpotConfig {
base_structures: Some("spots_general.pirate_hideout"),
entity_radius: 70.0,
entities: &[
(12..16, "common.entity.spot.pirate"),
(2..4, "common.entity.wild.peaceful.parrot"),
(4..6, "common.entity.wild.peaceful.rat"),
],
},
Spot::GnarlingTotem => SpotConfig {
base_structures: Some("spots_grasslands.gnarling_totem"),
entity_radius: 30.0,
@ -357,16 +450,26 @@ pub fn apply_spots_to(canvas: &mut Canvas, _dynamic_rng: &mut impl Rng) {
entity_radius: 20.0,
entities: &[(5..8, "common.entity.wild.aggressive.lion")],
},
Spot::WolfBurrow => SpotConfig {
base_structures: Some("spots_savannah.wolf_burrow"),
entity_radius: 0.2,
entities: &[(5..8, "common.entity.wild.aggressive.wolf")],
},
Spot::TreeStumpForest => SpotConfig {
base_structures: Some("trees.oak_stumps"),
entity_radius: 30.0,
entities: &[(0..2, "common.entity.wild.aggressive.deadwood")],
},
Spot::DesertBones => SpotConfig {
base_structures: Some("trees.quirky_dry"),
base_structures: Some("spots.bones"),
entity_radius: 40.0,
entities: &[(4..9, "common.entity.wild.aggressive.hyena")],
},
Spot::Arch => SpotConfig {
base_structures: Some("spots.arch"),
entity_radius: 50.0,
entities: &[(2..3, "common.entity.wild.aggressive.ngoubou")],
},
Spot::AirshipCrash => SpotConfig {
base_structures: Some("trees.airship_crash"),
entity_radius: 20.0,
@ -377,6 +480,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::BigMushroom => SpotConfig {
base_structures: Some("spots.big-mushroom"),
entity_radius: 40.0,
entities: &[(7..10, "common.entity.spot.gnome.spear")],
},
Spot::Shipwreck => SpotConfig {
base_structures: Some("spots.water.shipwreck"),
entity_radius: 2.0,