Adds flame wyvern npc

This commit is contained in:
Snowram 2021-04-27 23:11:45 +02:00
parent 33e9bc79e3
commit 3850cae20f
20 changed files with 205 additions and 23 deletions

View File

@ -1120,6 +1120,10 @@
keyword: "roc", keyword: "roc",
generic: "Roc" generic: "Roc"
), ),
wyvern_flame: (
keyword: "wyvern_flame",
generic: "Flame Wyvern"
),
) )
), ),
quadruped_low: ( quadruped_low: (

View File

@ -155,4 +155,56 @@
central: ("npc.roc.male.tail_rear"), central: ("npc.roc.male.tail_rear"),
) )
), ),
(FlameWyvern, Male): (
head: (
offset: (-5.5, -5.0, 0.0),
central: ("npc.wyvern_flame.male.head"),
),
beak: (
offset: (-2.5, 0.0, -5.0),
central: ("npc.wyvern_flame.male.beak"),
),
neck: (
offset: (-2.5, 0.0, -3.5),
central: ("npc.wyvern_flame.male.neck"),
),
chest: (
offset: (-6.5, -12.0, -9.0),
central: ("npc.wyvern_flame.male.chest"),
),
tail_front: (
offset: (-2.5, -12.0, -7.0),
central: ("npc.wyvern_flame.male.tail_front"),
),
tail_rear: (
offset: (-4.5, -29.0, -8.0),
central: ("npc.wyvern_flame.male.tail_rear"),
)
),
(FlameWyvern, Female): (
head: (
offset: (-5.5, -5.0, 0.0),
central: ("npc.wyvern_flame.male.head"),
),
beak: (
offset: (-2.5, 0.0, -5.0),
central: ("npc.wyvern_flame.male.beak"),
),
neck: (
offset: (-2.5, 0.0, -3.5),
central: ("npc.wyvern_flame.male.neck"),
),
chest: (
offset: (-6.5, -12.0, -9.0),
central: ("npc.wyvern_flame.male.chest"),
),
tail_front: (
offset: (-2.5, -12.0, -7.0),
central: ("npc.wyvern_flame.male.tail_front"),
),
tail_rear: (
offset: (-4.5, -29.0, -8.0),
central: ("npc.wyvern_flame.male.tail_rear"),
)
),
}) })

View File

@ -251,4 +251,88 @@
lateral: ("npc.roc.male.foot_r"), lateral: ("npc.roc.male.foot_r"),
) )
), ),
(FlameWyvern, Male): (
wing_in_l: (
offset: (-24.0, -9.0, -4.0),
lateral: ("npc.wyvern_flame.male.wing_in_r"),
),
wing_in_r: (
offset: (0.0, -9.0, -4.0),
lateral: ("npc.wyvern_flame.male.wing_in_r"),
),
wing_mid_l: (
offset: (-17.0, -27.0, -2.0),
lateral: ("npc.wyvern_flame.male.wing_mid_r"),
),
wing_mid_r: (
offset: (0.0, -27.0, -2.0),
lateral: ("npc.wyvern_flame.male.wing_mid_r"),
),
wing_out_l: (
offset: (-33.0, -31.0, -2.0),
lateral: ("npc.wyvern_flame.male.wing_out_r"),
),
wing_out_r: (
offset: (0.0, -31.0, -2.0),
lateral: ("npc.wyvern_flame.male.wing_out_r"),
),
leg_l: (
offset: (-3.0, -4.5, -5.5),
lateral: ("npc.wyvern_flame.male.leg_r"),
),
leg_r: (
offset: (-3.0, -4.5, -5.5),
lateral: ("npc.wyvern_flame.male.leg_r"),
),
foot_l: (
offset: (-3.5, -6.5, -13.0),
lateral: ("npc.wyvern_flame.male.foot_r"),
),
foot_r: (
offset: (-3.5, -6.5, -13.0),
lateral: ("npc.wyvern_flame.male.foot_r"),
)
),
(FlameWyvern, Female): (
wing_in_l: (
offset: (-24.0, -9.0, -4.0),
lateral: ("npc.wyvern_flame.male.wing_in_r"),
),
wing_in_r: (
offset: (0.0, -9.0, -4.0),
lateral: ("npc.wyvern_flame.male.wing_in_r"),
),
wing_mid_l: (
offset: (-17.0, -27.0, -2.0),
lateral: ("npc.wyvern_flame.male.wing_mid_r"),
),
wing_mid_r: (
offset: (0.0, -27.0, -2.0),
lateral: ("npc.wyvern_flame.male.wing_mid_r"),
),
wing_out_l: (
offset: (-33.0, -31.0, -2.0),
lateral: ("npc.wyvern_flame.male.wing_out_r"),
),
wing_out_r: (
offset: (0.0, -31.0, -2.0),
lateral: ("npc.wyvern_flame.male.wing_out_r"),
),
leg_l: (
offset: (-3.0, -4.5, -5.5),
lateral: ("npc.wyvern_flame.male.leg_r"),
),
leg_r: (
offset: (-3.0, -4.5, -5.5),
lateral: ("npc.wyvern_flame.male.leg_r"),
),
foot_l: (
offset: (-3.5, -6.5, -13.0),
lateral: ("npc.wyvern_flame.male.foot_r"),
),
foot_r: (
offset: (-3.5, -6.5, -13.0),
lateral: ("npc.wyvern_flame.male.foot_r"),
)
),
}) })

BIN
assets/voxygen/voxel/npc/wyvern_flame/male/beak.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/npc/wyvern_flame/male/chest.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/npc/wyvern_flame/male/foot_r.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/npc/wyvern_flame/male/head.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/npc/wyvern_flame/male/leg_r.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/npc/wyvern_flame/male/neck.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/npc/wyvern_flame/male/tail_front.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/npc/wyvern_flame/male/tail_rear.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/npc/wyvern_flame/male/wing_in_r.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/npc/wyvern_flame/male/wing_mid_r.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/npc/wyvern_flame/male/wing_out_r.vox (Stored with Git LFS) Normal file

Binary file not shown.

View File

@ -447,6 +447,7 @@ impl Body {
bird_large::Species::Cockatrice => 4000, bird_large::Species::Cockatrice => 4000,
bird_large::Species::Phoenix => 6000, bird_large::Species::Phoenix => 6000,
bird_large::Species::Roc => 5000, bird_large::Species::Roc => 5000,
bird_large::Species::FlameWyvern => 6000,
}, },
Body::Humanoid(_) => 750, Body::Humanoid(_) => 750,
_ => 1000, _ => 1000,

View File

@ -37,6 +37,7 @@ make_case_elim!(
Phoenix = 0, Phoenix = 0,
Cockatrice = 1, Cockatrice = 1,
Roc = 2, Roc = 2,
FlameWyvern = 3,
} }
); );
@ -48,6 +49,7 @@ pub struct AllSpecies<SpeciesMeta> {
pub phoenix: SpeciesMeta, pub phoenix: SpeciesMeta,
pub cockatrice: SpeciesMeta, pub cockatrice: SpeciesMeta,
pub roc: SpeciesMeta, pub roc: SpeciesMeta,
pub wyvern_flame: SpeciesMeta,
} }
impl<'a, SpeciesMeta> core::ops::Index<&'a Species> for AllSpecies<SpeciesMeta> { impl<'a, SpeciesMeta> core::ops::Index<&'a Species> for AllSpecies<SpeciesMeta> {
@ -59,11 +61,17 @@ impl<'a, SpeciesMeta> core::ops::Index<&'a Species> for AllSpecies<SpeciesMeta>
Species::Phoenix => &self.phoenix, Species::Phoenix => &self.phoenix,
Species::Cockatrice => &self.cockatrice, Species::Cockatrice => &self.cockatrice,
Species::Roc => &self.roc, Species::Roc => &self.roc,
Species::FlameWyvern => &self.wyvern_flame,
} }
} }
} }
pub const ALL_SPECIES: [Species; 3] = [Species::Phoenix, Species::Cockatrice, Species::Roc]; pub const ALL_SPECIES: [Species; 4] = [
Species::Phoenix,
Species::Cockatrice,
Species::Roc,
Species::FlameWyvern,
];
impl<'a, SpeciesMeta: 'a> IntoIterator for &'a AllSpecies<SpeciesMeta> { impl<'a, SpeciesMeta: 'a> IntoIterator for &'a AllSpecies<SpeciesMeta> {
type IntoIter = std::iter::Copied<std::slice::Iter<'static, Self::Item>>; type IntoIter = std::iter::Copied<std::slice::Iter<'static, Self::Item>>;

View File

@ -343,9 +343,9 @@ fn default_main_tool(body: &Body) -> Item {
)), )),
}, },
Body::BirdLarge(bird_large) => match (bird_large.species, bird_large.body_type) { Body::BirdLarge(bird_large) => match (bird_large.species, bird_large.body_type) {
(bird_large::Species::Cockatrice, _) => Some(Item::new_from_asset_expect( (bird_large::Species::Cockatrice | bird_large::Species::FlameWyvern, _) => Some(
"common.items.npc_weapons.unique.birdlargebreathe", Item::new_from_asset_expect("common.items.npc_weapons.unique.birdlargebreathe"),
)), ),
(bird_large::Species::Phoenix, _) => Some(Item::new_from_asset_expect( (bird_large::Species::Phoenix, _) => Some(Item::new_from_asset_expect(
"common.items.npc_weapons.unique.birdlargefire", "common.items.npc_weapons.unique.birdlargefire",
)), )),

View File

@ -98,8 +98,10 @@ impl Animation for FlyAnimation {
next.wing_out_l.position = Vec3::new(-s_a.wing_out.0, s_a.wing_out.1, s_a.wing_out.2); next.wing_out_l.position = Vec3::new(-s_a.wing_out.0, s_a.wing_out.1, s_a.wing_out.2);
next.wing_out_r.position = Vec3::new(s_a.wing_out.0, s_a.wing_out.1, s_a.wing_out.2); next.wing_out_r.position = Vec3::new(s_a.wing_out.0, s_a.wing_out.1, s_a.wing_out.2);
next.wing_out_l.orientation = Quaternion::rotation_y(-flap3 * 1.2 - 0.3); next.wing_out_l.orientation =
next.wing_out_r.orientation = Quaternion::rotation_y(flap3 * 1.2 + 0.3); Quaternion::rotation_y(-flap3 * 0.6 - 0.3) * Quaternion::rotation_x(-flap2 * 1.4);
next.wing_out_r.orientation =
Quaternion::rotation_y(flap3 * 0.6 + 0.3) * Quaternion::rotation_x(-flap2 * 1.4);
next.tail_front.position = Vec3::new(0.0, s_a.tail_front.0, s_a.tail_front.1); next.tail_front.position = Vec3::new(0.0, s_a.tail_front.0, s_a.tail_front.1);
next.tail_front.orientation = next.tail_front.orientation =

View File

@ -48,37 +48,23 @@ impl Animation for IdleAnimation {
next.chest.orientation = Quaternion::rotation_x(0.0); next.chest.orientation = Quaternion::rotation_x(0.0);
next.neck.position = Vec3::new(0.0, s_a.neck.0, s_a.neck.1); next.neck.position = Vec3::new(0.0, s_a.neck.0, s_a.neck.1);
next.neck.orientation = Quaternion::rotation_x(0.0);
next.head.position = Vec3::new(0.0, s_a.head.0, s_a.head.1); next.head.position = Vec3::new(0.0, s_a.head.0, s_a.head.1);
next.head.orientation = Quaternion::rotation_z(duck_head_look.x)
* Quaternion::rotation_x(-duck_head_look.y.abs() + wave_slow_cos * 0.01);
next.beak.position = Vec3::new(0.0, s_a.beak.0, s_a.beak.1); next.beak.position = Vec3::new(0.0, s_a.beak.0, s_a.beak.1);
next.beak.orientation = Quaternion::rotation_x(wave_slow_cos * -0.02 - 0.02);
next.tail_front.position = Vec3::new(0.0, s_a.tail_front.0, s_a.tail_front.1); next.tail_front.position = Vec3::new(0.0, s_a.tail_front.0, s_a.tail_front.1);
next.tail_front.orientation = Quaternion::rotation_x(0.6);
next.tail_rear.position = Vec3::new(0.0, s_a.tail_rear.0, s_a.tail_rear.1); next.tail_rear.position = Vec3::new(0.0, s_a.tail_rear.0, s_a.tail_rear.1);
next.tail_rear.orientation = Quaternion::rotation_x(-0.2);
next.wing_in_l.position = Vec3::new(-s_a.wing_in.0, s_a.wing_in.1, s_a.wing_in.2); next.wing_in_l.position = Vec3::new(-s_a.wing_in.0, s_a.wing_in.1, s_a.wing_in.2);
next.wing_in_r.position = Vec3::new(s_a.wing_in.0, s_a.wing_in.1, s_a.wing_in.2); next.wing_in_r.position = Vec3::new(s_a.wing_in.0, s_a.wing_in.1, s_a.wing_in.2);
next.wing_in_l.orientation =
Quaternion::rotation_y(-0.8 + wave_slow_cos * 0.06) * Quaternion::rotation_z(0.2);
next.wing_in_r.orientation =
Quaternion::rotation_y(0.8 - wave_slow_cos * 0.06) * Quaternion::rotation_z(-0.2);
next.wing_mid_l.position = Vec3::new(-s_a.wing_mid.0, s_a.wing_mid.1, s_a.wing_mid.2); next.wing_mid_l.position = Vec3::new(-s_a.wing_mid.0, s_a.wing_mid.1, s_a.wing_mid.2);
next.wing_mid_r.position = Vec3::new(s_a.wing_mid.0, s_a.wing_mid.1, s_a.wing_mid.2); next.wing_mid_r.position = Vec3::new(s_a.wing_mid.0, s_a.wing_mid.1, s_a.wing_mid.2);
next.wing_mid_l.orientation = Quaternion::rotation_y(-0.1) * Quaternion::rotation_z(0.7);
next.wing_mid_r.orientation = Quaternion::rotation_y(0.1) * Quaternion::rotation_z(-0.7);
next.wing_out_l.position = Vec3::new(-s_a.wing_out.0, s_a.wing_out.1, s_a.wing_out.2); next.wing_out_l.position = Vec3::new(-s_a.wing_out.0, s_a.wing_out.1, s_a.wing_out.2);
next.wing_out_r.position = Vec3::new(s_a.wing_out.0, s_a.wing_out.1, s_a.wing_out.2); next.wing_out_r.position = Vec3::new(s_a.wing_out.0, s_a.wing_out.1, s_a.wing_out.2);
next.wing_out_l.orientation = Quaternion::rotation_y(-0.4) * Quaternion::rotation_z(0.2);
next.wing_out_r.orientation = Quaternion::rotation_y(0.4) * Quaternion::rotation_z(-0.2);
next.leg_l.position = Vec3::new(-s_a.leg.0, s_a.leg.1, s_a.leg.2); next.leg_l.position = Vec3::new(-s_a.leg.0, s_a.leg.1, s_a.leg.2);
next.leg_l.orientation = Quaternion::rotation_x(0.0); next.leg_l.orientation = Quaternion::rotation_x(0.0);
@ -86,9 +72,8 @@ impl Animation for IdleAnimation {
next.leg_r.orientation = Quaternion::rotation_x(0.0); next.leg_r.orientation = Quaternion::rotation_x(0.0);
next.foot_l.position = Vec3::new(-s_a.foot.0, s_a.foot.1, s_a.foot.2); next.foot_l.position = Vec3::new(-s_a.foot.0, s_a.foot.1, s_a.foot.2);
next.foot_l.orientation = Quaternion::rotation_x(0.0);
next.foot_r.position = Vec3::new(s_a.foot.0, s_a.foot.1, s_a.foot.2); next.foot_r.position = Vec3::new(s_a.foot.0, s_a.foot.1, s_a.foot.2);
next.foot_r.orientation = Quaternion::rotation_x(0.0);
next next
} }

View File

@ -165,66 +165,79 @@ impl<'a> From<&'a Body> for SkeletonAttr {
(Phoenix, _) => (2.5, 16.0), (Phoenix, _) => (2.5, 16.0),
(Cockatrice, _) => (2.5, 16.0), (Cockatrice, _) => (2.5, 16.0),
(Roc, _) => (2.5, 27.5), (Roc, _) => (2.5, 27.5),
(FlameWyvern, _) => (2.5, 23.0),
}, },
neck: match (body.species, body.body_type) { neck: match (body.species, body.body_type) {
(Phoenix, _) => (2.5, -5.5), (Phoenix, _) => (2.5, -5.5),
(Cockatrice, _) => (5.0, -1.5), (Cockatrice, _) => (5.0, -1.5),
(Roc, _) => (9.5, -1.5), (Roc, _) => (9.5, -1.5),
(FlameWyvern, _) => (11.0, -0.5),
}, },
head: match (body.species, body.body_type) { head: match (body.species, body.body_type) {
(Phoenix, _) => (6.0, 12.0), (Phoenix, _) => (6.0, 12.0),
(Cockatrice, _) => (8.0, 4.5), (Cockatrice, _) => (8.0, 4.5),
(Roc, _) => (17.0, -3.5), (Roc, _) => (17.0, -3.5),
(FlameWyvern, _) => (10.0, -1.5),
}, },
beak: match (body.species, body.body_type) { beak: match (body.species, body.body_type) {
(Phoenix, _) => (5.0, 3.0), (Phoenix, _) => (5.0, 3.0),
(Cockatrice, _) => (2.0, -3.0), (Cockatrice, _) => (2.0, -3.0),
(Roc, _) => (0.0, -3.0), (Roc, _) => (0.0, -3.0),
(FlameWyvern, _) => (-1.0, 2.0),
}, },
tail_front: match (body.species, body.body_type) { tail_front: match (body.species, body.body_type) {
(Phoenix, _) => (-9.5, -1.0), (Phoenix, _) => (-9.5, -1.0),
(Cockatrice, _) => (-5.0, -2.5), (Cockatrice, _) => (-5.0, -2.5),
(Roc, _) => (-7.5, -3.5), (Roc, _) => (-7.5, -3.5),
(FlameWyvern, _) => (-10.0, -5.0),
}, },
tail_rear: match (body.species, body.body_type) { tail_rear: match (body.species, body.body_type) {
(Phoenix, _) => (-11.0, 0.0), (Phoenix, _) => (-11.0, 0.0),
(Cockatrice, _) => (-8.0, -3.0), (Cockatrice, _) => (-8.0, -3.0),
(Roc, _) => (-8.0, -3.0), (Roc, _) => (-8.0, -3.0),
(FlameWyvern, _) => (-11.0, -1.0),
}, },
wing_in: match (body.species, body.body_type) { wing_in: match (body.species, body.body_type) {
(Phoenix, _) => (3.0, 2.5, 2.0), (Phoenix, _) => (3.0, 2.5, 2.0),
(Cockatrice, _) => (3.5, 7.0, 3.5), (Cockatrice, _) => (3.5, 7.0, 3.5),
(Roc, _) => (5.5, 7.5, -1.0), (Roc, _) => (5.5, 7.5, -1.0),
(FlameWyvern, _) => (5.5, 5.0, -2.0),
}, },
wing_mid: match (body.species, body.body_type) { wing_mid: match (body.species, body.body_type) {
(Phoenix, _) => (10.0, 1.0, 0.0), (Phoenix, _) => (10.0, 1.0, 0.0),
(Cockatrice, _) => (6.0, 0.0, 0.0), (Cockatrice, _) => (6.0, 0.0, 0.0),
(Roc, _) => (12.0, 1.0, -0.5), (Roc, _) => (12.0, 1.0, -0.5),
(FlameWyvern, _) => (19.0, 15.0, -1.0),
}, },
wing_out: match (body.species, body.body_type) { wing_out: match (body.species, body.body_type) {
(Phoenix, _) => (7.0, 2.0, 1.5), (Phoenix, _) => (7.0, 2.0, 1.5),
(Cockatrice, _) => (4.0, -1.0, 1.0), (Cockatrice, _) => (4.0, -1.0, 1.0),
(Roc, _) => (10.0, -2.0, 0.0), (Roc, _) => (10.0, -2.0, 0.0),
(FlameWyvern, _) => (1.0, 1.0, 0.0),
}, },
leg: match (body.species, body.body_type) { leg: match (body.species, body.body_type) {
(Phoenix, _) => (4.0, 1.5, 12.0), (Phoenix, _) => (4.0, 1.5, 12.0),
(Cockatrice, _) => (3.5, 2.5, 13.0), (Cockatrice, _) => (3.5, 2.5, 13.0),
(Roc, _) => (5.5, -1.5, 17.5), (Roc, _) => (5.5, -1.5, 17.5),
(FlameWyvern, _) => (5.5, -2.0, 15.5),
}, },
foot: match (body.species, body.body_type) { foot: match (body.species, body.body_type) {
(Phoenix, _) => (0.5, -0.5, -2.5), (Phoenix, _) => (0.5, -0.5, -2.5),
(Cockatrice, _) => (0.5, -3.0, -3.0), (Cockatrice, _) => (0.5, -3.0, -3.0),
(Roc, _) => (2.5, -2.5, -5.5), (Roc, _) => (2.5, -2.5, -5.5),
(FlameWyvern, _) => (0.5, 0.0, -3.5),
}, },
scaler: match (body.species, body.body_type) { scaler: match (body.species, body.body_type) {
(Phoenix, _) => (1.0), (Phoenix, _) => (1.0),
(Cockatrice, _) => (1.0), (Cockatrice, _) => (1.0),
(Roc, _) => (1.0), (Roc, _) => (1.0),
(FlameWyvern, _) => (1.0),
}, },
feed: match (body.species, body.body_type) { feed: match (body.species, body.body_type) {
(Phoenix, _) => (-0.65), (Phoenix, _) => (-0.65),
(Cockatrice, _) => (-0.5), (Cockatrice, _) => (-0.5),
(Roc, _) => (-0.4), (Roc, _) => (-0.4),
(FlameWyvern, _) => (-0.65),
}, },
} }
} }